以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 我把方案又改简单了 看怎么写 谢谢 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=183794) |
-- 作者:Tiffany1 -- 发布时间:2021/1/7 13:32:36 -- 我把方案又改简单了 看怎么写 谢谢 实现以下思想,用于回测(日线)逻辑很简单: 1.if今日日期=2020年1月1日,则 取得2019年12月31日的收盘价并把它赋值给A。并且 if今日收盘价>A,就做多; if今日收盘价<A,就做空; if今日收盘价=A,就什么都不做。 2.if今日日期>=2020年1月2日 and 今日日期<=2020年6月30日, 则 同样取得2019年12月31日的收盘价并把它赋值给A。并且 if今日收盘价金叉A,就平仓并做多; if今日收盘价死叉A,就平仓并做空; if没有金叉也没有死叉,就什么也不做。 3.if今日日期=2020年7月1日,则 平掉所有仓位。并且取得2020年6月30日的收盘价并把它赋值给A。并且 if今日收盘价>A,就重新开多; if今日收盘价<A,就重新开空; if今日收盘价=A,就什么都不做。 4.if今日日期>=2020年7月2日 and 今日日期<=2020年12月31日, 则 同样取得2020年6月30日的收盘价并把它赋值给A。并且 if今日收盘价金叉A,就平仓并做多; if今日收盘价死叉A,就平仓并做空; if没有金叉也没有死叉,就什么也不做。 5.if今日日期=2021年1月1日,则 平掉所有仓位,结束,不再开仓了。 步骤4和步骤2几乎相同,只有日期差异。我只会写这个文字版的,改为真正的程序化用于回测应该怎么写?并请纠正我上面内容中的错处。谢谢
|
-- 作者:FireScript -- 发布时间:2021/1/7 14:24:59 -- 这前面我记得写过一个差不多的代码啊。 |
-- 作者:Tiffany1 -- 发布时间:2021/1/7 14:40:04 -- 回复:(FireScript) 这前面我记得写过一个差不... 跟之前有所不同。比如这次有很多if,我不知道if套if怎么写。表面上文字很多,其实逻辑很简单,对于你们来讲 可能15分钟就写完了。我可以等 等你们不忙的时候 今天明天都行。帮我再写一下吧 多谢了。这是最后一次了。 |
-- 作者:FireScript -- 发布时间:2021/1/7 15:19:49 -- 你这里面日期都是固定死的?如果不是的话,那就有很多需要斟酌的地方了。 |
-- 作者:FireScript -- 发布时间:2021/1/7 15:23:51 -- 因为很简单,如果是任意指定的几个日期。是需要考虑这几个日期是否是交易日的。 |
-- 作者:Tiffany1 -- 发布时间:2021/1/7 16:00:20 -- 回复:(FireScript) 因为很简单,如果是任意指... 对 日期就是固定死的,就按这个日期写就行了。程序不要去考虑是否为交易日(我自己手工会去调整日期 让它不是节假日的。比如本来在1号出信号,结果1号是周日,我查看了日历表后就手工改数字为2号,让它在2号再发信号。程序不要去反映是否交易日,否则反而把我手工操作的部分冲乱了)。 |
-- 作者:Tiffany1 -- 发布时间:2021/1/7 16:19:41 -- 回复:(FireScript) 因为很简单,如果是任意指... 我手工设定日期的时候 会先查看日历表,发现不是节假日我才去设定为那日。因此所有日期最后都会是交易日,不会出现非交易日。 [此贴子已经被作者于2021/1/7 16:20:36编辑过]
|
-- 作者:Tiffany1 -- 发布时间:2021/1/8 9:53:58 -- 回复:(FireScript) 因为很简单,如果是任意指... 您好,请问今天能抽空帮我写一下吗 真的感谢,上午下午都行。 这次比上次更简单了,比如不再需要寻找第二个交易日,只需要直接指定输入自然日日期就够了。而自然日日期 我在回测的时候会重新查看日历是否交易日,并把它改为设定在交易日日期,避开非交易日的。所以不会出现非交易日的情况。 这个方案逻辑很简单,对你们专业人士来说 15分钟可能就搞定了,有空的话抽空帮帮我吧,真的拜托了,感谢你。这是最终版了 以后不会再麻烦你了。
|
-- 作者:FireScript -- 发布时间:2021/1/8 10:19:08 -- INPUT:year1(2020,1990,2100,1),year2(2020,1990,2100,1),year3(2021,1990,2100,1); INPUT:month1(1,1,12,1),month2(7,1,12,1),month3(1,1,12,1); INPUT:day1(1,1,31,1),day2(1,1,31,1),day3(1,1,31,1),; cd1:year=year1 and MONTH=month1 and day=day1;//日期1判断 cd2:year=year2 and MONTH=month2 and day=day2;//日期2判断 cd3:year=year3 and MONTH=month3 and day=day3;//日期3判断 VARIABLE:A1:=0,A2:=0,A3:=0; temp:=ref(c,1); IF cd1 then a1:=temp; IF cd2 then a2:=temp; IF cd3 then A3:=1; showA1:VALUEWHEN(a1<>0,a1); showA2:VALUEWHEN(a2<>0,a2); if cd1 then //第一个日期上的开仓 begin buy(c>A1,1,market); buyshort(c<A1,1,market); end if cross(c,A1) and A1 and A2=0 then begin sellshort(1,holding,market); buy(holding=0,1,market); end if cross(A1,c) and A1 and A2=0 then begin sell(1,holding,market); buyshort(holding=0,1,market); end if cd2 then //日期2全平 然后重新判断开仓 begin sell(1,holding,market); sellshort(1,holding,market); buy(c>A2,1,market); buyshort(c<A2,1,market); end if cross(c,A2) and A2 and A3=0 then begin sellshort(1,holding,market); buy(holding=0,1,market); end if cross(A2,c) and A2 and A3=0 then begin sell(1,holding,market); buyshort(holding=0,1,market); end if cd3 then begin 到期平仓1:sell(1,holding,market); 到期平仓2:sellshort(1,holding,market); end DRAWICON(cd1,h,1);//标记下日期1 DRAWICON(cd2,h,1);//标记下日期2 DRAWICON(cd3,h,1);//标记下日期3 持仓:holding; 日期你调整下。 |