//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
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,则可以执行;
请老师帮忙排查分析一下问题出在哪里?跪谢。。。。。。
已解决,是数组赋值的问题。
逻辑问题烦请老师明示,自己感觉查不出问题了。。。。
若把Close[1]替换某个常数比如3000,则可以执行;
你觉得这个else分支照你现在的逻辑会有可能发生执行吗?
逻辑问题烦请老师明示,自己感觉查不出问题了。。。。
你是怎么知道Close[1]调用失败了