金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 7061|回复: 12

请教分笔行情的回测策略

[复制链接]

45

主题

122

帖子

132

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
发表于 2022-12-12 11:49 | 显示全部楼层 |阅读模式
老师我尝试写回测策略,隔夜仓位的处理,当天分笔累计成交量比较难弄,麻烦老师指点帮忙,简单写个框架,


基于分笔行情的回测
买入条件:条件1:每天交易时间内,统计930至14:56分的成交总手数(1分钟周期的成交量进行累加),该累计成交量达到上日成交量的80%
                条件2:基于分笔周期计算:一分钟之内涨幅>=3%
               条件3:最近价>=6%   and <8%
              条件4:时间  >=9:45   and  < 14:56

卖出条件:条件1:第二天  集合竞价平开/高开 :     当最新价 涨幅>=3%,卖1/3,涨幅达到>=5%,卖1/3,若涨停剩余仓位留仓过夜,若不涨停,14:56清仓;(若涨停,剩余仓位继续按本条件继续处理,直至剩余股票不足100股后全部清仓)
               条件2:集合竞价低开,开盘市价卖1/3,此后10:30若股价>=昨天收盘价     ,按条件1 处理,未达到条件1的卖出条件,14:56清仓;;若10:30最新价小于昨天收盘价,卖出1/3;此后剩余股票用条件1监视股票,不满足条件1,14:56清仓
               条件3 :第二天平开/高开后  若股价跌穿昨天收盘价,卖1/3,此后剩余股票用 条件1  监视股票,不满足条件1,到14:56清仓









补充内容 (2022-12-12 12:23):
  条件3:最近价>=6%   and <8%,这里指的是当时最近价的涨幅
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-12-12 13:38 | 显示全部楼层
1、你的这个策略是基于什么周期的?
2、股票集合竞价期间是没有分笔数据的,你的卖出条件中集合竞价高开,低开是指9:15分开始的集合竞价的报单价格?这个无法实现啊。我们只有集合竞价结束时的成交价格,也就是当天的开盘价格的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

122

帖子

132

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
 楼主| 发表于 2022-12-12 19:58 | 显示全部楼层
技术010 发表于 2022-12-12 13:38
1、你的这个策略是基于什么周期的?
2、股票集合竞价期间是没有分笔数据的,你的卖出条件中集合竞价高开, ...

1,我的这个策略总体框架是以分笔未周期,我希望能及时买到急涨起来的股票;
2.  条件1,调用1分钟周期进行成交量统计,是希望减少计算量。
3.我所说的集合竞价,更正为开盘价,  考虑的就是平开/高开/低开的三种情况

补充内容 (2022-12-12 21:21):
老师,条件1,若在实盘,我是用dynainfo(8)与上一天的成交总量进行比较的,即dynainfo(8)=0.8*CALLSTOCK('',vtvol,6,-1);但是怎么将这个比较写成回测代码呢?
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-12-13 09:24 | 显示全部楼层
本帖最后由 技术010 于 2022-12-13 09:36 编辑

1、分钟或分笔周期上,统计当天的成交量,直接用sum函数就可以,例如:SUM(VOL,TODAYBAR);  //当天开盘到现在的总成交量。
2、1分钟涨幅是要在分笔周期上定义1分钟间隔的涨幅?这个不好定义啊,你试下以下的逻辑呢,如下。另外或许可以考虑下引用1分钟周期的价格,计算1分钟周期上的一个价格涨跌幅度呢。      A:const(T0TOTIME((TIMETOT0(time)-60)));
     A1:VALUEWHEN(time=A,close);
     A2:(C-A1)/A1;   //1分钟内涨跌幅
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

12

主题

58

帖子

58

积分

等级: 免费版

注册:
2022-9-6
曾用名:
发表于 2022-12-13 09:43 | 显示全部楼层
框架时间周期全部改为3秒线吧, 关于条件2  , 原来1分钟之内的涨幅,改为最近20根K线的累计涨幅,   这样好像也刚好满足1分钟的要求,可以实现么?这样随着每一跳的前移,它都能运算出最新的一分钟涨幅
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-12-13 09:53 | 显示全部楼层
逻辑也是可以,但是坐标就不能使用交易日坐标了,要使用交易时间坐标了,因为遇到品种交易不活跃的,那20根3秒K线不一定是60秒间隔了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

122

帖子

132

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
 楼主| 发表于 2022-12-13 10:22 | 显示全部楼层
老师,没问题的,我是学习写追涨停的策略,应该足够活跃的,原策略构思更正如下:

基于3秒线行情的回测
买入条件:条件1:每天交易时间内,统计930至14:56分的成交总手数(SUM(VOL,TODAYBAR)),该累计成交量达到上日成交量的80%
                条件2:最近20根K线的累计涨幅>=3%
               条件3:最新价>=6%   and <8%
              条件4:时间  >=9:45   and  < 14:56

卖出条件:条件1:第二天开盘平开/高开 :     当最新价 涨幅>=3%,卖1/3,涨幅达到>=5%,卖1/3,若涨停剩余仓位留仓过夜,若不涨停,14:56清仓;(若涨停,剩余仓位继续按本条件继续处理,直至剩余股票不足100股后全部清仓)
               条件2:第二天开盘低开,开盘市价卖1/3,此后10:30若 股价>=昨天收盘价  ,按条件1 处理,未达到条件1的卖出条件,14:56清仓;;若10:30最新价小于昨天收盘价,卖出1/3;此后剩余股票用条件1监视股票,不满足条件1,到14:56清仓
               条件3 :第二天开盘平开/高开后  若股价跌穿昨天收盘价时马上卖1/3,此后剩余股票用 条件1  监视股票,不满足条件1,到14:56清仓


