等级: 专业版
- 注册:
- 2022-1-11
- 曾用名:
|
RT
我的策略是震荡策略,基本在图表内能实现以下描述的策略,现在想变成后台程序化有点不会了,麻烦老师指点修改一下,谢谢!
{基本逻辑类似于网格的减仓策略
1:5根线P2 > P1 > LV > ZC1 > ZC2
2:只有在P1 - ZC1区间内开仓,其他区域不开仓;
3: 当CLOSE运行在P1 —— ZC1的区间内,在P1线下挂空仓2手,在ZC1线上挂多仓2手,用LMT挂直至当日收盘,哪个方向先成交就把剩余未成交的方向给撤单了;
4. 如果成交一部分,剩余追单继续挂单
5. 如果开仓成功了执行以下步骤:
——做多:
(1) 止损2手:在ZC2全部止损,用STP
(2) 止盈1手:达到LV中线时候,止盈1手,用MKT,止盈后同时设置移动止损至ZC1,用STP
(3) 止盈1手: 达到P1时候, 平仓剩余手数;
——做空:
(1) 止损2手:在P2全部止损,用STP
(2) 止盈1手:达到LV中线时候,止盈1手,用MKT,止盈后同时设置移动止损至P1,用STP
(3) 止盈1手: 达到ZC1时候, 平仓剩余手数;
——当天收盘前5分钟全平
6. 另外,需要判断区间,如果close运行到其他某一个区间内,之前在区间ZC1 —— P1 的挂单撤单
}
——————以下是我改写的后台语句,测试发现很多不对,请老师帮忙按照以上逻辑改写一下,谢谢!
RUNMODE: 1;
INPUT:SS(2, 2, 100, 2), N1(3, 2, 13, 1); //N1 = 开仓点位设置
//全局变量
VARIABLE: CCZTLONG = 2; //开仓时候多头 = 2
VARIABLE: CCZTSHORT = -2; //开仓时候空头 = 2
VARIABLE: A = 0; //还是不太会设置追撤单的全局变量
VARIABLE : _DEBUGOUT = 1 ; //是否输出后台交易的调试信息
//控制日内交易次数
IF TTOTALDAYTRADE >= 3 THEN EXIT;
//网格绘制 P2 > P1 > LV > ZC1 > ZC2
P2: 1400; //压力2
P1: 1200; //压力1
LV: 1000, LINEDASHDOT; //中间基准
ZC1: 800; //支撑1
ZC2: 600; //止损支撑2
//中间变量
OPENAFTER:= (TIME > 132000 AND TIME < 181000);
//区间判断
ZC1_P1:= RANGE(CLOSE, ZC1, P1); //收盘在区间ZC1 - P1 的情况下,才挂单,如果运行到其他区域则需要把这个区域的挂单给取消掉
//开仓条件
//区域内操作 持仓状态 = -2
ZC1_P1_KCKK: = TSELLHOLDING(1) = 0 AND ZC1_P1;
//区域内操作 持仓状态 = 2
ZC1_P1_KCKD: = TBUYHOLDING(1) = 0 AND ZC1_P1;
//平仓条件
//平空时所在的区间
P1_LV_PK2: = TAVGENTERPRICEEX2('', '', 1) > LV AND TAVGENTERPRICEEX2('', '', 1) < P1 + N1 * MINDIFF; //卖持平均
//平多时所在的区间
LV_ZC1_PD2: = TAVGENTERPRICEEX2('', '', 0) > ZC1 - N1 * MINDIFF AND TAVGENTERPRICEEX2('', '', 0) < LV; //买持平均
//平仓全部止损条件
PK2ZS_P1_LV:= CLOSE >= P2 + N1 * MINDIFF(); //收盘大于P2 空全部止损
PD2ZS_LV_ZC1:= CLOSE <= ZC2 - N1 * MINDIFF(); //收盘小于ZC2 多全部止损
//止盈目标1 平仓全部1/2手条件 //到达LV 平一半,全局变量由+ - 2 变成+ - 1
PK1_P1_LV:= CLOSE <= LV + N1 * MINDIFF();
PD1_LV_ZC1:= CLOSE >= LV - N1 * MINDIFF();
//止盈目标1达到后 平仓全部1/2手后剩余止损条件,止盈后止损挪到 P1 和 ZC1, 且全局变量 = +-1 的时候
PK1ZS_P1_LV:= CLOSE >= P1 + N1 * MINDIFF() AND CCZTSHORT = -1;
PD1ZS_LV_ZC1:= CLOSE <= ZC1 - N1 * MINDIFF() AND CCZTLONG = 1;
//止盈目标2 平仓剩余手数条件,
PK2_P1_LV:= CLOSE <= ZC1 + N1 * MINDIFF;
PD2_LV_ZC1:= CLOSE >= P1 - N1 * MINDIFF;
//开仓语句
IF ZC1_P1_KCKK THEN BEGIN
空仓开空_ZC1_P1: TBUYSHORT(1, SS, LMT, P1 - N1 * MINDIFF, 0), NOATTACK; //限价挂单不成交一直挂着直至成交或者收盘
END
IF ZC1_P1_KCKD THEN BEGIN
空仓开多_ZC1_P1: TBUY(1, SS, LMT, ZC1 + N1 * MINDIFF, 0), NOATTACK; //限价挂单不成交一直挂着直至成交或者收盘
END
//平仓语句
IF P1_LV_PK2 AND TSELLHOLDING(1) < 0 THEN BEGIN
平空损2_P1_LV: TSELLSHORT(PK2ZS_P1_LV, TSELLHOLDING(1), STP, P2 + N1 * MINDIFF()); //停损单在P2上下单
平空1_P1_LV: TSELLSHORT(PK1_P1_LV, TSELLHOLDING(1) / 2, MKT, 0); // 达到止盈1市价出局
IF 平空1_P1_LV THEN CCZTSHORT:= CCZTSHORT + 1; //更新全局变量
平空损1_P1_LV: TSELLSHORT(CCZTSHORT = -1 AND PK1ZS_P1_LV, TSELLHOLDING(1), STP, P1 + N1 * MINDIFF()); //止盈1后向前移动止损
平空2_P1_LV: TSELLSHORT(CCZTSHORT = -1 AND PK2_P1_LV, TSELLHOLDING(1), MKT, 0);
IF 平空2_P1_LV OR 平空损1_P1_LV OR 平空损2_P1_LV THEN CCZTSHORT = -2; //恢复全局变量初始化
END
IF LV_ZC1_PD2 AND TBUYHOLDING(1) > 0 THEN BEGIN
平多损2_LV_ZC1: TSELL(PD2ZS_LV_ZC1, TBUYHOLDING(1), STP, ZC2 - N1 * MINDIFF()); //停损单在ZC2上下单
平多1_P1_LV: TSELL(PD1_LV_ZC1, TBUYHOLDING(1) / 2, MKT, 0); // 达到止盈1市价出局
IF 平多1_P1_LV THEN CCZTLONG:= CCZTLONG - 1; //更新全局变量
平多损1_P1_LV: TSELL(CCZTLONG = 1 AND PD1ZS_LV_ZC1, TBUYHOLDING(1), STP, ZC1 - N1 * MINDIFF()); //止盈1后向前移动止损
平多2_P1_LV: TSELL(CCZTLONG = 1 AND PD2_LV_ZC1, TBUYHOLDING(1), MKT, 0);
IF 平多2_P1_LV OR 平多损1_P1_LV OR 平多损2_LV_ZC1 THEN CCZTLONG = 2; //恢复全局变量初始化
END
//监控未成交单 //多空如果哪个方向先成交了就把另一个挂单撤掉,如果有部分成交了,任何未成交的就追单 —— 追撤单这部分也就不太会写了
WCJ:= TREMAINQTY( 0, 0, 0);
IF WCJ<>0 THEN BEGIN
A:= WCJ;
END
//对未成交单撤单,并追单
IF WCJ > 0 THEN BEGIN
TCANCELEX(1,0,0,0 );
TBUY(WCJ=0,A,MKT,0, 0);
TSELL(WCJ=0,A,MKT,0,0,0);
END
//收盘前强平
IF CURRENTTIME>=185000 THEN BEGIN
TSELL(1,0,MKT,0,0,0);
TSELLSHORT(1,0,MKT,0,0,0);
END
|
|