返回列表 发布新帖

高频算法---动态网格策略原理运用

43 0

文章声明:本内容为个人的业余研究,和任何单位,机构没有关系,文章出现的股票代码,全部只是测试例子,不做投资参考,投资有风险,代码学习使用,不做商业用途

今天在把聚宽的摸狗策略迁移到ptrade,在加入我的理解,优化成我真正的动量实盘模型

fc9ae904a17dca6703b0843d33064943.png

我感觉在加入,止盈止损,趋势,大盘控制一下下回测就非常不错了

a0add26693aef5034575544526233dd9.png

52ba8776456d681d4e110405730fe126.png

具体完善了高频T0的算法,包含了动态网格,对称网格,冲高回落,脉冲等模块,具体介绍动态网格策略的原理设计qmt代码

点击网页下载就可以http://14.103.193.242:9999/xms_quants.html

最后一个

95892d08c4333260ed29df464f5d34db.png

670f746ac676e680c0b6c4631f624d9a.png

这里先介绍一下怎么样使用,输入账户

2f055162a5e6d26754c9a242e865120f.png

输入交易记录的文件路径

10828229ae84982bb9c2c400c398c6e3.png

选择是否开启仓位管理

22ad93dde2e37c09f3720af27aa2a863.png

选择是检测自定义股票池,还是直接检测持股交易

cf4601c56fc0aebceedfded480b7736f.png

开启算法,设置买卖的设置

f8d72e5638e201160b17bb0a1ce85b2a.png

设置网格大小

6151e2cd4237e81a5ad2410a5f02bf55.png

设置没有问题挂模型交易就可以

94a9646d5b8ee837ece6fbe5e0ea345c.png

3516b2bafd7062ba6dde58c0ea9bb2de.png

a31d904f306bb1a4bbf0bfd05f4d0a66.png

注意时间要设置4,9,14实盘的时候

27c1dae2de41dd782ffe27da35b4c07b.png

源代码我全部上传了知识星球下载就可以

9d31a6fca0706e9b393a07ad4127ac51.jpg

不懂的问我就可以,网页的邀请码找我要就可以,备注邀请码,找我开户可以申请使用

8f98e3b7aaee3e0db8539c9963274010.jpg

50b32b9c0bc5085e274697d0f25c0ff7.png

一、 核心思想:建立一个“智能的自动高抛低吸系统”

您可以想象一个在波动的市场中不断自动工作的智能机器人。它的核心任务只有两个:价格跌到一定程度就买入,价格涨到一定程度就卖出。但这个机器人不是盲目地在一个固定价格区间内操作,而是会根据市场的最新情况和它自己之前的操作,动态地调整其判断的“基准”,从而使系统始终与市场保持同步,避免在单边行情中陷入被动。

这个策略就是这个“智能机器人”的大脑。

二、 策略原理解析:动态基准与条件触发

这个策略的原理可以分解为四个关键步骤:

1. 确立动态的“锚点价格”(基准价格)

这是整个策略最核心、最“动态”的部分。普通网格策略的锚点可能是固定的成本价或初始价,但本策略的锚点会根据实际情况智能调整,主要有以下三种情况:

  • 情况一:优先以“最近成交价”为锚点
    • 逻辑:如果当天在这个策略下已经成功进行了交易(无论是买还是卖),那么策略会认为市场已经认可了这个新的价格水平。此时,它会将锚点立即更新为最后一次交易的成交价
    • 类比:好比你在一条河里划船,你不再关心最初的出发岸边有多远,而是把你上一次停靠的码头作为新的起点,来计算你接下来是向上游还是下游划。
    • 目的:实现网格的“移动”。这样能及时锁定之前的利润或调整成本,让策略始终基于最新的市场状态做决策。
  • 情况二:以“未成交的买单价格”为锚点
    • 逻辑:如果策略之前发出了买入指令但尚未成交(即挂单状态),说明系统已经认为价格跌到了值得买入的区域。此时,它会将锚点切换到这个挂单的价格
    • 类比:你告诉经纪人:“当苹果价格跌到5元时给我买一箱”。在订单未成交前,你的大脑会不自觉地以“5元”这个预期价格作为新的心理基准,来判断市场后续的波动。
    • 目的:保持策略的逻辑一致性。避免在挂单期间,因价格小幅波动而触发矛盾的信号。
  • 情况三:以“昨日收盘价”为初始锚点
    • 逻辑:如果当天还没有任何操作和挂单,策略需要一个起点。这个起点就是前一个交易日的收盘价
    • 类比:这是你开始一天交易前,在航海图上确定的那个初始坐标。
    • 目的:为当日的首次交易提供客观、合理的参考依据。

2. 计算实时的“偏离度”

确定了动态锚点价格后,策略会实时计算当前市场价格相对于这个锚点的涨跌幅度。

偏离度 = (当前价 - 锚点价格) / 锚点价格 × 100%

这个“偏离度”就是判断是否采取行动的尺子。

3. 设置触发交易的“阈值”

策略预设了两个关键阈值:

  • 上方阈值 (x1):一个正数,例如 <span leaf="">0.8</span>,代表 <span leaf="">+0.8%</span>
  • 下方阈值 (x2):一个负数,例如 <span leaf="">-1.0</span>,代表 <span leaf="">-1.0%</span>

