wellmike999 2024-06-17 06:19 采纳率: 50%
浏览 56
已结题

基于同花顺supermind的量化策略脚本编辑

我的具体策略逻辑如下:
1、按照半个小时扫描一次所有主板非ST股票,并进一步筛选目前收盘价上穿5-10-20-30-60-90-125日线的其中三条;
2、并且要求进一步筛选去年和近两个季度都盈利的股票;
3、要加上选出的股票的位置判断;位置要位于近两年最低价的130%以内;
4、单日成交量较上一日倍量;筹码集中度70小于15%
5.符合条件的股票池中,买入的顺序为分时的量比和主力净量越大越优先;
6、在上述策略中加入限制条件:总持有股票数量为不超过2只;且单只股票的仓位不得大于二分之一;
7、在量化交易策略中加入买入和卖出条件:买入条件为选出股票的分时价格的当时平均价格挂买入,买入金额为20万元;卖出条件为:止损3%,止盈5%-10%;
8、持股周期为不超过三天;
请大家依据上述逻辑编辑脚本,目的是在同花顺supermind上能回测策略并执行量化交易;数据来源和执行平台都是同花顺量化平台;谢谢!
同花顺supermind的帮助链接如下:https://quant.10jqka.com.cn/view/help/4

  • 写回答

21条回答 默认 最新

  • Roc-xb 后端领域优质创作者 2024-06-18 00:10
    关注

    要在同花顺SuperMind平台上实现你描述的量化策略,可以按照以下步骤编写策略脚本。以下是一个示例脚本,基于你的策略逻辑进行实现:

    # 导入必要的库
    import numpy as np
    import pandas as pd
    
    # 设置策略参数
    scan_interval = 30  # 扫描间隔,单位分钟
    max_hold_stocks = 2  # 最大持有股票数量
    max_position_per_stock = 0.5  # 单只股票最大仓位比例
    buy_amount = 200000  # 每次买入金额
    stop_loss = 0.03  # 止损比例
    take_profit_min = 0.05  # 最小止盈比例
    take_profit_max = 0.10  # 最大止盈比例
    max_hold_days = 3  # 持股周期,单位天
    
    # 筛选股票函数
    def filter_stocks(data):
        filtered_stocks = []
        for stock in data:
            # 条件1:收盘价上穿均线
            close = stock['close']
            ma5 = stock['ma5']
            ma10 = stock['ma10']
            ma20 = stock['ma20']
            ma30 = stock['ma30']
            ma60 = stock['ma60']
            ma90 = stock['ma90']
            ma125 = stock['ma125']
            if sum([close > ma for ma in [ma5, ma10, ma20, ma30, ma60, ma90, ma125]]) >= 3:
                # 条件2:去年和近两个季度盈利
                if stock['last_year_profit'] > 0 and stock['last_two_quarters_profit'] > 0:
                    # 条件3:位置判断
                    if close <= stock['lowest_price_2_years'] * 1.3:
                        # 条件4:成交量和筹码集中度
                        if stock['volume_today'] >= stock['volume_yesterday'] * 2 and stock['chip_concentration'] <= 15:
                            filtered_stocks.append(stock)
        return filtered_stocks
    
    # 排序股票函数
    def sort_stocks(filtered_stocks):
        sorted_stocks = sorted(filtered_stocks, key=lambda x: (x['volume_ratio'], x['net_main_force']), reverse=True)
        return sorted_stocks
    
    # 买入股票函数
    def buy_stocks(sorted_stocks):
        for stock in sorted_stocks:
            if len(holdings) < max_hold_stocks:
                if stock['ticker'] not in holdings:
                    # 买入股票
                    buy_price = stock['current_price']
                    buy_quantity = buy_amount / buy_price
                    holdings[stock['ticker']] = {'buy_price': buy_price, 'buy_quantity': buy_quantity, 'buy_date': current_date}
                    # 更新仓位
                    portfolio_value = sum([holdings[ticker]['buy_price'] * holdings[ticker]['buy_quantity'] for ticker in holdings])
                    if portfolio_value > total_cash * max_position_per_stock:
                        break
    
    # 卖出股票函数
    def sell_stocks():
        for ticker in list(holdings.keys()):
            stock = get_stock_data(ticker)
            buy_price = holdings[ticker]['buy_price']
            current_price = stock['current_price']
            if (current_price / buy_price - 1) <= -stop_loss or (current_price / buy_price - 1) >= take_profit_min or (current_price / buy_price - 1) >= take_profit_max or (current_date - holdings[ticker]['buy_date']).days > max_hold_days:
                # 卖出股票
                sell_price = current_price
                sell_quantity = holdings[ticker]['buy_quantity']
                total_cash += sell_price * sell_quantity
                del holdings[ticker]
    
    # 初始化持仓和现金
    holdings = {}
    total_cash = 1000000  # 初始现金金额
    
    # 主策略函数
    def strategy(data):
        filtered_stocks = filter_stocks(data)
        sorted_stocks = sort_stocks(filtered_stocks)
        buy_stocks(sorted_stocks)
        sell_stocks()
    
    # 获取股票数据函数(示例)
    def get_stock_data(ticker):
        # 此处应实现从同花顺平台获取股票数据的逻辑
        pass
    
    # 主程序
    current_date = pd.Timestamp.now()
    while True:
        if (pd.Timestamp.now() - current_date).seconds >= scan_interval * 60:
            current_date = pd.Timestamp.now()
            stock_data = get_all_stock_data()  # 获取所有股票数据
            strategy(stock_data)
    

    解释:

    1. 筛选股票filter_stocks 函数根据你的策略条件筛选股票。
    2. 排序股票sort_stocks 函数根据量比和主力净量排序股票。
    3. 买入股票buy_stocks 函数按照排序结果买入股票。
    4. 卖出股票sell_stocks 函数根据止损、止盈和持股周期条件卖出股票。
    5. 主策略函数strategy 函数整合筛选、排序、买入和卖出逻辑。
    6. 主程序:在主程序中定期调用策略函数。

    注意事项:

    1. 数据获取:示例中 get_stock_dataget_all_stock_data 函数需要实现从同花顺平台获取股票数据的逻辑。你可以参考同花顺SuperMind的API文档来实现。
    2. 持仓管理:示例中 holdingstotal_cash 用于管理持仓和现金情况。
    3. 回测和执行:在同花顺SuperMind平台上进行回测和执行时,需要确保数据获取和策略逻辑的实现符合平台要求。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(20条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 修改了问题 6月17日
  • 赞助了问题酬金200元 6月17日
  • 展开全部

悬赏问题

  • ¥30 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页