金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2087|回复: 4

请老师改下Dual Thrust

[复制链接]

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
发表于 2023-7-24 00:56 | 显示全部楼层 |阅读模式
以下是系统自带Dual Thrust,原系统是以一整天为单位,开盘后:(C>上轨 or C<下轨)就开仓,一直到收盘平仓。
请老师改成分成早中晚三个时间段交易,所有参数就用原系统,谢谢老师。
①:早盘开盘后(C>昨夜盘段上轨 or C<昨夜盘段下轨)开仓,早盘收盘前三分钟平仓。(上下轨是依据昨夜盘段)
②:午盘开盘后(C>今早盘段上轨 or C<今早盘段下轨)开仓,午盘收盘前三分钟平仓。(上下轨是依据今早盘段)
③:夜盘开盘后(C>今午盘段上轨 or C<今午盘段下轨)开仓,夜盘收盘前三分钟平仓。(上下轨是依据今午盘段)
其中上轨,下轨,原系统是依据昨日最高价,最低价。现在改成依据前一个交易段来设定。

//以下是系统自带Dual Thrust
//中间变量
INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),手数(1,1,10000,1);


CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
浮动区间:=MAX(HH-LL,HC-LL);//RANGE
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;


T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;//原系统交易时段
T2:=TIME>=CLOSETIME(0)-NMIN*100;//原系统收盘平仓


//交易条件
开多条件:=C>上轨 AND HOLDING=0;
开空条件:=C<下轨 AND HOLDING=0;


//交易系统
开多:BUY(开多条件 AND T1 AND CYC>1,手数,MARKET);
开空:BUYSHORT(开空条件 AND T1 AND CYC>1,手数,MARKET);
收盘平多:SELL(T2,手数,MARKET);
收盘平空:SELLSHORT(T2,手数,MARKET);



回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-7-24 09:41 | 显示全部楼层
加个收盘平仓就行了。

[PEL] 复制代码
INPUT:N(3,1,200,1);//N是提前的分钟数
MARK:=0;//用于记录当前是否满足某个收盘K结束前N分钟的变量
 
FOR I=0 TO 3 DO  //循环遍历每个收盘时间来进行判断。这里可以调整I起始位置 来控制需要处理的收盘节点。
BEGIN
abb:=timetot0(CLOSETIME(I))-time0,NODRAW;//当前K线时间距离收盘K线结束倒计时,在一个K上对应一个固定值
abb3:=timetot0(CLOSETIME(I))-timetot0(dynainfo(207)),NODRAW;//当前时间(当前的北京时间)距离收盘K时间 ,   在最新K上会一直变动。因为这个返回的是具体秒数
IF         (abb<N*60 and abb>=0 and (not(ISLASTBAR))) or (ISLASTBAR and  abb3>=0 and abb3<N*60) THEN MARK:=1;
END

//中间变量
INPUT:K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),手数(1,1,10000,1);



CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
浮动区间:=MAX(HH-LL,HC-LL);//RANGE
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;



//交易条件
开多条件:=C>上轨 AND HOLDING=0;
开空条件:=C<下轨 AND HOLDING=0;

TCD:NOT(MARK);

//交易系统
开多:BUY(开多条件 AND TCD,手数,MARKET);
开空:BUYSHORT(开空条件 AND TCD ,手数,MARKET);


 
 
if MARK  then //兼顾实际交易时候的信号和历史回测信号
begin
sell(holding>0,holding,market);
sellshort(holding<0,holding,market);        
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
 楼主| 发表于 2023-7-24 10:31 | 显示全部楼层
技术009 发表于 2023-7-24 09:41
加个收盘平仓就行了。

[mw_shl_code=pel,true]

谢谢老师,,这个好像把10.15--10.30的休息小节也算进去了,能否不算10.15-10.30这个小节呢?只在9点-11.30早盘,1.30-15.00午盘,21.00-11.30夜盘,这三个交易段呢?
截图202307241030442668.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-7-24 13:02 | 显示全部楼层
[PEL] 复制代码
INPUT:N(4,1,200,1);//N是提前的分钟数
MARK:=0;//用于记录当前是否满足某个收盘K结束前N分钟的变量
 
isNight:CLOSETIME(4)=CLOSETIME(0);
FOR I=0 TO 4 DO  //循环遍历每个收盘时间来进行判断。这里可以调整I起始位置 来控制需要处理的收盘节点。
BEGIN
if (isNight and I=2) or (not(isNight) and I=1) then CONTINUE; 
abb:=timetot0(CLOSETIME(I))-time0,NODRAW;//当前K线时间距离收盘K线结束倒计时,在一个K上对应一个固定值
abb3:=timetot0(CLOSETIME(I))-timetot0(dynainfo(207)),NODRAW;//当前时间(当前的北京时间)距离收盘K时间 ,   在最新K上会一直变动。因为这个返回的是具体秒数
IF         (abb<N*60 and abb>=0 and (not(ISLASTBAR))) or (ISLASTBAR and  abb3>=0 and abb3<N*60) THEN MARK:=1;
END
 
//中间变量
INPUT:K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),手数(1,1,10000,1);
 
 
 
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
浮动区间:=MAX(HH-LL,HC-LL);//RANGE
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
 
 
 
//交易条件
开多条件:=C>上轨 AND HOLDING=0;
开空条件:=C<下轨 AND HOLDING=0;
 
TCD:NOT(MARK);
 
//交易系统
开多:BUY(开多条件 AND TCD,手数,MARKET);
开空:BUYSHORT(开空条件 AND TCD ,手数,MARKET);
 
 
  
  
if MARK  then //兼顾实际交易时候的信号和历史回测信号
begin
sell(holding>0,holding,market);
sellshort(holding<0,holding,market);        
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
 楼主| 发表于 2023-7-24 18:20 | 显示全部楼层
技术009 发表于 2023-7-24 13:02
[mw_shl_code=pel,true]INPUT:N(4,1,200,1);//N是提前的分钟数
MARK:=0;//用于记录当前是否满足某个收盘K ...

谢谢老师
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 06:16 , Processed in 0.112112 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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