Amibroker AFL код Buy Статус продажи не совпадает с условием
У меня есть AFL, который отлично работает для сырой нефти. из 10 сделок 8 сделок являются целями. У меня есть код для размещения заказов на автоматические торги. Код автоматической торговли работает нормально с другими кодами AFL, но проблема в следующем алгоритме: булево значение BUY и SELL не соответствует условию IF. Но IIF(купить.... условия работают нормально.
Мой главный вопрос - почему BUY Sell True или false не работает в последнем статусе в AFL. Пожалуйста, помогите мне решить эту проблему.
_SECTION_BEGIN("T+4 day ");
Title = " ..:: duy ::.. - Filter of Stock " + " " + FullName() + " " + Date( ) ;
// 4-Day-Range Switch
prev=AMA2(C,1,0);
d=IIf(C>Ref(Max(Max(H,Ref(H,-20)),Max(Ref(H,-10),Ref(H,-15))),-1),Min(Min(L,Ref(L,-20)),Min(Ref(L,-10),Ref(L,-15))),
IIf(C<Ref(Min(Min(L,Ref(L,-20)),Min(Ref(L,-10),Ref(L,-15))),-1),Max(Max(H,Ref(H,-20)),Max(Ref(H,-10),Ref(H,-15))),PREV));
a=Cross(Close,d);
b=Cross(d,Close);
state=IIf(BarsSince(a)<BarsSince(b),1,0);
s=state>Ref(state,-1);
ss=state<Ref(state,-1);
sss=state==Ref(state,-1);
col=IIf(state == 1 ,51,IIf(state ==0,4,1));
Plot(C,"",Col,128);
Buy=s;
Sell=ss;
PlotShapes( shapeUpArrow * s ,6,0,L);
PlotShapes( shapeDownArrow *ss ,4,0,H);
dist = 0.8*ATR(10);
dist1 = 2*ATR(10);
for( i = 0; i < BarCount; i++ )
{
if( Buy )
{
PlotText( "\nBuy:" + L[ i ] + "\nT= " + (L*1.005) + "\nSL= " + (L*0.9975), i, L[ i ]-dist, colorGreen, colorWhite );
}
if( Sell )
{
PlotText( "Sell:" + H[ i ] + "\nT= " + (H*0.995) + "\nSL= " + (H*1.0025), i, H[ i ]+dist1, colorRed, colorWhite );
}
}
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
if ( LastValue(Buy)==1)
{
quantity=2;
orderId=placeOrderFuture("MCX", "FUTCOM", ChartSymbol, "BUY", "INTRADAY", "MARKET", quantity, 0, defaultTriggerPrice(), "19-APR-2018", defaultStrategyId(), defaultComments());
//orderId = placeOrderUsingParams(tradeType, AT_ORDER_TYPE, AT_QUANTITY, buyPrice, defaultTriggerPrice(), 1);
}
if ( LastValue(Sell) == 1 )
{
quantity=2;
orderId=placeOrderFuture("MCX", "FUTCOM", ChartSymbol, "SELL", "INTRADAY", "MARKET", quantity, 0, defaultTriggerPrice(), "19-APR-2018", defaultStrategyId(), defaultComments());
//orderId = placeOrderUsingParams("SELL", AT_ORDER_TYPE, AT_QUANTITY, sellPrice, defaultTriggerPrice(), 1);
}
1 ответ
С помощью операторов if необходимо указать конкретную полосу. И согласно документации, LastValue может заглянуть в будущее. Я не могу точно сказать, что происходит с вашим кодом, но циклы / if / switch могут быть хитрыми. Этот урок Looping в Amibroker может дать вам некоторое представление о том, как они работают.
Вместо этого вы можете попробовать SelectedValue. Если у вас нет выбранных баров, по умолчанию автоматически отображается последний бар. Я использую это для своей торговли в реальном времени.
bi = SelectedValue(BarIndex());
if(Buy[bi])
{
...
}
На несвязанной ноте ваши текстовые графики не будут отображать нефильтрованные сигналы, поместите свой код ExRem в исходные условия покупки и продажи.