持仓限制:=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