以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=184725) |
-- 作者:zengxing -- 发布时间:2021/3/16 13:37:53 -- 求教 编写问题 编写了一个套利模型,心里没谱,测试感觉有点问题,盈利后不反向 开仓!! fangxiang:=1; shijian:=111500; riqi:=210202; zhiying:=4000; ctshoushu1:=1; ctshoushu2:=2; ctshoushu3:=3; ctshoushu4:=4; ctshoushu5:=5; ctshoushu6:=6; ctshoushu7:=7; ctshoushu8:=8; ctshoushu9:=9; ctshoushu10:=10; ctzhisun1:=10000; ctzhisun2:=10000; ctzhisun3:=10000; ctzhisun4:=10000; ctzhisun5:=10000; ctzhisun6:=10000; ctzhisun7:=10000; ctzhisun8:=10000; ctzhisun9:=10000; ctzhisun10:=10000; GLOBALVARIABLE:ct:=1;//默认从1开始 GLOBALVARIABLE:ctshoushu:=1; GLOBALVARIABLE:ctzhisun:=1; GLOBALVARIABLE:fangxiangs:=0; //***************************** 账户:\'1000\'; 套利品种1:\'IF11\'; 套利品种2:\'IF12\'; //***************************** dyk1:=dynainfo2(7,套利品种1)-TAVGENTERPRICEEX2(\'\',套利品种1,0);//多盈亏 dyk2:=dynainfo2(7,套利品种2)-TAVGENTERPRICEEX2(\'\',套利品种1,0);//多盈亏 kyk1:=TAVGENTERPRICEEX2(\'\',套利品种1,1)-dynainfo2(7,套利品种1);//空盈亏 kyk2:=TAVGENTERPRICEEX2(\'\',套利品种2,1)-dynainfo2(7,套利品种2);//空盈亏 yingkui:=dyk1+dyk2+kyk1+kyk2; if ct=1 then begin ctzhisun=ctzhisun1; ctshoushu=ctshoushu1; end if riqi>date-1000000 or (riqi=date-1000000 and shijian>=time) and fangxiangs=0 then begin if fangxiang=1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种1); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种2); fangxiangs=1; end if fangxiang=-1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种2); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种1); fangxiangs=-1; end end if yingkui>zhiying then begin TSELL(1,ct,MKT ,0,0,账户,套利品种1); TSELL(1,ct,MKT ,0,0,账户,套利品种2); TSELLSHORT(1,ct,MKT ,0,0,账户,套利品种1); TSELLSHORT(1,ct,MKT ,0,0,账户,套利品种2); ct:=1;//连续止损中断的地方,务必重置全局变量CT。这里是止盈的地方重置了,你如果还有其他地方要终止连续止损的统计,同样也要重置这个全局变量 fangxiangs:=2; end if yingkui<ctzhisun then begin //平仓语句 ct:=ct+1;//止损的地方累计这个全局变量的值 //在反手的语句里,可以直接用ct作为反手下单的手数 if ct=2 then begin ctzhisun=ctzhisun2; ctshoushu=ctshoushu2; end if ct=3 then begin ctzhisun=ctzhisun3; ctshoushu=ctshoushu3; end if ct=4 then begin ctzhisun=ctzhisun4; ctshoushu=ctshoushu4; end if ct=5 then begin ctzhisun=ctzhisun5; ctshoushu=ctshoushu5; end if ct=6 then begin ctzhisun=ctzhisun6; ctshoushu=ctshoushu6; end if ct=7 then begin ctzhisun=ctzhisun7; ctshoushu=ctshoushu7; end if ct=8 then begin ctzhisun=ctzhisun8; ctshoushu=ctshoushu8; end if ct=9 then begin ctzhisun=ctzhisun9; ctshoushu=ctshoushu9; end if ct=10 then begin ctzhisun=ctzhisun10; ctshoushu=ctshoushu10; end if fangxiangs=1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种1); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种2); fangxiangs=-1; end if fangxiangs=-1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种2); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种1); fangxiangs=1; end end |
-- 作者:FireScript -- 发布时间:2021/3/16 15:20:01 -- 首先这里语法规范上就有问题:
fangxiangs=1; [此贴子已经被作者于2021/3/16 15:20:30编辑过]
|
-- 作者:zengxing -- 发布时间:2021/3/16 22:05:11 -- 因为fangxiang是全局变量,要反复赋值,就这么写了,不对吗? 思路很简单 就两句 说了呀
|
-- 作者:gxx978 -- 发布时间:2021/3/17 10:00:01 -- 如果是要赋值,那需要使用:=。如果只用了=,那表示是等号,两边的值进行了比较而已,不是赋值啊。你可以使用debugfile输出你的变量值,看是否满足了反向开仓的条件了。 |
-- 作者:zengxing -- 发布时间:2021/3/17 13:47:47 -- 首次开仓条件:参数时间 参数要求:开仓方向,开仓手数,止盈参数,加仓参数 档位参数, 加仓手数,加仓后的止盈 执行逻辑 :设置好开仓时间,合约开仓一多一空为一组,当一组的浮盈达到x值时平仓继续反方向开仓即为一空一多,达到浮盈x值时,继续反向,一直循环。如果一组开仓浮亏达到x值时,一组的多空同时加仓(参数自己输入加多少手),加仓后的止盈参数(可自己输入盈利多少点) 平仓,止盈出来后继续反向初始仓位操作! 备注 需要设置15个档位的止盈 跟加仓 参数
|
-- 作者:zengxing -- 发布时间:2021/3/17 13:48:40 -- 那这个要怎么改呢? |
-- 作者:gxx978 -- 发布时间:2021/3/17 14:23:33 -- 梳理了一遍代码,除了需要将你的代码中很多复制语句,需要将=换成:=外,从代码逻辑上未发现问题。只能在实际运行中,加入debugfile调试函数来跟踪了,后台程序化交易基本都要靠调试函数来跟踪问题的,单看代码是看不出什么问题的,只能发现一些简单的编写错误。以下是替你修改完的赋值语句错误。建议在实际运行的时候,用debugfile跟踪调试问题。 fangxiang:=1; shijian:=111500; riqi:=210202; zhiying:=4000; ctshoushu1:=1; ctshoushu2:=2; ctshoushu3:=3; ctshoushu4:=4; ctshoushu5:=5; ctshoushu6:=6; ctshoushu7:=7; ctshoushu8:=8; ctshoushu9:=9; ctshoushu10:=10; ctzhisun1:=10000; ctzhisun2:=10000; ctzhisun3:=10000; ctzhisun4:=10000; ctzhisun5:=10000; ctzhisun6:=10000; ctzhisun7:=10000; ctzhisun8:=10000; ctzhisun9:=10000; ctzhisun10:=10000; GLOBALVARIABLE:ct:=1;//默认从1开始 GLOBALVARIABLE:ctshoushu:=1; GLOBALVARIABLE:ctzhisun:=1; GLOBALVARIABLE:fangxiangs:=0; //***************************** 账户:\'1000\'; 套利品种1:\'IF11\'; 套利品种2:\'IF12\'; //***************************** dyk1:=dynainfo2(7,套利品种1)-TAVGENTERPRICEEX2(\'\',套利品种1,0);//多盈亏 dyk2:=dynainfo2(7,套利品种2)-TAVGENTERPRICEEX2(\'\',套利品种1,0);//多盈亏 kyk1:=TAVGENTERPRICEEX2(\'\',套利品种1,1)-dynainfo2(7,套利品种1);//空盈亏 kyk2:=TAVGENTERPRICEEX2(\'\',套利品种2,1)-dynainfo2(7,套利品种2);//空盈亏 yingkui:=dyk1+dyk2+kyk1+kyk2; if ct=1 then begin ctzhisun:=ctzhisun1; ctshoushu:=ctshoushu1; end if riqi>date-1000000 or (riqi=date-1000000 and shijian>=time) and fangxiangs=0 then begin if fangxiang=1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种1); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种2); fangxiangs:=1; end
if fangxiang=-1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种2); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种1); fangxiangs:=-1; end
end
if yingkui>zhiying then begin TSELL(1,ct,MKT ,0,0,账户,套利品种1); TSELL(1,ct,MKT ,0,0,账户,套利品种2); TSELLSHORT(1,ct,MKT ,0,0,账户,套利品种1); TSELLSHORT(1,ct,MKT ,0,0,账户,套利品种2); ct:=1;//连续止损中断的地方,务必重置全局变量CT。这里是止盈的地方重置了,你如果还有其他地方要终止连续止损的统计,同样也要重置这个全局变量 fangxiangs:=2; end if yingkui<ctzhisun then begin //平仓语句 ct:=ct+1;//止损的地方累计这个全局变量的值 //在反手的语句里,可以直接用ct作为反手下单的手数 if ct=2 then begin ctzhisun:=ctzhisun2; ctshoushu:=ctshoushu2; end if ct=3 then begin ctzhisun:=ctzhisun3; ctshoushu:=ctshoushu3; end if ct=4 then begin ctzhisun:=ctzhisun4; ctshoushu:=ctshoushu4; end if ct=5 then begin ctzhisun:=ctzhisun5; ctshoushu:=ctshoushu5; end if ct=6 then begin ctzhisun:=ctzhisun6; ctshoushu:=ctshoushu6; end if ct=7 then begin ctzhisun:=ctzhisun7; ctshoushu:=ctshoushu7; end if ct=8 then begin ctzhisun:=ctzhisun8; ctshoushu:=ctshoushu8; end if ct=9 then begin ctzhisun:=ctzhisun9; ctshoushu:=ctshoushu9; end if ct=10 then begin ctzhisun:=ctzhisun10; ctshoushu:=ctshoushu10; end if fangxiangs=1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种1); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种2); fangxiangs:=-1; end if fangxiangs=-1 then begin TBUYSHORT(1,ctshoushu,MKT ,0,0,账户,套利品种2); TBUY(1,ctshoushu,MKT ,0,0,账户,套利品种1); fangxiangs:=1; end end |
-- 作者:zengxing -- 发布时间:2021/3/20 0:51:09 -- 还是有问题,同时开两组进去了。 应该是一个品种 一多一空 现在是 一个品种开了 两组。
|
-- 作者:zengxing -- 发布时间:2021/3/21 2:05:40 -- 还在吗?周末回复吗? |
-- 作者:FireScript -- 发布时间:2021/3/22 9:25:21 -- 你监控2个品种吧。这种套利只需要监控一个品种即可。因为你下单数据都是调用的。监控一个品种作为驱动即可。 |