老师:
在30分钟周期的K线上利用A函数报单后,trade_mark=False;那么,是不是在5分钟周期上不能再报单了?
如何做到30分钟周期上trade_mark标识为False时,5分钟周期的K线上还能报单?
请指导,谢谢!
trade_mark自己定义的变量吗?
建议你贴完整的代码上来看
Params
……
Vars
……
Global Bool trade_mark;
Events
OnInit()
{
}
onBar(ArrayRef<Integer> indexs)
{
MP = MarketPosition;
Range[0:7]
{
//交易指标计算
……
//开多仓条件计算
If(MarketPosition == 0 And BarsSinceExit >= 0 And MA5 / MA5[1] > MA10 / MA10[1])
{
If(MACDDiff[1] > MACDDiff[2] )
{
Buy(1 , Max(O, MA5), Enum_Signal_NotSend());
myEntryPrice = Max(O, MA5);
}
}
……
Buyksign = 0;
IF(MP[1] == 0 And MarketPosition == 1)
{
Buyksign = 1;
}
//开空仓条件计算
If(MarketPosition == 0 And BarsSinceExit >= 0 And MA5[1] / MA5 > MA10[1] / MA10)
{
If(MACDDiff[1] < MACDDiff[2])
{
Sellshort(1, Min(O, MA5), Enum_Signal_NotSend());
myEntryPrice = Min(O, MA5);
}
}
……
Sellksign = 0;
IF(MP[1] == 0 And MarketPosition == -1)
{
Sellksign = 1;
}
//平多仓条件计算
If(MarketPosition == 1 And BarsSinceEntry >= 1)
{
If(MACDDiff < MACDDiff[1] or MA20 < MA20[1])
{
Sell(0, Min(O, MA5), Enum_Signal_NotSend());
ExitPrice == Min(O, MA5);
}
}
……
Sellpsign = 0;
IF(MP[1] == 1 And MarketPosition == 0)
{
Sellpsign = 1;
}
//平空仓条件计算
If(MarketPosition == -1 And BarsSinceEntry >= 1)
{
if(MACDDiff > MACDDiff[1] or MA20 > MA20[1])
{
Buytocover(0, Max(O, MA5), Enum_Signal_NotSend()) ;
ExitPrice == Max(O, MA5);
}
}
……
Buypsign == 0;
IF(MP[1] == -1 And MarketPosition == 0)
{
Buypsign = 1;
}
if(MarketPosition == MP[1])
{
Buyksign = Buyksign[1];
Sellksign = Sellksign[1];
Buypsign = Buypsign[1];
Sellpsign = Sellpsign[1];
}
}
//A函数下单
//各图层周期:0-5M,1-15M,2-30M,3-60M,4-120M,5-D,6-1M
//A函数开多仓
if ((currenttime > 0.090030 And currenttime < 0.145930) or (currenttime > 0.210030 And currenttime < 0.232930))
{
If(A_BuyPosition == 0 And A_SellPosition == 0 And (data1.Buyksign == 1 or data2.Buyksign == 1))
{
IF(((data5.K > data5.D And data4.K > data4.D) And data0.K < 80) And trade_mark)
{
array<Integer> orderids;
A_SendOrderEx(Enum_Buy, Enum_Entry, VolT, O, orderids);
myEntryPrice = O;
trade_mark = False;
}
}
//A函数开空仓
If(A_BuyPosition == 0 And A_SellPosition == 0 And (data1.Sellksign == 1 or data2.Sellksign == 1))
{
IF(((data5.K < data5.D And data4.K < data4.D) And data0.K > 20) And trade_mark)
{
array<Integer> orderids;
A_SendOrderEx(Enum_Sell, Enum_Entry, VolT, O, orderids);
myEntryPrice = C;
trade_mark = False;
}
}
//A函平多仓
If(data4.MarketPosition == 1 And A_BuyPosition == 1 And data1.Sellksign ==1)
{
IF(data1.K < data1.D And trade_mark)
{
array<Integer> orderids;
A_SendOrderEx(Enum_Sell, Enum_Exit, VolT, O, orderids);
trade_mark = False;
}
}
//应对开多仓信号消失
If(data2.MarketPosition == 0 And data1.MarketPosition == 0 And A_BuyPosition == 1 And data6.Sellpsign == 1)
{
IF(data6.K < data6.D And trade_mark)
{
array<Integer> orderids;
A_SendOrderEx(Enum_Sell, Enum_Exit, VolT, O, orderids); //平多单
trade_mark = False;
}
}
//A函数平空仓
If(data4.MarketPosition == -1 And A_SellPosition == -1 And data1.Buyksign == 1)
{
IF(data1.K > data1.D And trade_mark)
{
array<Integer> orderids;
A_SendOrderEx(Enum_Buy, Enum_Exit, VolT, O, orderids);
trade_mark = False;
}
}
//应对开空仓信号消失
If(data2.MarketPosition == 0 And data1.MarketPosition == 0 And A_SellPosition == -1 And data6.Buypsign == 1)
{
IF(data6.K > data6.D And trade_mark)
{
array<Integer> orderids;
A_SendOrderEx(Enum_Buy, Enum_Exit, VolT, O, orderids); //平pw 单
trade_mark = False;
}
}
}
}
onBarOpen(ArrayRef<Integer> indexs)
{
trade_mark = True;
}
麻烦老师给看看,开仓单能正常发单,但平仓单不能正常发单。
你这个代码编译不了