投资者咨询:算法模型问题 (文华财经WH8赢智V8.2)
来源:文华财经 日期:2019-3-22 13:18
VAR Modname[2];//
VAR Model[2];//
VAR Count;//
GLOBAL_VAR YINBIDSTATE[2], YINASKSTATE[2]; //
GLOBAL_VAR LASTBIDVOL[2], LASTASKVOL[2]; //
GLOBAL_VAR YINBIDTHSTATE[2], YINASKTHSTATE[2]; //
//临时的合约名变量
VAR TempModeName;
VAR BuyVol,SellVol,BuyTodayVol,SellTodayVol;
VAR BuyOrderID,SellOrderID;
VAR CodeCount;
VOID MAIN()
{
CodeCount = 2;
Modname[0] = "A";
Modname[1] = "B";
Model[0] = Modname[0].F_DealCode();
Model[1] = Modname[1].F_DealCode();
FOR(Count = 0;Count < CodeCount; Count = Count + 1)
{
TempModeName = Model[Count];
IF(LASTBIDVOL[Count] != T_BuyPosition(TempModeName))
{
LASTBIDVOL[Count] = T_BuyPosition(TempModeName);
YINBIDSTATE[Count] = 0;
YINBIDTHSTATE[Count] = 0;
}
IF(LASTASKVOL[Count] != T_SellPosition(TempModeName))
{
LASTASKVOL[Count] = T_SellPosition(TempModeName);
YINASKSTATE[Count] = 0;
YINASKTHSTATE[Count] = 0;
}
CodePing(TempModeName, Count);
CodePing2(TempModeName, Count);
//MessageOut("Count + " + Count + "TempModeName + " + TempModeName);
}
}
VOID CodePing(VAR CodeName, VAR Count)
{
//判断是否为上海合约,上海合约先判断今仓,再做老仓处理
IF(T_IsSHCode(CodeName))
{
BuyVol = T_SHBuyPosition(CodeName,0);
SellVol = T_SHSellPosition(CodeName,0);
IF(T_BuyProfitLoss(CodeName) <= -300)
{
IF(BuyVol > 0)
{
BuyOrderID = T_Deal1(CodeName,1,2,BuyVol,LIMIT_ORDER);
}
BuyVol = T_SHBuyPosition(CodeName,1);
IF(BuyVol > 0)
{
BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
}
}
IF(T_SellProfitLoss(CodeName) <= -300)
{
IF(SellVol > 0)
{
SellOrderID = T_Deal1(CodeName,0,2,SellVol,LIMIT_ORDER);
}
SellVol = T_SHSellPosition(CodeName,1);
IF(SellVol > 0)
{
SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
}
}
}
ELSE
{
BuyVol = T_BuyPosition(CodeName);
SellVol = T_SellPosition(CodeName);
IF(BuyVol != 0)
{
IF(T_BuyProfitLoss(CodeName) <= -300)
{
YINBIDTHSTATE[Count] = 0;
BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
}
}
IF(SellVol != 0)
{
IF(T_SellProfitLoss(CodeName) <= -300)
{
YINASKTHSTATE[Count] = 1;
SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
}
}
}
}
VAR tempState;
VOID CodePing2(VAR CodeName, VAR Count)
{
IF(T_BuyRemainPosition(CodeName) > 0)
{
IF( (T_BuyProfitLoss(CodeName) >= 300 || Price(CodeName,"New")/T_BuyOpiAvgPrice(CodeName) >=1.005) && YINBIDSTATE[Count] == 0)
{
YINBIDTHSTATE[Count] = 1;
}
}
IF(T_SellRemainPosition(CodeName) > 0)
{
IF( (T_SellProfitLoss(CodeName) >= 300 || Price(CodeName,"New")/T_SellOpiAvgPrice(CodeName) >=0.995) && YINASKSTATE[Count] == 0)
{
YINASKTHSTATE[Count] = 1;
}
}
// 多头止盈全平
IF(YINBIDSTATE[Count] > 0 || YINBIDTHSTATE[Count] == 1)
{
IF(Price(CodeName,"New") <= T_BuyAvgPrice(CodeName) + MinPrice(CodeName))
{
YINBIDTHSTATE[Count] = 0;
IF(T_IsSHCode(CodeName))
{
BuyVol = T_SHBuyPosition(CodeName,0);
IF(BuyVol > 0)
{
BuyOrderID = T_Deal1(CodeName,1,2,BuyVol,LIMIT_ORDER);
}
BuyVol = T_SHBuyPosition(CodeName,1);
IF(BuyVol > 0)
{
BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
}
}
ELSE
{
BuyVol = T_BuyPosition(CodeName);
IF(BuyVol > 0)
{
BuyOrderID = T_Deal1(CodeName,1,1,BuyVol,LIMIT_ORDER);
}
}
}
} // 空头止盈全平
IF(YINASKSTATE[Count] > 0 || YINASKTHSTATE[Count] == 1)
{
IF(Price("CodeName","New") >= T_SellAvgPrice(CodeName) - MinPrice(CodeName))
{
YINASKTHSTATE[Count] = 0;
IF(T_IsSHCode(CodeName))
{
SellVol = T_SHSellPosition(CodeName,0);
IF(SellVol > 0)
{
SellOrderID = T_Deal1(CodeName,0,2,SellVol,LIMIT_ORDER);
}
SellVol = T_SHSellPosition(CodeName,1);
IF(SellVol > 0)
{
SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
}
}
ELSE
{
SellVol = T_SellPosition(CodeName);
IF(SellVol > 0)
{
SellOrderID = T_Deal1(CodeName,0,1,SellVol,LIMIT_ORDER);
}
}
}
}
}
假设:我要实现AB模组的合约在持仓中有1和2就平仓,也希望手动开仓AB模组合约页可以实现!貌似这里的取得合约最新有问题啊!
技术人员回复
日期:2019-3-22 17:03
我们和相关同事核实一下,后续可能需要和您核实几个问题
预计下周一工作时间回复
技术人员回复
日期:2019-3-25 14:03
您的算法模型开始处理,核实一下:
是判断交易账户中模组A、B交易的合约的盈亏进行平仓?
例如模组A的合约为沪铜1905,则交易账户中沪铜1905的持仓(包括模组开仓和手动开仓)亏损300,则平仓?