以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  轨道策略编写  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=168827)

--  作者:bill163
--  发布时间:2019/3/18 17:09:27
--  轨道策略编写
金字塔的老师下午好,我想请您给编写1个程序化策略,要求如下:

基础条件
1.上轨:前20根K线的最高价;
2.下轨:前20根K线的最低价;
3.轨道宽度:上轨-下轨;
4.均线:60日均线
平仓时还是依据开仓时的上下轨数值和宽度,不做浮动
 S1:上轨+宽度*0.5
 S2:上轨+宽度
 S3:上轨+宽度*2
 X1:下轨-宽度*0.5
 X2:下轨-宽度
 X3:下轨-宽度*2


开仓条件
1.开空:价格跌破下轨+价格小于均线+宽度小于20个单位价格;
   空仓止损:价格涨破上轨;
   空仓止盈:价格跌破X1后回落破X1  OR 价格跌破X2后回落破X2 OR 价格跌破X3


2.开多:反之(价格涨破上轨+价格大于均线+宽度小于20个单位价格);
   多仓止损:反之
   空仓止盈:反之

交易时间
1.开仓区间:白天(9:10-14:50),夜盘(21:10-02:10);
2.强平时间:白天14:51,夜盘2:11

--  作者:FireScript
--  发布时间:2019/3/18 17:12:32
--  
 完整策略编写需要一定时间,请关注本帖回复即可。
--  作者:bill163
--  发布时间:2019/3/18 17:21:27
--  
感谢老师,我会随时看帖,有写的不清楚的,我会立即解释~
--  作者:bill163
--  发布时间:2019/3/18 17:21:40
--  
感谢老师
--  作者:bill163
--  发布时间:2019/3/18 17:21:51
--  
感谢老师
--  作者:FireScript
--  发布时间:2019/3/19 9:28:33
--  
这个操作是怎样的呢? “价格跌破X1后回落破X1”。开仓后价格先下穿x1,然后又重新上传突破x1是吗?
--  作者:FireScript
--  发布时间:2019/3/19 10:01:43
--  
 
UPPER:ref(hhv(h,20),1);//上轨
LOWER:ref(llv(l,20),1);//下轨
ma60:ma(c,60);
kd:UPPER-LOWER;//宽度

tlimit:(time>=131000 and time<=175000) or (time>=11000 and time<=61000);//开仓限制时间

S1:=UPPER+kd*0.5;
S2:=UPPER+kd;
S3:=UPPER+kd*2;
X1:=LOWER-kd*0.5;
X2:=LOWER-kd;
X3:=LOWER-kd*2;

buycond1:cross(c,UPPER) and c>ma60 and kd<=20*MINDIFF;//开多条件
buy(holding=0 and buycond1 and tlimit,1,market);
buycond2:cross(LOWER,c) and c<ma60 and kd<=20*MINDIFF;//开空条件
buyshort(buycond2 and holding=0 and tlimit,1,market);

zs1:=cross(UPPER,c) and holding>0;//多头止损
zy1:=(count(cross(c,s1),ENTERBARS+1)>1 and cross(s1,c)) or (count(cross(c,s2),ENTERBARS+1)>1 and cross(s2,c)) or cross(c,s3);//多头止盈
if zs1 or zy1 then sell(holding>0,holding,market);

zs2:=cross(c,UPPER) and holding<0;
zy2:=(count(cross(x1,c),ENTERBARS+1)>1 and cross(c,x1)) or (count(cross(x2,c),ENTERBARS+1)>1 and cross(c,x2)) or cross(x3,c);
if zs2 or zy2 then sellshort(holding<0,holding,market);

if time>=175100 or time >=61100 then //强平需要根据你使用的周期调整下这里的time判断的数值。
begin
sell(holding>0,holding,market);
sellshort(holding<0,holding,market);
end
[此贴子已经被作者于2019/3/19 10:02:44编辑过]

--  作者:bill163
--  发布时间:2019/3/19 16:32:35
--  
老师好,回测起来不太对,我用手画一个模拟示意图,您看下哈~
图片点击可在新窗口打开查看此主题相关图片如下:ccf409799993bc61d34c05f7b76e19f.jpg
图片点击可在新窗口打开查看


--  作者:FireScript
--  发布时间:2019/3/19 16:59:11
--  
 使用
 S1:上轨+宽度*0.5
 S2:上轨+宽度
 S3:上轨+宽度*2
 X1:下轨-宽度*0.5
 X2:下轨-宽度
 X3:下轨-宽度*2

这些变量的时候使用的宽度是指开仓时候的宽度是吗?上下轨是否取开仓时候的上下轨,还是就是取当前K的。
[此贴子已经被作者于2019/3/19 17:00:53编辑过]