algorithmic-trading - 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);
}
解决方案
使用 if 语句,您需要指定一个特定的栏。根据文档,LastValue 可能会展望未来。我不能确定你的代码发生了什么,但循环/if/switch 可能很棘手。本教程在 Amibroker 中循环可能会让您深入了解它们的工作原理。
您可以改用 SelectedValue。如果您没有选择任何小节,它会自动默认为最后一个小节。我用它来进行实时交易。
bi = SelectedValue(BarIndex());
if(Buy[bi])
{
...
}
在不相关的说明中,您的文本图不会绘制未经过滤的信号,请将您的 ExRem 代码置于初始买入和卖出条件下。
推荐阅读
- gitlab - Gitlab - 列出“我的”打开子模块合并请求?
- javascript - 使用 Fetch/Axios 将图像作为 FormData 发布在 Android 上会中断
- amazon-web-services - AWS Amplify 无法与 Elastic BeansTalk 连接
- ios - 不滚动表格的 UITableView 的动画位置
- dask - Qi:如何设置与 SLURM 20.02.3 兼容的 dask 和 dask_ml 配置
- python - 如何使 python 数据透视表(边距 = True)返回行/列的总和,而不是平均值?
- tensorflow - TF2.0保存或冻结图或onnx模型中将双线性调整大小更改为最近邻(NN)的方法
- haskell - Haskell Fibonacci达到最大指定数字?
- rdf - 如何将多个本体上传到 protégé?
- c# - 试图完成一个问题,我一直遇到 get Object Reference not set to an instance of an object line 31