后台程序化交易的调用 [金字塔]
-
咨询内容:
后台程序化的函数一般解决算法交易, 就是开空开多等要如何避免滑点, 一般我是在图表程序化设计测试好, 然后加上后台程序化函数来交易。但是我的后台开空开多平空平多的程序都是一样的, 因为每个程序有很多开空开多点, 能把后台程序化写成一个函数, 我要开空的时候直接调用该函数吗? 而且我两个程序调用下面的后台程序化函数返回值会返回自己的数值吗?
我的后台程序化源代码:
持仓限制:=min(持仓手数, max(1,intpart(openint*持仓比例/100))); EMA_VolDay:=STKINDI('','VOL.MA1(5,10,20)',0,6,-1)*成交量比例/1000;//找昨天的成交量5日均线量, 再乘以成交量比例 多头保证金:C*TACCOUNT(41);// 是多头保证金率; 空头保证金:C*TACCOUNT(42);// 是空头保证金率; 多头开仓资金数:intpart(1000000/(C*TACCOUNT(41)*multiplier)*资金占比/100);//是资金占比, 例如10, 就是占用资金100W占比10%, 动用了保证金10W 多头开仓数:MIN(min(多头开仓资金数,min(EMA_VolDay, 持仓限制)),限仓*0.1); 空头开仓资金数:intpart(1000000/(C*TACCOUNT(42)*multiplier)*资金占比/100); 空头开仓数:MIN(min(空头开仓资金数,min(EMA_VolDay, 持仓限制)),限仓*0.1); //如果要开空, 就执行下面开空语句 //注意holding是策略的理论持仓,他不管实际仓位例如我想开单是10的, 那就用10, 100万的, 就用100. 最高就是100W。 //持仓比例和成交量的比例, 所以这两者一般不会去动, 除非是一些非主力合约
///1.如果之前的开空持仓剩余数并且比现在空头开仓数还要多, 那就用之前的开空持仓剩余数,不需要开空。 IF TSELLHOLDINGEX('','',1)>=空头开仓数 THEN 空头开仓数:=TSELLHOLDINGEX('','',1);
//2.如果有平空挂单,之前的开空持仓剩余数比现在空头开仓数少, 总空头持仓比现在开仓数要多,那就用把要撤的单取消掉。 IF TSELLHOLDINGEX('','',2)>=空头开仓数 AND TSELLHOLDINGEX('','',1)<空头开仓数 THEN BEGIN TCANCEL(TSELLHOLDINGEX('','',3)>0,4); 空头开仓数:=TSELLHOLDINGEX('','',2); END //3.总空头持仓比现在开仓数要少 IF TSELLHOLDINGEX('','',2)<=空头开仓数 THEN BEGIN
TCANCEL(TSELLHOLDINGEX('','',3)>0,4); 空头开仓数:=INTPART(空头开仓数-TSELLHOLDINGEX('','',1)); //3.1 达到开空条件, 先检测程序化是否平衡先, 如果是平衡状态, 开始空 IF(INTPART(空头开仓数)<1 ,1,INTPART(空头开仓数));//空头开仓数不能为0 //a.看成交量 //b.看卖一和买一的中间加个 DYNAINFO(34)卖一价;DYNAINFO(28)买一价; DYNAINFO(208)最小变动单位; //成交量比例是自己设置的, 取5日的平均数。 千分之5那么多, 建议分两次下而且用加仓的方式来操作。
//a1 IF 空头开仓数>=80 or 成交量比例>=4 THEN BEGIN //a1b1 IF DYNAINFO(34)-DYNAINFO(28)>3*DYNAINFO(208) THEN BEGIN TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(34)+DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(34)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(34)-DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(34)-2*DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(34)-3*DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(28)+3*DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(28)+2*DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/8,LMT,DYNAINFO(28)+DYNAINFO(208)),NOATTACK; END //a1b2 IF DYNAINFO(34)-DYNAINFO(28)>DYNAINFO(208) AND DYNAINFO(34)-DYNAINFO(28)<=3*DYNAINFO(208) THEN BEGIN TBUYSHORT(1,空头开仓数/4,LMT,DYNAINFO(34)+DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/4,LMT,DYNAINFO(34)),NOATTACK; TBUYSHORT(1,空头开仓数/4,LMT,DYNAINFO(34)-DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/4,LMT,DYNAINFO(28)+DYNAINFO(208)),NOATTACK; END //a1b3 IF DYNAINFO(34)-DYNAINFO(28)=DYNAINFO(208) THEN BEGIN IF DYNAINFO(25)>DYNAINFO(31) THEN BEGIN //DYNAINFO(31) 是卖一量, DYNAINFO(25) 是买一量,DYNAINFO(34)卖一价;DYNAINFO(28)买一价; TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(34)+DYNAINFO(208)),NOATTACK; TBUYSHORT(1,2*空头开仓数/3,LMT,DYNAINFO(34)),NOATTACK; END IF DYNAINFO(25)<DYNAINFO(31) THEN BEGIN TBUYSHORT(1,空头开仓数/2,LMT,DYNAINFO(34)),NOATTACK; TBUYSHORT(1,空头开仓数/2,LMT,DYNAINFO(28)),NOATTACK; END END END //a2 IF 空头开仓数<80 AND 空头开仓数>=12 AND 成交量比例<4 OR 成交量比例>=2 AND 成交量比例<4 THEN BEGIN //a2b1 IF DYNAINFO(34)-DYNAINFO(28)>3*DYNAINFO(208) THEN BEGIN TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(28)+3*DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(28)+2*DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(28)+DYNAINFO(208)),NOATTACK; END //a2b2 IF DYNAINFO(34)-DYNAINFO(28)>DYNAINFO(208) AND DYNAINFO(34)-DYNAINFO(28)<=3*DYNAINFO(208) THEN BEGIN TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(34)),NOATTACK; TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(34)-DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(28)+DYNAINFO(208)),NOATTACK; END //a2b3 IF DYNAINFO(34)-DYNAINFO(28)=DYNAINFO(208)THEN BEGIN//DYNAINFO(31) 是卖一量, DYNAINFO(25) 是买一量,DYNAINFO(34)卖一价;DYNAINFO(28)买一价; DYNAINFO(208)最小变动单位; IF DYNAINFO(25)>DYNAINFO(31) THEN BEGIN TBUYSHORT(1,空头开仓数*2/3,LMT,DYNAINFO(34)),NOATTACK; TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(28)),NOATTACK; END IF DYNAINFO(25)<DYNAINFO(31) THEN BEGIN TBUYSHORT(1,空头开仓数/3,LMT,DYNAINFO(34)),NOATTACK; TBUYSHORT(1,空头开仓数*2/3,LMT,DYNAINFO(28)),NOATTACK; END // IF DYNAINFO(25)>DYNAINFO(31) THEN TBUYSHORT(1,空头开仓数,LMT,DYNAINFO(34)),NOATTACK; // IF DYNAINFO(25)<DYNAINFO(31) THEN TBUYSHORT(1,空头开仓数,LMT,DYNAINFO(28)),NOATTACK; END END //a3 IF 空头开仓数<12 AND 空头开仓数>3 AND 成交量比例<=2 THEN //注意holding是策略的理论持仓,他不管实际仓位 BEGIN //a3b1 IF DYNAINFO(34)-DYNAINFO(28)>=2*DYNAINFO(208) THEN BEGIN TBUYSHORT(1,空头开仓数/2,LMT,DYNAINFO(34)-DYNAINFO(208)),NOATTACK; TBUYSHORT(1,空头开仓数/2,LMT,DYNAINFO(28)+DYNAINFO(208)),NOATTACK; END //a3b2 IF DYNAINFO(34)-DYNAINFO(28)=DYNAINFO(208) THEN BEGIN //DYNAINFO(31) 是卖一量, DYNAINFO(25) 是买一量,DYNAINFO(34)卖一价;DYNAINFO(28)买一价; IF DYNAINFO(25)>DYNAINFO(31) THEN TBUYSHORT(1,空头开仓数,LMT,DYNAINFO(34)),NOATTACK; IF DYNAINFO(25)<DYNAINFO(31) THEN TBUYSHORT(1,空头开仓数,LMT,DYNAINFO(28)),NOATTACK; END END //a4 IF 空头开仓数<=3 AND 成交量比例<=1 THEN BEGIN //DYNAINFO(31) 是卖一量, DYNAINFO(25) 是买一量,DYNAINFO(34)卖一价;DYNAINFO(28)买一价; //IF DYNAINFO(25)>DYNAINFO(31) THEN TBUYSHORT(1,空头开仓数,LMT,DYNAINFO(34)); //IF DYNAINFO(25)<DYNAINFO(31) THEN TBUYSHORT(1,空头开仓数,LMT,DYNAINFO(28)); //a4b1 IF DYNAINFO(34)-DYNAINFO(28)>=2*DYNAINFO(208) THEN BEGIN IF DYNAINFO(25)>DYNAINFO(31) THEN TBUYSHORT(1,多头开仓数,LMT,DYNAINFO(34)-DYNAINFO(208)); IF DYNAINFO(25)<DYNAINFO(31) THEN TBUYSHORT(1,多头开仓数,LMT,DYNAINFO(28)+DYNAINFO(208)); END //a4b2 IF DYNAINFO(34)-DYNAINFO(28)=DYNAINFO(208) THEN BEGIN IF DYNAINFO(25)>DYNAINFO(31) THEN TBUYSHORT(1,多头开仓数,LMT,DYNAINFO(34)); IF DYNAINFO(25)<DYNAINFO(31) THEN TBUYSHORT(1,多头开仓数,LMT,DYNAINFO(28)); END END END -
金字塔客服:
“能把后台程序化写成一个函数, 我要开空的时候直接调用该函数吗” 这个是不行的。 你只能直接运行这个后台程序。
来源:程序化久久网( WWW.CXH99.COM )
-
用户回复:
也就是如果我在某个程序有8次开空, 那这8次 的开空程序都要加上这段算法交易上去?
- 网友回复: 是的。引用通常是引用纯粹的计算指标或者图表模型会比较稳定。
有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友
可联系技术人员 QQ: 262069696 或微信号:cxh99cxh99 进行 有偿收费 编写!
(注:由于人数限制,QQ或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)
相关文章
-
没有相关内容