首页 > 解决方案 > Amibroker AFL 代码 Buy Sell 状态未在 if 条件下获取

问题描述

我有适用于原油的 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);
}

标签: algorithmic-tradingamibroker

解决方案


LastValue 文档

使用 if 语句,您需要指定一个特定的栏。根据文档,LastValue 可能会展望未来。我不能确定你的代码发生了什么,但循环/if/switch 可能很棘手。本教程在 Amibroker 中循环可能会让您深入了解它们的工作原理。

您可以改用 SelectedValue。如果您没有选择任何小节,它会自动默认为最后一个小节。我用它来进行实时交易。

bi = SelectedValue(BarIndex());

if(Buy[bi])
{
    ...
}

在不相关的说明中,您的文本图不会绘制未经过滤的信号,请将您的 ExRem 代码置于初始买入和卖出条件下。


推荐阅读