麻烦老师有空时帮忙把上面的逻辑写一下框架,我学习着修改运用
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-12-13 10:31 | 显示全部楼层
相对完整的策略编写需要点时间,写完会直接本贴回复的,关注此贴即可。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

122

帖子

132

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
 楼主| 发表于 2022-12-13 12:26 | 显示全部楼层
辛苦老师
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-12-13 16:18 | 显示全部楼层
本帖最后由 技术010 于 2022-12-13 16:19 编辑

你这个平仓逻辑还是比较复杂的,需要使用全局变量来控制的。参考如下代码:
[PEL] 复制代码
INPUT:SS(1000,100,10000,100);
GLOBALVARIABLE:PCCON1=0,PCCON1_1=0;  //平仓条件1每日平仓控制
GLOBALVARIABLE:PCCON2=0,PCCON2_1=0;  //平仓条件2每日平仓控制
GLOBALVARIABLE:PCCON3=0;             //平仓条件3每日平仓控制

REF_VOL:"$VOL##DAY";   //昨日成交量
KDCON1:SUM(VOL,TODAYBAR)>=REF_VOL*0.8;
KDCON2:(C-REF(C,20))/REF(C,20)>=0.03;
KDCON3:(C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.06 AND (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)<=0.08;
KDCON4:TIME>=094500 AND TIME<=145600;
ZT:(C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.1;  //这是简单的涨停定义,可以根据你的需要自行定义
PCSS:IF(TBUYHOLDINGEX('','',0)>0 AND INTPART(TBUYHOLDINGEX('','',0)/3)>100,INTPART(TBUYHOLDINGEX('','',0)/3),100); //平仓手数

IF KDCON1 AND KDCON2 AND KDCON3 AND KDCON4 THEN 
   TBUY(TBUYHOLDINGEX('','',2)=0,SS,MKT);

//平仓条件1逻辑   
IF REF(OPEN,TODAYBAR-1)>=REF(C,TODAYBAR) AND (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.03 AND PCCON1=0 THEN BEGIN 
   TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
   PCCON1:=1;
   END
   
IF REF(OPEN,TODAYBAR-1)>=REF(C,TODAYBAR) AND (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.05 AND PCCON1_1=0 THEN BEGIN 
   TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
   PCCON1_1:=1;
   END
   
IF TIME>145600 AND ZT=0 THEN                    //145600之后,不涨停就清仓
   TSELL(TBUYHOLDINGEX('','',0)>0,0,MKT);

//平仓条件2逻辑   
IF  REF(OPEN,TODAYBAR-1)<REF(C,TODAYBAR) AND PCCON2=0 THEN BEGIN 
    TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);       //低开,平1/3
    PCCON2:=1;
    END
    
IF  REF(OPEN,TODAYBAR-1)<REF(C,TODAYBAR) AND PCCON2=1 AND TIME>=103000 AND C>REF(C,TODAYBAR) THEN  BEGIN
    IF (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.03 AND PCCON1=0 THEN BEGIN //平仓条件2,在103000若上涨,按条件1平仓
       TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
       PCCON1:=1;
       END
       
    IF (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.05 AND PCCON1_1=0 THEN BEGIN
       TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
       PCCON1_1:=1;
       END	
    END
    
IF  REF(OPEN,TODAYBAR-1)<REF(C,TODAYBAR) AND PCCON2=1 AND TIME>=103000 AND C<REF(C,TODAYBAR) THEN  BEGIN
    TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);                             //平仓条件2,在103000若下跌,平仓1/3
    PCCON2_2:=1;
    END
    
IF PCCON2_2=1 THEN BEGIN                                               //平仓条件2,在103000若下跌,平仓1/3后,按条件1平仓
 	IF (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.03 AND PCCON1=0 THEN BEGIN 
       TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
       PCCON1:=1;
       END
       
    IF (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.05 AND PCCON1_1=0 THEN BEGIN
       TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
       PCCON1_1:=1;
       END 
    END
    
//平仓条件3逻辑
IF REF(O,TODAYBAR-1)>=REF(C,TODAYBAR) AND C<REF(C,TODAYBAR) AND PCCON3=0 THEN BEGIN
   TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);      //平空或高开,股价下跌昨收,平1/3
   PCCON3:=1;	
   END

IF PCCON3=1 THEN BEGIN                             //条件3平1/3后,按条件1平仓
   IF (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.03 AND PCCON1=0 THEN BEGIN 
      TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
      PCCON1:=1;
      END
       
   IF (C-REF(C,TODAYBAR))/REF(C,TODAYBAR)>=0.05 AND PCCON1_1=0 THEN BEGIN
      TSELL(TBUYHOLDINGEX('','',0)>0,PCSS,MKT);
      PCCON1_1:=1;
      END 	
   END
   
   
IF DATE<>REF(DATE,1) THEN BEGIN    //每一天,初始化平仓的次数
   PCCON1:=0;
   PCCON1_1:=0;
   PCCON2:=0;
   PCCON2_1:=0;
   PCCON3:=0;
   END

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-8-29 17:46 , Processed in 0.111847 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表