老师好,能否麻烦帮忙看下以下在onsigal 域用A函数开仓、平仓期权的代码准确吗?下单时是用图层取实时价格data5.close 还是用函数Q_AskPrice取价格比较好?谢谢!
OnSignal(ArrayRef<Signal> sigs)
{
If(BarStatus != 2) { Return; }
// 最小变动价位
Numeric MP = MinMove * PriceScale;
String callOptionSymbol;//看涨期权代码
String putOptionSymbol;//看跌期权代码
Numeric callOptionprice;//看涨期权价格
Numeric putOptionprice;//看跌期权价格
//确定期权的合约代码和期权合约的价格
IF(IO_MO)
{
callOptionSymbol= data5.symbol;//data5为看涨期权;
putOptionSymbol=data8.symbol;//data8为看跌期权;
callOptionprice=data5.close+data5.MinMove*data5.PriceScale*3;//data5当前价格+3倍最小变动;
putOptionprice=data8.close+data8.MinMove*data8.PriceScale*3;//data5当前价格+3倍最小变动;
}Else
{
callOptionSymbol= data6.symbol;//data6为看涨期权;
putOptionSymbol=data7.symbol;//data7为看跌期权;
callOptionprice=data6.close+data6.MinMove*data6.PriceScale*3;//data5当前价格+3倍最小变动;
putOptionprice=data7.close+data7.MinMove*data7.PriceScale*3;//data5当前价格+3倍最小变动
}
Print("========================");
// 信号域发单
Print("===" + Text(SystemDateTime) + "===");
Integer i = 0;
For i = 0 To GetArraySize(sigs) - 1
{
SignalRef sig = sigs[i];
If(!BitHas(sig.flag, Enum_Signal_NotSend) && QuoteStatus == Enum_QuoteStatus_RealTime)
{
// 开仓信号处理
If(sig.combOffset == Enum_Entry)
{
// 判断是买入还是卖出信号
If(sig.side == Enum_Buy)
{
// 买入信号 -> 购买看涨期权
If(callOptionSymbol != "")
{
Array<Integer> orders;
Bool orderRet = A_SendOrderEx(callOptionSymbol, Enum_Buy, Enum_Entry, lotsoption,Q_AskPrice, orders, "", A_GetOrderCreateSource);
Print("买入看涨期权: " + callOptionSymbol + ", 结果: " + IIFString(orderRet, "成功", "失败"));
If(orderRet)
{
optionHoldingSymbol = callOptionSymbol;
}
}
}
Else If(sig.side == Enum_Sell)
{
// 卖出信号 -> 购买看跌期权
If(putOptionSymbol != "")
{
Array<Integer> orders;
Bool orderRet = A_SendOrderEx(putOptionSymbol, Enum_Buy, Enum_Entry, lotsoption, Q_AskPrice, orders,"",A_GetOrderCreateSource);
Print("买入看跌期权: " + putOptionSymbol + ", 结果: " + IIFString(orderRet, "成功", "失败"));
If(orderRet)
{
optionHoldingSymbol = putOptionSymbol;
}
}
}
}
// 平仓信号处理
Else If(sig.combOffset == Enum_Exit && optionHoldingSymbol != "")
{
Array<Integer> orders;
//这里的期权平仓价格用“Q_AskPrice”合适吗?
Bool orderRet = A_SendOrderEx(optionHoldingSymbol, Enum_sell, Enum_Exit, lotsoption, Q_AskPrice, orders, "", A_GetOrderCreateSource);
Print("平仓" + "期权: " + optionHoldingSymbol + ", 结果: " + IIFString(orderRet, "成功", "失败"));
If(orderRet)
{
optionHoldingSymbol = "";
}
}
}
}
}
测试了一下,这个开仓是可以,但是平仓平不了,麻烦帮忙看下问题在哪里,谢谢!optionHoldingSymbol这个是用的global变量,会不会是这里的问题?
A函数 事件域
靠调试,看是看不出结果了已经