Hatalar, hatalar, sorular - sayfa 379

 
Graff :

ve mantıklı mı

oranları_toplam BarsCalculated(ich) ile değiştirilsin mi?

düşünme. Tamponun hazır olduğundan emin olmak için daha çok bir servis fişi gibi...

ayrıca, Kopyala, istenen boyutu değil, hesaplandığı kadar veri döndürür.


Gizli değilse hangi şehirdensin?

Dinyeper'da değil.
 
sergeev :

Bu arada, herhangi bir ek fonksiyon çağırmanız gerekmediğinden emin misiniz?

kitaplıkta hem Refresh hem de BufferResize vardır. Bana öyle geliyor ki normal işleyiş için gerekliler.


Gerekli olan nerede yazıyor?

Farklı versiyonlarda denedim.

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

Etkisi yok.

 

Devam ediyoruz....

iIchimoku göstergesinde bir aksaklık var. Göstergem sadece if(tenkan[i]>kijun[i]) değerine bağlı olarak oklar çiziyor. Ekran görüntüsünde de görebileceğiniz gibi, oklar yanlış çizilmiş.

Ich_1_f.mq5 dosyasındaki tam kod

Ancak, manuel olarak hesaplarsanız, her şey doğru şekilde görüntülenir.

Ich_1_ok.mq5 dosyasındaki tam kod

Dosyalar:
Ich_1_f.mq5  6 kb
Ich_1_ok.mq5  6 kb
 

dll yazıyoruz:

#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);}

bağlanıyoruz:

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

Biz ararız:

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

şunu elde ederiz:

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

teoride her iki satır da aynı değeri 153.25 döndürmelidir.

Niye ya?

 
Urain :

Niye ya?
32 veya 64 bit sürümünde mi?
 
Renat :
32 veya 64 bit sürümünde mi?

32
 

Her şey çok basit - GetPtrVar( double a) işlevinde, yığındaki değişkenin bir kopyasının adresini alırsınız ve sonra yığın belleğin dağınık parçasını okumaya çalışırsınız.

GetValuePtr'ye yapılan yakın çağrı nedeniyle ilk kez, bozulmamış bir yığından okumak mümkün oldu ve sonraki işlev çağrıları yığını geri dönülmez şekilde bozdu.

Hata yok.

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

Her şey çok basit - GetPtrVar( double a) işlevinde, yığındaki değişkenin bir kopyasının adresini alırsınız ve sonra yığın belleğin dağınık parçasını okumaya çalışırsınız.

Evet, tam olarak, orada bir yer kazmam gerektiğini hissettim.

dll'de yazman gerekiyor

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

Her şey çok basit - GetPtrVar( double a) işlevinde, yığındaki değişkenin bir kopyasının adresini alırsınız ve sonra yığın belleğin dağınık parçasını okumaya çalışırsınız.

GetValuePtr'ye yapılan yakın çağrı nedeniyle ilk kez, bozulmamış bir yığından okumak mümkün oldu ve sonrakiişlev çağrıları yığını geri dönülmez şekilde bozdu.

Hata yok.

Ben de fark ettim. Doğru bence:

#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);}

bağlanıyoruz:

 #import "Projeckt1.dll"
int       GetPtrVar( double & a);
double    GetValuePtr( int pointer);
#import
 
Metatrader5'in 439 numaralı yapısında, bir geçmiş kalite göstergesi eklendi. Açık fiyatlarda ve tüm keneler için M1 ve H4 üzerinde test yaparken, kalite %51'dir... bu değer neden ve nasıl artırılır? Alıntı kaynağı - alpari demosu.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
Neden: