
等级: 新手上路
- 注册:
- 2023-6-25
- 曾用名:
|
/*
----------------------------
【模型】
JWJ_Q22081202_LENGGY_WHQ001139
----------------------------
【创建】
WENHUA_JINWJ_20220812
----------------------------
【修改】
WENHUA_JINWJ_20230519
----------------------------
【策略】
死多空头价差策略。
----------------------------
*/
Vars
//------------------------趋势变量------------------------//
NumericSeries MA2; //2周期均线
NumericSeries MA7; //7周期均线
Numeric BKCOND; //多头开仓条件
Numeric SKCOND; //空头开仓条件
//------------------------算法变量------------------------//
Numeric X; //循环变量
Numeric N; //下单手数
Numeric W; //超价倍数
Numeric BSP; //基准价格
Numeric DP; //间隔倍数
Numeric KDN; //网格数量
Numeric ZYP; //止盈倍数
Numeric ZSP; //止损倍数
Numeric CDN; //撤单间隔档位
Numeric QT; //清仓时间间隔
Numeric SH; //上海合约参数
Numeric SVT; //服务器时间
Numeric CLT; //收盘时间
Numeric OPP; //开盘价
Numeric NEWP; //最新价
Numeric RLP,FLP; //涨跌停价
Numeric MINP; //最小变动价位
Numeric BRP0,BRP; //空头可用持仓
Numeric SRP0,SRP; //空头可用持仓
Numeric QCT; //清仓处理时间
Numeric OPFLG; //模型处理标志
NumericArray SKDP; //卖开网格价格
NumericArray BKDP; //买开网格价格
NumericArray BPVLM; //买平手数
NumericArray SPVLM; //卖平手数
NumericArray BKDFLG; //买开处理标志
NumericArray SKDFLG; //卖开处理标志
NumericArray BPDFLG; //买平处理标志
NumericArray SPDFLG; //卖平处理标志
Global_Numeric QCFLG; //清仓处理标志
Global_Numeric ODFLG; //委托挂单标志
Global_Numeric VLFLG; //变量赋值标志
Global_NumericArray BKID,SKID; //开仓委托
Global_NumericArray BPID,SPID; //平仓委托
Global_NumericArray BKFLG,SKFLG; //开仓标志
Global_NumericArray BPFLG,SPFLG; //平仓标志
Global_NumericArray BKDEL,SKDEL; //开仓撤单标志
Global_NumericArray BPDEL,SPDEL; //平仓撤单标志
Global_NumericArray BPSH,SPSH; //平仓委托参数
Global_NumericArray BKM,SKM; //开仓委托手数
Global_NumericArray BPM,SPM; //平仓委托手数
Global_NumericArray BKP,SKP; //开仓委托价格
Global_NumericArray BPP,SPP; //平仓委托价格
Global_NumericArray BKCM,SKCM; //开仓成交手数
Begin
//------------------------趋势部分------------------------//
If(1) //趋势部分
{
MA2 = Ma(Close,2); //2周期均线
MA7 = Ma(Close,7); //7周期均线
BKCOND = IIF(MA2 > MA7,1,0);
SKCOND = IIF(MA2 < MA7,1,0);
PlotLine("A",MA2);
PlotLine("B",MA7);
PlotLine("BKCOND",BKCOND,White,NoDraw);
PlotLine("SKCOND",SKCOND,White,NoDraw);
}
//------------------------处理开启------------------------//
If(1) //处理开启
{
If(A_IsExchangeOpen() == 1) //如果是开盘状态
{
If(RunStart() == 1) //如果已初始化成功
{
OPFLG = 1; //开启模型处理
}
}
}
//------------------------变量赋值------------------------//
If(OPFLG == 1) //变量赋值
{
N = 1; //下单手数
W = 2; //超价倍数
DP = 1; //间隔倍数
KDN = 1000; //单边网格数量
ZYP =1; //止盈倍数
ZSP = 1000; //止损倍数
CDN = 20; //撤单间隔档位
QT = 1 * 60; //清仓处理时间
BSP = 1410; //基准价格
CLT = StringToTime("16:00:00"); //收盘时间
SVT = ServerTime(); //服务器时间
OPP = Price("Open"); //基准价格
NEWP = Price("New"); //最新价
RLP = Price("RiseLimit"); //涨停价
FLP = Price("FallLimit"); //跌停价
MINP = Price("MinPrice"); //最小变动价位
SH = A_IsSHCode(); //上海合约参数
BRP = A_BuyRemainPosition(); //空头可用持仓
SRP = A_SellRemainPosition(); //空头可用持仓
If(SH == 1) //如果是上期所合约
{
BRP0 = A_TodayBuyRemainPosition(); //空头今仓可用持仓
SRP0 = A_TodaySellRemainPosition(); //空头今仓可用持仓
}
For X = 0 To KDN * 2 - 1 //遍历空头网格
{
BKDP[X] = BSP + KDN * DP * MINP - (X + 1) * DP * MINP; //多头网格价格
SKDP[X] = BSP - KDN * DP * MINP + (X + 1) * DP * MINP; //空头网格价格
}
If(VLFLG == 0) //如果变量未赋值
{
Commentary("【基准价:" + Text(BSP) + "】");
For X = 0 To KDN * 2 - 1 //遍历空头网格
{
Commentary("【买开网格档位" + Text(X + 1) + ":" + Text(BKDP[X]) + "】");
Commentary("【卖开网格档位" + Text(X + 1) + ":" + Text(SKDP[X]) + "】");
}
VLFLG = 1; //变量已赋值
}
QCT = TimeDiff(SVT,CLT) <= QT && SVT <= CLT; //清仓处理时间
OPFLG = IIF(BSP > 0,1,0); //模型处理标志
}
//------------------------成交判断------------------------//
If(OPFLG == 1) //成交判断
{
For X = 0 To KDN * 2 - 1 //遍历多空头网格
{
If(BKFLG[X] == 1) //如果有买开委托
{
If(F_OrderStatus(BKID[X]) == Enum_Filled && BRP > 0) //如果买开委托成交
{
Commentary("【多头开仓:买开委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
BKCM[X] = F_OrderFilledLot(BKID[X]); //买开成交手数
SPVLM[X] = BKCM[X]; //卖平手数
SPDFLG[X] = IIF(BKDEL[X] == 0 || BKDEL[X] == 1,BKDEL[X] + 1,0); //开启多头止盈卖平处理
BKFLG[X] = 2; //买开委托已成交
BKDEL[X] = 0; //买开撤单标志归0
}
Else If(F_OrderStatus(BKID[X]) == Enum_Canceled) //如果买开委托已撤
{
If(BKDEL[X] == 1) //如果是多头撤单
{
Commentary("【多头开仓:买开委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
}
Else If(BKDEL[X] == 2 || BKDEL[X] == 3 || BKDEL[X] == 4) //如果是多头清仓撤单
{
Commentary("【多头清仓:买开委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
}
BKCM[X] = F_OrderFilledLot(BKID[X]); //买开成交手数
BKFLG[X] = IIF(BKCM[X] > 0,2,0); //买开标志
BKDEL[X] = 0; //买开撤单标志归0
}
Else If(F_OrderStatus(BKID[X]) == Enum_Declared || F_OrderStatus(BKID[X]) == Enum_FillPart) //如果买开委托部分成交
{
If(BKDEL[X] == 3) //如果是清仓撤单
{
Commentary("【多头清仓:买开委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(BKID[X])); //撤掉买开委托挂单
BKDEL[X] = 4; //清仓处理撤掉买开委托挂单
}
}
}
If(SPFLG[X] > 0) //如果有卖平委托
{
If(F_OrderStatus(SPID[X]) == Enum_Filled) //如果卖平委托成交
{
If(SPFLG[X] == 1) //如果是多头止盈卖平委托
{
Commentary("【多头止盈:卖平委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
}
Else If(SPFLG[X] == 2) //如果是多头止损卖平委托
{
Commentary("【多头止损:卖平委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
}
Else If(SPFLG[X] == 3) //如果是多头清仓卖平委托
{
Commentary("【多头清仓:卖平委托" + Text(X + 1) + "成交!档位价格=" + Text(BKDP[X]) + "】");
}
BKCM[X] = 0; //买开成交手数归0
BKFLG[X] = 0; //买开标志归0
SPFLG[X] = 0; //卖平标志归0
SPDEL[X] = 0; //卖平撤单标志归0
}
Else If(F_OrderStatus(SPID[X]) == Enum_Canceled) //如果卖平委托已撤
{
If(SPDEL[X] == 1) //如果是多头止损撤单
{
Commentary("【多头止损:卖平委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
}
Else If(SPDEL[X] == 2 || SPDEL[X] == 3 || SPDEL[X] == 4) //如果是多头清仓撤单
{
Commentary("【多头清仓:卖平委托" + Text(X + 1) + "已撤!档位价格=" + Text(BKDP[X]) + "】");
}
BKCM[X] = BKCM[X] - F_OrderFilledLot(SPID[X]); //买开成交手数
BKFLG[X] = IIF(BKCM[X] == 0,0,2); //买开标志
SPFLG[X] = 0; //卖平标志归0
SPDEL[X] = 0; //卖平撤单标志归0
}
Else If(F_OrderStatus(SPID[X]) == Enum_Declared || F_OrderStatus(SPID[X]) == Enum_FillPart) //如果卖平委托部分成交
{
If(SPDEL[X] == 3) //如果是清仓撤单
{
Commentary("【多头清仓:卖平委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(SPID[X])); //撤掉卖平委托挂单
SPDEL[X] = 4; //多头清仓撤掉卖平委托挂单
}
}
}
If(SKFLG[X] == 1) //如果有卖开委托
{
If(F_OrderStatus(SKID[X]) == Enum_Filled && SRP > 0) //如果卖开委托成交
{
Commentary("【空头开仓:卖开委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
SKCM[X] = F_OrderFilledLot(SKID[X]); //卖开成交手数
BPVLM[X] = SKCM[X]; //买平手数
BPDFLG[X] = IIF(SKDEL[X] == 0 || SKDEL[X] == 1,SKDEL[X] + 1,0); //开启空头止盈买平处理
SKFLG[X] = 2; //卖开委托已成交
SKDEL[X] = 0; //卖开撤单标志归0
}
Else If(F_OrderStatus(SKID[X]) == Enum_Canceled) //如果卖开委托已撤
{
If(SKDEL[X] == 1) //如果是空头撤单
{
Commentary("【空头开仓:卖开委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
}
Else If(SKDEL[X] == 2 || SKDEL[X] == 3 || SKDEL[X] == 4) //如果是空头清仓撤单
{
Commentary("【空头清仓:卖开委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
}
SKCM[X] = F_OrderFilledLot(SKID[X]); //卖开成交手数
SKFLG[X] = IIF(SKCM[X] > 0,2,0); //卖开标志
SKDEL[X] = 0; //卖开撤单标志归0
}
Else If(F_OrderStatus(SKID[X]) == Enum_Declared || F_OrderStatus(SKID[X]) == Enum_FillPart) //如果卖开委托部分成交
{
If(SKDEL[X] == 3) //如果是清仓撤单
{
Commentary("【空头清仓:卖开委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(SKID[X])); //撤掉卖开委托挂单
SKDEL[X] = 4; //清仓处理撤掉卖开委托挂单
}
}
}
If(BPFLG[X] > 0) //如果有买平委托
{
If(F_OrderStatus(BPID[X]) == Enum_Filled) //如果买平委托成交
{
If(BPFLG[X] == 1) //如果是空头止盈买平委托
{
Commentary("【空头止盈:买平委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
}
Else If(BPFLG[X] == 2) //如果是空头止损买平委托
{
Commentary("【空头止损:买平委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
}
Else If(BPFLG[X] == 3) //如果是空头清仓买平委托
{
Commentary("【空头清仓:买平委托" + Text(X + 1) + "成交!档位价格=" + Text(SKDP[X]) + "】");
}
SKCM[X] = 0; //卖开成交手数归0
SKFLG[X] = 0; //卖开标志归0
BPFLG[X] = 0; //买平标志归0
BPDEL[X] = 0; //买平撤单标志归0
}
Else If(F_OrderStatus(BPID[X]) == Enum_Canceled) //如果买平委托已撤
{
If(BPDEL[X] == 1) //如果是空头止损撤单
{
Commentary("【空头止损:买平委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
}
Else If(BPDEL[X] == 2 || BPDEL[X] == 3 || BPDEL[X] == 4) //如果是空头清仓撤单
{
Commentary("【空头清仓:买平委托" + Text(X + 1) + "已撤!档位价格=" + Text(SKDP[X]) + "】");
}
SKCM[X] = SKCM[X] - F_OrderFilledLot(BPID[X]); //卖开成交手数
SKFLG[X] = IIF(SKCM[X] == 0,0,2); //卖开标志
BPFLG[X] = 0; //买平标志归0
BPDEL[X] = 0; //买平撤单标志归0
}
Else If(F_OrderStatus(BPID[X]) == Enum_Declared || F_OrderStatus(BPID[X]) == Enum_FillPart) //如果买平委托部分成交
{
If(BPDEL[X] == 3) //如果是清仓撤单
{
Commentary("【空头清仓:买平委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(BPID[X])); //撤掉买平委托挂单
BPDEL[X] = 4; //空头清仓撤掉买平委托挂单
}
}
}
}
ODFLG = 1; //委托挂单标志初始化
For X = 0 To KDN * 2 - 1 //遍历多空头网格
{
If(SKFLG[X] == 1 || BPFLG[X] > 0 || BKFLG[X] == 1 || SPFLG[X] > 0) //如果有开平仓委托
{
ODFLG = 2; //有委托挂单
}
}
}
//------------------------清仓处理------------------------//
If(OPFLG == 1) //清仓处理
{
If(QCFLG == 0) //如果未执行清仓处理
{
If(QCT == 1) //如果是清仓处理时间
{
Commentary("【多空清仓:清仓处理开始!】");
For X = 0 To KDN * 2 - 1 //遍历空头网格
{
If(BKFLG[X] == 1) //如果有买开委托
{
If(BKDEL[X] == 0) //如果未撤单
{
If(F_OrderStatus(BKID[X]) == Enum_Declared || F_OrderStatus(BKID[X]) == Enum_FillPart) //如果买开委托挂单
{
Commentary("【多头清仓:买开委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(BKID[X])); //撤掉买开委托挂单
BKDEL[X] = 2; //多头清仓撤掉买开委托挂单
}
Else //如果买开委托未挂单
{
BKDEL[X] = 3; //多头清仓撤掉买开委托挂单
}
}
Else //如果买开委托已撤单
{
BKDEL[X] = 4; //多头清仓撤掉买开委托挂单
}
}
If(SPFLG[X] > 0) //如果有卖平委托
{
If(SPDEL[X] == 0) //如果未撤单
{
If(F_OrderStatus(SPID[X]) == Enum_Declared || F_OrderStatus(SPID[X]) == Enum_FillPart) //如果卖平委托挂单
{
Commentary("【多头清仓:卖平委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(SPID[X])); //撤掉卖平委托挂单
SPDEL[X] = 2; //多头清仓撤掉卖平委托挂单
}
Else //如果卖平委托未挂单
{
SPDEL[X] = 3; //多头清仓撤掉卖平委托挂单
}
}
Else //如果卖平委托已撤单
{
SPDEL[X] = 4; //多头清仓撤掉卖平委托挂单
}
}
If(SKFLG[X] == 1) //如果有卖开委托
{
If(SKDEL[X] == 0) //如果未撤单
{
If(F_OrderStatus(SKID[X]) == Enum_Declared || F_OrderStatus(SKID[X]) == Enum_FillPart) //如果卖开委托挂单
{
Commentary("【空头清仓:卖开委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(SKID[X])); //撤掉卖开委托挂单
SKDEL[X] = 2; //空头清仓撤掉卖开委托挂单
}
Else //如果卖开委托未挂单
{
SKDEL[X] = 3; //空头清仓撤掉卖开委托挂单
}
}
Else //如果卖开委托已撤单
{
SKDEL[X] = 4; //空头清仓撤掉卖开委托挂单
}
}
If(BPFLG[X] > 0) //如果有买平委托
{
If(BPDEL[X] == 0) //如果未撤单
{
If(F_OrderStatus(BPID[X]) == Enum_Declared || F_OrderStatus(BPID[X]) == Enum_FillPart) //如果买平委托挂单
{
Commentary("【空头清仓:买平委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(BPID[X])); //撤掉买平委托挂单
BPDEL[X] = 2; //空头清仓撤掉买平委托挂单
}
Else //如果买平委托未挂单
{
BPDEL[X] = 3; //空头清仓撤掉买平委托挂单
}
}
Else //如果买平委托已撤单
{
BPDEL[X] = 4; //空头清仓撤掉买平委托挂单
}
}
}
QCFLG = 1; //已发出清仓撤单
}
}
Else If(QCFLG == 1) //如果已发出清仓撤单
{
If(ODFLG == 1) //如果没有开平仓委托
{
For X = 0 To KDN * 2 - 1 //遍历空头网格
{
If(BKFLG[X] == 2) //如果有买开委托
{
SPVLM[X] = BKCM[X]; //卖平手数
SPDFLG[X] = 3; //开启多头清仓卖平处理
}
If(SKFLG[X] == 2) //如果有卖开委托
{
BPVLM[X] = SKCM[X]; //买平手数
BPDFLG[X] = 3; //开启空头清仓买平处理
}
}
QCFLG = 2; //已发出清仓平仓
}
}
Else If(QCFLG == 2) //如果已发出清仓平仓
{
If(ODFLG == 1) //如果没有开平仓委托
{
Commentary("【多空清仓:清仓处理完成!】");
QCFLG = 3; //已完成清仓处理
}
}
Else If(QCFLG == 3) //如果已完成清仓处理
{
If(QCT == 0) //如果非清仓处理时间
{
QCFLG = 0; //清仓处理标志归0
}
}
}
//------------------------多头处理------------------------//
If(OPFLG == 1 && QCFLG == 0) //多头处理
{
For X = 0 To KDN * 2 - 1 //遍历多头网格
{
If(BKFLG[X] == 0) //如果没有买开委托
{
If(NEWP <= BKDP[X] && NEWP > BKDP[X] - DP * MINP) //如果最新价达到档位区间
{
If(BKCOND == 1) //如果满足多头开仓条件
{
BKDFLG[X] = 1; //开启买开处理
}
}
}
Else If(BKFLG[X] == 1) //如果已发出买开委托
{
If(NEWP >= BKDP[X] + CDN * DP * MINP) //如果和最新价间隔CDN个档位
{
If(BKDEL[X] == 0) //如果未撤单
{
Commentary("【多头开仓:买开委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(BKID[X])); //撤掉买开委托挂单
BKDEL[X] = 1; //已撤掉买开委托挂单
}
}
}
Else If(BKFLG[X] == 2) //如果买开委托已成交
{
If(NEWP <= BKDP[X] - ZSP * MINP) //如果最新价达到止损点位
{
If(SPFLG[X] == 1) //如果已发出止盈卖平委托
{
If(SPDEL[X] == 0) //如果未撤单
{
If(F_OrderStatus(SPID[X]) == Enum_Declared || F_OrderStatus(SPID[X]) == Enum_FillPart) //如果卖平委托挂单
{
Commentary("【多头止损:卖平委托" + Text(X + 1) + "撤单!档位价格=" + Text(BKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(SPID[X])); //撤掉卖平委托挂单
SPDEL[X] = 1; //清仓处理撤掉卖平委托挂单
}
}
}
Else If(SPFLG[X] == 0 && SPDFLG[X] == 0) //如果没有卖平委托
{
SPVLM[X] = BKCM[X]; //卖平手数
SPDFLG[X] = 2; //开启多头止损卖平处理
}
}
Else //如果最新价未达到止损点位
{
If(SPFLG[X] == 0 && SPDFLG[X] == 0) //如果没有卖平委托
{
SPVLM[X] = BKCM[X]; //卖平手数
SPDFLG[X] = 1; //开启多头止损卖平处理
}
}
}
}
}
//------------------------空头处理------------------------//
If(OPFLG == 1 && QCFLG == 0) //空头处理
{
For X = 0 To KDN * 2 - 1 //遍历空头网格
{
If(SKFLG[X] == 0) //如果没有卖开委托
{
If(NEWP >= SKDP[X] && NEWP < SKDP[X] + DP * MINP) //如果最新价达到档位区间
{
If(SKCOND == 1) //如果满足空头开仓条件
{
SKDFLG[X] = 1; //开启卖开处理
}
}
}
Else If(SKFLG[X] == 1) //如果已发出卖开委托
{
If(NEWP <= SKDP[X] - CDN * DP * MINP) //如果和最新价间隔CDN个档位
{
If(SKDEL[X] == 0) //如果未撤单
{
Commentary("【空头开仓:卖开委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(SKID[X])); //撤掉卖开委托挂单
SKDEL[X] = 1; //已撤掉卖开委托挂单
}
}
}
Else If(SKFLG[X] == 2) //如果卖开委托已成交
{
If(NEWP >= SKDP[X] + ZSP * MINP) //如果最新价达到止损点位
{
If(BPFLG[X] == 1) //如果已发出止盈买平委托
{
If(BPDEL[X] == 0) //如果未撤单
{
If(F_OrderStatus(BPID[X]) == Enum_Declared || F_OrderStatus(BPID[X]) == Enum_FillPart) //如果买平委托挂单
{
Commentary("【空头止损:买平委托" + Text(X + 1) + "撤单!档位价格=" + Text(SKDP[X]) + "】");
F_DeleteOrder(F_OrderContractNo(BPID[X])); //撤掉买平委托挂单
BPDEL[X] = 1; //清仓处理撤掉买平委托挂单
}
}
}
Else If(BPFLG[X] == 0 && BPDFLG[X] == 0) //如果没有买平委托
{
BPVLM[X] = SKCM[X]; //买平手数
BPDFLG[X] = 2; //开启空头止损买平处理
}
}
Else //如果最新价未达到止损点位
{
If(BPFLG[X] == 0 && BPDFLG[X] == 0) //如果没有买平委托
{
BPVLM[X] = SKCM[X]; //买平手数
BPDFLG[X] = 1; //开启空头止盈买平处理
}
}
}
}
}
//------------------------委托处理------------------------//
If(OPFLG == 1) //委托处理
{
For X = 0 To KDN * 2 - 1 //遍历空头网格
{
If(BKDFLG[X] == 1) //如果已开启买开处理
{
If(BKFLG[X] == 0) //如果没有买开委托
{
BKM[X] = N; //买开委托手数
BKP[X] = BKDP[X]; //买开委托价格
Commentary("【多头开仓:买开委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
BKID[X] = A_SendOrder(Enum_Buy,Enum_Entry,BKM[X],BKP[X]); //发出买开委托
BKFLG[X] = 1; //已发出买开委托
}
}
If(SPDFLG[X] > 0) //如果已开启卖平处理
{
If(SPFLG[X] == 0) //如果没有卖平委托
{
If(BRP >= SPVLM[X] && SPVLM[X] > 0) //如果多头可用持仓达到N手
{
SPSH[X] = Enum_Exit; //卖平委托参数
If(BRP0 >= SPVLM[X]) //如果多头今仓可用持仓达到N手
{
SPSH[X] = Enum_ExitToday; //卖平委托参数
}
SPM[X] = SPVLM[X]; //卖平委托手数
If(SPDFLG[X] == 1) //如果是多头止盈
{
SPP[X] = BKDP[X] + ZYP * MINP; //卖平委托价格
Commentary("【多头止盈:卖平委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
}
Else If(SPDFLG[X] == 2) //如果是多头止损
{
SPP[X] = BKDP[X] - ZSP * MINP; //卖平委托价格
Commentary("【多头止损:卖平委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
}
Else If(SPDFLG[X] == 3) //如果是多头清仓
{
SPP[X] = NEWP - W * MINP; //卖平委托价格
Commentary("【多头清仓:卖平委托" + Text(X + 1) + "发出!档位价格=" + Text(BKDP[X]) + "】");
}
SPID[X] = A_SendOrder(Enum_Sell,SPSH[X],SPM[X],SPP[X]); //发出卖平委托
SPFLG[X] = SPDFLG[X]; //已发出卖平委托
}
}
}
If(SKDFLG[X] == 1) //如果已开启卖开处理
{
If(SKFLG[X] == 0) //如果没有卖开委托
{
SKM[X] = N; //卖开委托手数
SKP[X] = SKDP[X]; //卖开委托价格
Commentary("【空头开仓:卖开委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
SKID[X] = A_SendOrder(Enum_Sell,Enum_Entry,SKM[X],SKP[X]); //发出卖开委托
SKFLG[X] = 1; //已发出卖开委托
}
}
If(BPDFLG[X] > 0) //如果已开启买平处理
{
If(BPFLG[X] == 0) //如果没有买平委托
{
If(SRP >= BPVLM[X] && BPVLM[X] > 0) //如果空头可用持仓达到N手
{
BPSH[X] = Enum_Exit; //买平委托参数
If(SRP0 >= BPVLM[X]) //如果空头今仓可用持仓达到N手
{
BPSH[X] = Enum_ExitToday; //买平委托参数
}
BPM[X] = BPVLM[X]; //买平委托手数
If(BPDFLG[X] == 1) //如果是空头止盈
{
BPP[X] = SKDP[X] - ZYP * MINP; //买平委托价格
Commentary("【空头止盈:买平委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
}
Else If(BPDFLG[X] == 2) //如果是空头止损
{
BPP[X] = SKDP[X] + ZSP * MINP; //买平委托价格
Commentary("【空头止损:买平委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
}
Else If(BPDFLG[X] == 3) //如果是空头清仓
{
BPP[X] = NEWP + W * MINP; //买平委托价格
Commentary("【空头清仓:买平委托" + Text(X + 1) + "发出!档位价格=" + Text(SKDP[X]) + "】");
}
BPID[X] = A_SendOrder(Enum_Buy,BPSH[X],BPM[X],BPP[X]); //发出买平委托
BPFLG[X] = BPDFLG[X]; //已发出买平委托
}
}
}
}
}
End
|
|