您没有检查正确的值
好吧,
使用 MetaTrader 的 GUI 图表的属性{ CHART_PRICE_MIN,
CHART_PRICE_MAX }
是可能的,但图表的布局由 aPriceDOMAIN 事件 (QUOTE-s) 和一些可配置选项控制,而不是由 ADX 技术指标值本身控制,因此这些检索到的数字是从 GUI 接收的-状态,几乎与实际寻求的{ min, MAX }
-ADX 值无关。
方法:
一个聪明而复杂的方法是创建一个 CustomIndicator 或一个类,执行这个确切的服务。
一种天真的但实用的方法是检查并重新检查所需的iADX()-{ MAIN, +DI, -DI }
值:
/* -----------------------------------------------//
int iADX( // MQL5-call-inteface:
string symbol, // symbol name
ENUM_TIMEFRAMES period, // period
int adx_period // averaging period
);
*/
#define currentChartID 0
#define currentChartMainWINDOW 0
int nBARsVISIBLE = ChartGetInteger( currentChartID, CHART_VISIBLE_BARS,
currentChartMainWINDOW
);
double iADX_VISIBLE[nBARsVISIBLE];
double iADX_VISIBLE_min,
iADX_VISIBLE_MAX;
int iADX_IndicatorHANDLE = iADX( _Symbol,
TimePeriod,
Candles_for_adx
);
/* -----------------------------------------------//
int CopyBuffer( // MQL5-call-inteface:
int indicator_handle, // indicator handle
int buffer_num, // indicator buffer number
int start_pos, // start position
int count, // amount to copy
double buffer[] // target array to copy
);
*/
int RetCODE = CopyBuffer( iADX_IndicatorHANDLE,
MODE_MAIN, // { 0: MODE_MAIN | 1: MODE_PLUSDI | 2: MODE_MINUSDI }
0,
nBARsVISIBLE,
iADX_VISIBLE
);
if ( RetCODE == -1 ) {...}
else {
iADX_VISIBLE_min = iADX_VISIBLE[ ArrayMinimum( iADX_VISIBLE ) ];
iADX_VISIBLE_MAX = iADX_VISIBLE[ ArrayMaximum( iADX_VISIBLE ) ];
...
}
鉴于最后一条评论:
好吧,这可能是我的问题的答案,但是先生,我想要图表限制而不是 ADX 最小值最大值。我可以稍后计算它,但目前想要有图形限制。我正在尝试使用 ADX 图进行一些实验。–贾弗威尔逊 1 小时前
#define currentChartID 0 // adapt to fit your current setup
#define currentChartSubWinID 0 // adapt to fit your current setup
double priceMin = ChartGetDouble( currentChartID,
CHART_PRICE_MIN,
currentChartSubWinID
);
double priceMax = ChartGetDouble( currentChartID,
CHART_PRICE_MAX,
currentChartSubWinID
);
Print( "INF:: Chart(", currentChartID, ":", currentChartSubWinID, ").CHART_PRICE_MAX = ", priceMin );
Print( "INF:: Chart(", currentChartID, ":", currentChartSubWinID, ").CHART_PRICE_MAX = ", priceMax );