错误、漏洞、问题 - 页 379

 
Graff:

这是否有意义

用BarsCalculated(ich)代替rate_total?

我不这么认为。它更像是一个服务存根,以确保缓冲区已准备好...

此外,复制将返回计算出的数据量,而不是请求的大小。


如果不是秘密的话,你是哪个城市的?

不在第聂伯。
 
sergeev:

顺便问一下,你确定你不需要调用任何额外的函数吗?

该库同时具有Refresh和BufferResize。在我看来,它们是正常运作的必要条件。


而哪里写着他们应该如此?

我尝试了不同的变体。

ichi.Refresh(true);
ichi.Refresh(false);
ichi.RefreshCurrent(true);
ichi.RefreshCurrent(false);

我没有得到任何效果。

 

Continued....

iIchimoku指标正在经历一个故障。我的指标只是根据if(tenkan[i]>kijun[i])来画箭头。正如你在截图中看到的那样,箭头没有被正确画出来。

完整的代码在文件Ich_1_f.mq5中。

然而,如果你手动计算它们,一切都会正确显示

文件Ich_1_ok.mq5中的全部代码

附加的文件:
Ich_1_f.mq5  6 kb
Ich_1_ok.mq5  6 kb
 

写下dll:

#define _DLLAPI extern "C" __declspec(dllexport)
//+------------------------------------------------------------------+
//| адрес переменной double                                          |
//+------------------------------------------------------------------+
_DLLAPI int __stdcall
GetPtrVar(double a){return((int)(&a));}
//+------------------------------------------------------------------+
//| значение переменной double по адресу                             |
//+------------------------------------------------------------------+
_DLLAPI double __stdcall
GetValuePtr(int pointer){return(*(double*)pointer);}

把它插上。

#import "Projeckt1.dll"
int      GetPtrVar(double a);
double   GetValuePtr(int pointer);
#import

呼叫 ..:

void OnStart()
  {   
   double var=153.25; 
   Print("вложенный вызов = ",GetValuePtr(GetPtrVar(var)));
   int pointer=GetPtrVar(var);   
   Print("вызов с сохранением адреса = ",GetValuePtr(pointer));
  }

我们得到了这个。

2011.05.01 18:09:12     Черновик 31 (EURUSD,H1) вызов с сохранением адреса = 5.560304580319136 e-287
2011.05.01 18:09:12     Черновик 31 (EURUSD,H1) вложенный вызов = 153.25

尽管这两行应该返回相同的值153.25。

为什么?

 
Urain:

为什么?
这是在32位还是64位版本?
 
Renat:
这是在32位还是64位版本?

32
 

它非常简单--在GetPtrVar(double a)函数中,你取了堆栈中变量副本 的地址,然后试图读取堆栈内存的那块垃圾。

第一次,由于GetValuePtr的近距离调用,我们成功地从未受污染的堆栈中读取,而随后的函数调用 则不可逆转地损坏了堆栈。

没有错误。

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Renat:

这很简单--在GetPtrVar(double a)函数中取堆栈中变量副本 的地址,然后尝试读取堆栈内存中的那块垃圾。

是的,没错,我觉得我需要在那里挖出一些东西。

你必须在dll中写入

GetPtrVar(double &a){return((int)(&a));}
 
Renat:

它非常简单--在GetPtrVar(double a)函数中,你取了堆栈中变量副本 的地址,然后试图读取堆栈内存的那块垃圾。

第一次,由于GetValuePtr的近距离调用,我们成功地从未受污染的堆栈中读取,而随后的函数调用 则不可逆转地损坏了堆栈。

没有错误。

我也注意到了这一点。我想这是正确的做法。

#define _DLLAPI extern "C" __declspec(dllexport)
//+------------------------------------------------------------------+
//| адрес переменной double                                          |
//+------------------------------------------------------------------+
_DLLAPI int __stdcall
GetPtrVar(double & a){return((int)(&a));}
//+------------------------------------------------------------------+
//| значение переменной double по адресу                             |
//+------------------------------------------------------------------+
_DLLAPI double __stdcall
GetValuePtr(int pointer){return(*(double*)pointer);}

堵塞:

#import "Projeckt1.dll"
int      GetPtrVar(double & a);
double   GetValuePtr(int pointer);
#import
 
在Metatrader5的439版本中,增加了一个历史质量指标。当我在M1和H4的开盘价 和所有点位上测试时,质量是51%...为什么以及如何增加?报价的来源是Alpari演示。
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5