这两个阈值就像是在锚点价格上下画出的两条“触发线”。

4. 执行条件判断与交易

最后,策略将“实时偏离度”与预设的“阈值”进行比较:

  • 当 偏离度 ≥ x1 (如+0.8%):意味着价格已经从锚点上涨了足够多,触发了上方的“卖出线”。策略会发出 “卖出” 信号。这相当于完成了一次“高抛”。
  • 当 偏离度 ≤ x2 (如-1.0%):意味着价格已经从锚点下跌了足够多,触发了下方的“买入线”。策略会发出 “买入” 信号。这相当于完成了一次“低吸”。
  • 当 偏离度 介于 x2 和 x1 之间:意味着价格在锚点附近小幅波动,没有达到交易条件。策略会保持观望,不进行任何操作

三、 策略的显著特点

  1. 动态适应性:其最大的特点在于“动态锚点”。它不像固定网格那样死板,能够根据市场走势和自身交易记录不断调整中心,更好地适应市场节奏。
  2. 高频与机械化:该策略旨在捕捉盘中每一段小的波动。只要价格在阈值间来回震荡,它就能反复进行“买入-卖出”的循环操作,积小胜为大胜。所有决策依据预设的数学规则,彻底杜绝了交易者的情绪干扰。
  3. 基于“均值回归”假设:该策略的核心信念是“价格围绕价值波动”,短期内的偏离最终会回归。它正是在利用这种偏离来盈利。
  4. 严格的纪律性与风险控制:通过固定的百分比阈值,策略强制规定了每笔交易的盈利目标和补仓点位,避免了人性中常见的“贪婪”和“恐惧”。

四、 策略的潜在风险与适用场景

适用场景:

  • 震荡市(盘整市) 是该策略的“黄金舞台”。在价格没有明确方向,在一个区间内反复上下的行情中,该策略能最大化其效能。

五、 总结

总而言之,您所分析的这套 “动态条件分时网格策略” ,是一个设计精巧的短线交易工具。它通过动态调整基准锚点,使得网格能够紧跟市场脉搏,再通过严格的百分比阈值来触发机械化的高抛低吸操作。

它的精髓在于承认市场的不可预测性,不追求买在最低点、卖在最高点,而是通过一套严谨的系统,持续地从市场的不确定性(波动)中抽取稳定的、小幅的利润。对于震荡市场而言,它无疑是一个强大的武器;但使用者必须清醒地认识到其在趋势行情中的局限性,并做好相应的风险管理和资金规划。

底层的源代码

class user_def_trader_func:
    def __init__(self,c,stock='512480.SH',tick='',hist='',other_data=''):
        '''
        自定义交易函数
        '''
        self.tick=tick
        self.hist=hist
        self.other_data=other_data
        self.log=pd.read_excel(r'{}'.format(c.path))
        self.trader_date=str(datetime.now())[:10]
        self.now_date=datetime.now()
        self.stock=stock
        if self.log.shape[0]>0:
            self.log=self.log[['证券代码','模块名称','交易日','触发时间','交易类型','交易数量','触发价格','投资备注','交易状态']]
            self.log=self.log.sort_values(by='触发时间',ascending=True)
            self.log=self.log[self.log['交易日']==self.trader_date]
        else:
            self.log=pd.DataFrame()
        
        self.c=c
    def conditional_single_time_sharing_grid(self,
            name='固定高频分时网格',
            x1=0.8,
            x2=-1):
        tick=self.hist
        stock=self.stock
        base_price=tick['lastClose'].tolist()[-1]
        price=tick['lastPrice'].tolist()[-1]
        close_list=tick['lastPrice'].tolist()
        if self.log.shape[0]>0:
            self.log['证券代码']=self.log['证券代码'].astype(str)
            log=self.log[self.log['模块名称']==name]
            log=log[log['证券代码']==stock]
            if log.shape[0]>0:
                pre_price=log['触发价格'].tolist()[-1]
                zdf=((price-pre_price)/pre_price)*100
            else:
                order_stats,order_price=check_buy_order(self.c,stock=stock)
                if order_stats==True:
                    base_price=order_price
                else:
                    base_price=base_price
                zdf=((price-base_price)/base_price)*100
        else:
            order_stats,order_price=check_buy_order(self.c,stock=stock)
            if order_stats==True:
                base_price=order_price
            else:
                base_price=base_price
            zdf=((price-base_price)/base_price)*100
        if zdf>=x1:
            print('{} 模块{} 卖出{}  目前涨跌幅{} 大于目前标涨跌幅{} '.format(self.now_date,name,stock,zdf,x1))
            return 'sell'
        elif zdf<=x2:
            print('{} 模块{} 买入{}  目前涨跌幅{} 小于目前标涨跌幅{} '.format(self.now_date,name,stock,zdf,x2))
            return 'buy'
        else:
            print('{} 模块{} 不符合交易{}  目前涨跌幅{} 在{}到{}期间 '.format(self.now_date,name,stock,zdf,x2,x1))
            return ''

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表