使用 iCustom 从 mql5 指标中检索到错误的缓冲区值
wrong buffer value retrieved from mql5 indicator using iCustom
我刚从 mql4 转移到 mql5,现在我试图从指标读取缓冲区值,但它只显示 0 而不是实际缓冲区值
这是我的代码:
#property version "1.00"
int handle1 = 0;
double valu1,valu2,valu3,valu4;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
handle1 = iCustom(NULL, NULL, "LTD by KDMfx");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
IndicatorRelease(handle1);
}
//+------------------------------------------------------------------+
//| Get indicator value |
//+------------------------------------------------------------------+
double GetIndicator(int handle, int buffer_num, int index)
{
double arr[];
if(CopyBuffer(handle, buffer_num, 0, index+1, arr) <= 0)
{
Sleep(200);
for(int i=0; i<100; i++)
{
if(BarsCalculated(handle) > 0)
break;
Sleep(50);
}
int copied = CopyBuffer(handle, buffer_num, 0, index+1, arr);
if(copied <= 0)
{
Print("CopyBuffer failed. Maybe history has not download yet? Error = ", GetLastError());
return -1;
}
else
return (arr[index]);
}
return 0;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
//---
valu1 = GetIndicator(handle1,0,4);
valu2 = GetIndicator(handle1,1,4);
valu3 = GetIndicator(handle1,2,4);
valu4 = GetIndicator(handle1,3,4);
Comment("b1: ", valu1,
"\nb2: ", valu2,
"\nb3: ", valu3,
"\nb4: ", valu4
);
}
我做错了什么?
该指标不会出现在当前或最后一个关闭的蜡烛上,它会出现在当前+4 根蜡烛上,即过去的第 5 根蜡烛上。所以我使用“4”作为蜡烛 ID 但仍然没有用,无论我尝试什么我都能让它工作
尝试稍微简化一下。我没有您要阅读的指标的副本,但以下代码应该有效
#property version "1.10"
#property strict
int handle;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
handle=iCustom(_Symbol, 0, "LTD by KDMfx");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
IndicatorRelease(handle);
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
double LTDindicator[];
ArraySetAsSeries(LTDindicator, true);
CopyBuffer(handle, 0, 0, 25, LTDindicator);
Comment(LTDindicator[0]);
return;
}
我刚从 mql4 转移到 mql5,现在我试图从指标读取缓冲区值,但它只显示 0 而不是实际缓冲区值
这是我的代码:
#property version "1.00"
int handle1 = 0;
double valu1,valu2,valu3,valu4;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
handle1 = iCustom(NULL, NULL, "LTD by KDMfx");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
IndicatorRelease(handle1);
}
//+------------------------------------------------------------------+
//| Get indicator value |
//+------------------------------------------------------------------+
double GetIndicator(int handle, int buffer_num, int index)
{
double arr[];
if(CopyBuffer(handle, buffer_num, 0, index+1, arr) <= 0)
{
Sleep(200);
for(int i=0; i<100; i++)
{
if(BarsCalculated(handle) > 0)
break;
Sleep(50);
}
int copied = CopyBuffer(handle, buffer_num, 0, index+1, arr);
if(copied <= 0)
{
Print("CopyBuffer failed. Maybe history has not download yet? Error = ", GetLastError());
return -1;
}
else
return (arr[index]);
}
return 0;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
//---
valu1 = GetIndicator(handle1,0,4);
valu2 = GetIndicator(handle1,1,4);
valu3 = GetIndicator(handle1,2,4);
valu4 = GetIndicator(handle1,3,4);
Comment("b1: ", valu1,
"\nb2: ", valu2,
"\nb3: ", valu3,
"\nb4: ", valu4
);
}
我做错了什么? 该指标不会出现在当前或最后一个关闭的蜡烛上,它会出现在当前+4 根蜡烛上,即过去的第 5 根蜡烛上。所以我使用“4”作为蜡烛 ID 但仍然没有用,无论我尝试什么我都能让它工作
尝试稍微简化一下。我没有您要阅读的指标的副本,但以下代码应该有效
#property version "1.10"
#property strict
int handle;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
handle=iCustom(_Symbol, 0, "LTD by KDMfx");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
IndicatorRelease(handle);
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
double LTDindicator[];
ArraySetAsSeries(LTDindicator, true);
CopyBuffer(handle, 0, 0, 25, LTDindicator);
Comment(LTDindicator[0]);
return;
}