一个简单策略,调用Close[1]实效,跪求高手老师指导。。。。
2024-02-21 10:17

//------------------------------------------------------------------------

//

//------------------------------------------------------------------------

Params

Numeric MALength(20); // 指数平均线参数

Numeric RollBackTh(0.01); //回撤比例阈值

Vars

Series<Numeric> AvgValue1; //均线

Numeric ExtrValue(100); //极值

Numeric Rollback(0); //回撤比例

Events

OnReady()

{

SetBackBarMaxCount(1 + MALength); //获取足够的BAR

}

OnBar(ArrayRef<Integer> indexs)

{

AvgValue1 = AverageFC(Close,MALength); //计算均线

PlotNumeric(\"MA1\",AvgValue1); //绘制均线

If(MarketPosition == 0 && Close[1] > AvgValue1[1] && Close[1] > Close[2]) //无持仓,且收盘价位于均线上,上涨

{

Buy(0,Open); //开多单

}

If(MarketPosition == 1) //持有多单

{

If(ExtrValue < Close[1]) //极值小于上一个BAR的收盘价

{

ExtrValue = Close[1]; //更新极值

}Else

{

Rollback = (ExtrValue-Close[1])/ExtrValue; //计算上一个BAR的收盘价相比极值的回撤比例

If(Rollback > RollBackTh) //回撤比例超过阈值

{

Sell(0,Open); //平掉多单

ExtrValue = 0; //极值归零

}

}

}

}

//------------------------------------------------------------------------

// 编译版本 2024.02.21 V1.0

// 版权所有

// 更改声明

//------------------------------------------------------------------------


问题描述:

1.以上为策略全部代码;

2.代码执行到

           Rollback = (ExtrValue-Close[1])/ExtrValue; //计算上一个BAR的收盘价相比极值的回撤比例

           If(Rollback > RollBackTh) //回撤比例超过阈值

出现问题

“Rollback = (ExtrValue-Close[1])/ExtrValue;”这代码的具体问题是Close[1]调用失败,该行代码不执行,若把Close[1]替换某个常数比如3000,则可以执行;

“ If(Rollback > RollBackTh)”这代码的具体问题是RollBackTh调用失败,若把RollBackTh替换某个常数比如0.01,则可以执行;

请老师帮忙排查分析一下问题出在哪里?跪谢。。。。。。

评论区
tbd1823393122

已解决,是数组赋值的问题。

2024-02-21 14:30
tbd1823393122

逻辑问题烦请老师明示,自己感觉查不出问题了。。。。

2024-02-21 14:05
tbd1823393122

逻辑问题烦请老师明示,自己感觉查不出问题了。。。。

2024-02-21 14:05
tbd1823393122

若把Close[1]替换某个常数比如3000,则可以执行;

2024-02-21 12:31
顶部