OnSignal(ArrayRef<Signal> sigs)
{
Integer Timeid;
Integer i;
String TradeSymbol;
Tick Tick1;
Array<Integer> OrderId;
Position Position1;
For i = 0 To GetArraySize(sigs) - 1
{
If(TradeFlg[sigs[i].index] == 0)
{
TradeFlg[sigs[i].index] = 1;
If(sigs[i].flag == 0)
{
TradeSymbol = TradeSymbols;
If(!GetTick(TradeSymbol, Tick1))
{
LogFile("获取Tick失败,品种:" + TradeSymbol);
Continue;
}
If(A_GetPosition(TradeSymbol, Position1, "", 0))
{
// ========== 1. 无净持仓时:开多 / 开空 ==========
If(Position1.longCurrentVolume == Position1.shortCurrentVolume)
{
// 多头开仓(正确:Enum_Buy + Enum_Entry)
If(sigs[i].side == Enum_Buy)
{
A_SendOrderEx(TradeSymbol, Enum_Buy, Enum_Entry, Lots, Tick1.bidask1.askP, OrderId, "", A_GetOrderCreateSource(), 0);
Timeid = CreateTimer(5000);
OrderId_timer[Timeid] = OrderId;
LogFile("多头开仓下单:品种=" + TradeSymbol + " 手数=" + Text(Lots) + " 价格=" + Text(Tick1.bidask1.askP));
}
// 空头开仓(修正:用Enum_Sell + Enum_Entry)
If(sigs[i].side == Enum_SellSellShort)
{
A_SendOrderEx(TradeSymbol, Enum_SellSellShort, Enum_Entry, Lots, Tick1.bidask1.bidP, OrderId, "", A_GetOrderCreateSource(), 0);
Timeid = CreateTimer(5000);
OrderId_timer[Timeid] = OrderId;
LogFile("空头开仓下单:品种=" + TradeSymbol + " 手数=" + Text(Lots) + " 价格=" + Text(Tick1.bidask1.bidP));
}
}
// ========== 2. 持有净多头持仓时:平多 ==========
If(Position1.longCurrentVolume > Position1.shortCurrentVolume)
{
// 平多仓(正确:Enum_Sell + Enum_Exit)
If(sigs[i].side == Enum_Sell)
{
A_SendOrderEx(TradeSymbol, Enum_Sell, Enum_Exit, Lots, Tick1.bidask1.bidP, OrderId, "", A_GetOrderCreateSource(), 0);
Timeid = CreateTimer(5000);
OrderId_timer[Timeid] = OrderId;
LogFile("多头平仓下单:品种=" + TradeSymbol + " 手数=" + Text(Lots) + " 价格=" + Text(Tick1.bidask1.bidP));
}
}
// ========== 3. 持有净空头持仓时:平空 ==========
If(Position1.shortCurrentVolume > Position1.longCurrentVolume)
{
// 平空仓(修正:用Enum_Buy + Enum_Exit)
If(sigs[i].side == Enum_BuyToCover)
{
A_SendOrderEx(TradeSymbol, Enum_BuyToCover, Enum_Exit, Lots, Tick1.bidask1.askP, OrderId, "", A_GetOrderCreateSource(), 0);
Timeid = CreateTimer(5000);
OrderId_timer[Timeid] = OrderId;
LogFile("空头平仓下单:品种=" + TradeSymbol + " 手数=" + Text(Lots) + " 价格=" + Text(Tick1.bidask1.askP));
}
}
}
Else
{
LogFile("获取持仓失败,品种:" + TradeSymbol);
}
}
}
}
}
老师好:空头开仓Enum_SellShort变量,平仓Enum_BuyToCover没有声明的原因,用Enum_Sell,和Enum_Buy开空,平空可以吗
谢谢
Enum_Buy
Enum_Sell
Enum_Entry
Enum_Exit