Hatalar, hatalar, sorular - sayfa 2930

 

Göstergeyi MT4'ten MT5'e aktarma

DRAW_HISTOGRAM kalınlık boyutlarıyla ilgili sorun

"1" veya "2" ayarlandığında boyut değişir, ancak "3" veya "4" = boyut hala "2" olarak kalır


Neden her şey MT4'te çalışıyor da MT5'te böyle bir sorun var?

 #property indicator_separate_window
#property indicator_plots    4
#property indicator_buffers 4
#property indicator_color1 clrDodgerBlue
#property indicator_color2 clrDodgerBlue
#property indicator_color3 clrLimeGreen
#property indicator_color4 clrFireBrick
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3

MT4'te sonuç


MT5'teki sonuç, ayarlarda "3" olmasına rağmen yalnızca "2" kalınlığını görüntüler.



Ayrıca özelliği OnInit() 'te ayarlamak da yardımcı olmaz.

PlotIndexSetInteger (0, PLOT_LINE_WIDTH , 3);

 

Hata ayıklama sırasında kritik hata :

 struct sA
  {
   int                i;
   string             s;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
public :
   sA                my_array[];
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   cA *ca;
   ca= new cA();
   ArrayResize (ca.my_array, 1 );
   ZeroMemory (ca.my_array);
   ArrayPrint (ca.my_array);
  }

Sonuç:

2020.12.27 17:04:26.966 1 (EURUSD,M1)   Access violation at 0x000001FE5AF10199 read to 0xFFFFFFFFFFFFFFFF in 'D:\Alpari MT5\MQL5\Scripts\Test\1.ex5'
2020.12.27 17:04:26.967 1 (EURUSD,M1)      crash -->  000001FE5AF10199 8B4318            mov        eax, [rbx+0x18]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF1019C 4089442420        mov        [rsp+0x20], eax
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A1 41B910000000      mov        r9d, 0x10
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A7 49B8B807F15AFE01  mov        r8, 0x1fe5af107b8
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B1 488D17            lea        rdx, [rdi]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B4 48B998D45F5FFE01  mov        rcx, 0x1fe5f5fd498
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101BE 49FF96A8120000    call       qword near [r14+0x12a8]  ; #11378 (terminal64.exe)
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
2020.12.27 17:04:26.967 1 (EURUSD,M1)   00: 0x000001FE5AF10199
2020.12.27 17:04:26.967 1 (EURUSD,M1)   01: 0x000001FE633F0010
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
Şu anda en son beta sürümü
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Gösterge tutamacı ile ana pencerede veya alt pencerede display özelliğini almanın bir yolunu bulan var mı? IndicatorCreate kullanılarak oluşturulan ve ardından kullanıcının isteği üzerine ChartIndicatorAdd kullanılarak grafiğe eklenebilen isteğe bağlı üçüncü taraf göstergelerinden bahsediyoruz.
 
Stanislav Korotky :
Gösterge tutamacı ile ana pencerede veya alt pencerede display özelliğini almanın bir yolunu bulan var mı? GöstergeCreate kullanılarak oluşturulan ve daha sonra kullanıcının isteği üzerine ChartIndicatorAdd kullanılarak grafiğe eklenebilen isteğe bağlı üçüncü taraf göstergelerinden bahsediyoruz.

Muhtemelen, göstergeyi OBJ_CHART'a itebilir ve orada nerede olduğunu görebilirsiniz.

 
Stanislav Korotky :
Gösterge tutamacı ile ana pencerede veya alt pencerede display özelliğini almanın bir yolunu bulan var mı? GöstergeCreate kullanılarak oluşturulan ve daha sonra kullanıcının isteği üzerine ChartIndicatorAdd kullanılarak grafiğe eklenebilen isteğe bağlı üçüncü taraf göstergelerinden bahsediyoruz.

benzer bir şey yaptı.
İşte buldum. Çalışıp çalışmadığını hatırlamıyorum. Hesap Lütfen.

 bool FindIndicatorByHandle( long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) {
   long chart_id = ChartFirst ();
   while (chart_id!=- 1 ) {
       int total_sub = ( int ) ChartGetInteger (chart_id, CHART_WINDOWS_TOTAL );
       int total_ind; 
       for ( int i= 0 ; i<total_sub; i++) {
         total_ind = ChartIndicatorsTotal (chart_id,i);
         for ( int j= 0 ; j<total_ind; j++) {
             string name = ChartIndicatorName (chart_id,i,j);
             if ( ChartIndicatorGet (chart_id,i,name)== handle) {
               ChartId=chart_id;
               symbol= ChartSymbol (chart_id);
               timeframe= ChartPeriod (chart_id);
               sub_win=i;
               Name=name;
               return true ;
            }
         }
      }
      chart_id= ChartNext (chart_id);
   }
   return false ;
}
Koda bakılırsa, tüm açık grafiklerde tutamaçla bir gösterge arar. Sembol, zaman çerçevesi, grafik kimliği, alt pencere ve gösterge adını döndürür.
 
fxsaber :

Muhtemelen, göstergeyi OBJ_CHART'a itebilir ve orada nerede olduğunu görebilirsiniz.

Deneyeceğim, kullanıcı tarafından belirtme seçeneğini yapmak zorunda kaldım.

 
Nikolai Semko :

benzer bir şey yaptı.
İşte buldum. Çalışıp çalışmadığını hatırlamıyorum. Hesap Lütfen.

Koda bakılırsa, tüm açık grafiklerde tutamaçla bir gösterge arar. Sembol, zaman çerçevesi, grafik kimliği, alt pencere ve gösterge adını döndürür.

Bu açıklanan soruna uymuyor: IndicatorCreate tarafından oluşturulan göstergeler herhangi bir pencereye yerleştirilmez - içeride "otururlar" ve görev, böyle bir göstergeyi tutamacı ile pencereye yerleştirmektir. Artık MQL5, göstergenin kendisinin "özelliği" ne olursa olsun (hata olmadan!) hem ana pencereye hem de alt pencereye isteğe bağlı bir tanıtıcı eklemek için ChartIndicatorAdd işlevinin kullanılmasına izin verir ve ekleme yapılmadığında sonuç çok garip görünür. amaçlanan.

 

Göstergelerle daha da büyük bir pusu var.

Bazıları OnCalculate işleyicisini tek bir giriş dizisiyle basitleştirilmiş bir şekilde uygular ve onlar için hesaplama için fiyat türünü seçebilirsiniz. Bir gösterge oluştururken tüm parametrelerden sonra geçilmesi gereken bu tür bir fiyatı Türkiye'nin beklediğini üçüncü taraf bir MQL5 programından nasıl öğrenebilirim? Öyle görünmüyor. Ve bu yapılmazsa, gösterge, dışarıdan da erişilemeyen #property gösterge_uygulamalı_fiyatına göre oluşturulur. İşte çizelgeye programlı olarak Örnekler/AMA ekleyen basit bir EA:

 int OnInit ()
{
   const int h = iCustom ( NULL , 0 , "Examples/AMA");
   if (h == INVALID_HANDLE )
  {
     Print (" iCustom failed: ", _LastError );
     return INIT_FAILED ;
  }

   if (! ChartIndicatorAdd ( 0 , 0 , h))
  {
     Print (" ChartIndicatorAdd failed: ", _LastError );
     return INIT_FAILED ;
  }
   ChartRedraw ();
  
   return INIT_SUCCEEDED ;
}

Bundan sonra grafik zaman çerçevesini değiştirirsek 2 AMA göstergesi elde ederiz: biri kapanış fiyatında (programlı olarak oluşturulur) ve ikincisi açık fiyatta (zaman çerçevesi değişikliği ve #property Indicator_applied_price PRICE_OPEN nedeniyle oluşturulur; o da değil bu özelliğin neden iCustom'da alınmadığını açıklayın).

 

Göstergeler konusuna devam ederek, MqlParam parametreleriyle sorunu bulmayı ve atlamayı başardığım bir Uzman Danışman ekliyorum.

Uzmanın görevi, aynı parametrelerle zaten orada değilse, "Örnekler/Fiyat_Kanal" göstergesini grafiğe eklemektir.

Bunu yapmak için, iCustom/IndicatorCreate kullanılarak bir örnek oluşturulur, onun parametrelerinin bir dizisi IndicatorParameters aracılığıyla elde edilir ve ardından IndicatorParameters grafikte zaten mevcut olan göstergeler için bir döngüde sorgulanır: parametre dizilerinde eşleşme yoksa, grafiğe gösterge eklenir, bir eşleşme varsa, yeni tutamaç basitçe yok edilir.

Sorun, parametre eşitliğinin her zaman beklendiği gibi sonuçlanmamasıdır. Özellikle, böyle bir başarısız test durumu var. Herhangi bir boş grafiğe bir Uzman Danışman yerleştiririz, bir fare tıklaması yaparız - bu, göstergenin ilk örneğini oluşturur. Ardından, grafiğin zaman dilimini diğerine değiştiririz (önceki gösterge kalır) ve fareyle tekrar tıklayın. İşin garibi, göstergenin ikinci bir örneği oluşturulur.

Yürütmenin ve kütüğün analizinden, bunun parametrelerdeki göstergenin adıyla hatalı bir satır eşitsizliğinden kaynaklandığı açıktır. Buradaki satırlar 260 karakter uzunluğundadır, ancak 0 terminali çok daha erken yer almaktadır. Ondan sonra - bazı servis bilgileri veya çöpler. Ve böylece "==" veya StringCompare satırlarının karşılaştırılması bu "çöp"ü dikkate alır ve satırların eşitsizliği ortaya çıkar.

Dizeleri bir char dizisine dönüştürürseniz diziler tam olarak eşleşir. Kısa bir diziye dönüştürürseniz - çöp görünür. Genel olarak, belgelerde açıklanmayan bir tür tutarsız davranış.

Window N: 1
   0, Price Channel(22), 12
    [type] [integer_value] [double_value]                                                                                                                                                                                                                                                         [string_value]
[0]     14               0          0.000 "Indicators\Examples/Price_Channel"                                                                                                                                                                                                                                   
[1]      7              22          0.000 null                                                                                                                                                                                                                                                                  
ind1: 'Indicators\Examples/Price_Channel
ind2: 'Indicators\Examples/Price_Channel
260 0 / 260 0
Char arrays 34 34
 73 110 100 105  99  97 116 111 114 115  92  69 120  97 109 112 108 101 115  47  80 114 105  99 101  95  67 104  97 110 110 101 108   0
 73 110 100 105  99  97 116 111 114 115  92  69 120  97 109 112 108 101 115  47  80 114 105  99 101  95  67 104  97 110 110 101 108   0
Short arrays 260 260
[  0]    73   110   100   105    99    97   116   111   114   115    92    69   120    97   109   112   108   101   115    47    80   114   105    99
[ 24]   101    95    67   104    97   110   110   101   108     0   103   110    97   108     0     0     0     0     0     0     0     0     0     0
[ 48]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[ 72]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[ 96]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[120]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[144]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[168]     0     0     0     0     0     0     0     0     0     0     0     0    13  3328 58074    86 13696    54     0     0 35120  3210     0     0
[192]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[216]     0     0     0     0 61841 38184 17648 16370     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[240]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[  0]    73   110   100   105    99    97   116   111   114   115    92    69   120    97   109   112   108   101   115    47    80   114   105    99
[ 24]   101    95    67   104    97   110   110   101   108     0   103   110    97   108     0    32    32    77    32    65    32    82    32    75
[ 48]    32    83     0    32    99   111   109   109    97    32   115   101   112    97   114    97   116   101   100    32   108   105   115   116
[ 72]    41     0    32   112   114   111   116   111   116   121   112   101   115    41     0     0   115     0     0     0     0     0     0     0
[ 96]   528     0     0     0     0    45     0     0     3     0     0     0   512     0     0     0  1160    45     0     0  7256 30655     0     0
[120]     0     0     0     0   512     0     0     0     0 65535  2272     0 29648    45     0     0     0     0     0     0     0     0     0     0
[144]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[168]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[192]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[216]     3     0     0     0 26341 16284     1     0  1308    16     0     0 49814 30635     0     0     0     0     0     0 32016    37     0     0
[240]     2     0     0     0 50336 16481     1     0     2     0     0     0     3     0     0     0 45520    37     0     0
1 0

Hatanın tam olarak ne olduğundan emin değilim - ya MQL'de dizeleri işleme ilkesinde ya da başka bir şeyde.

Nüansların farkında olan varsa, lütfen bir ipucu verin.

Dosyalar:
 
Stanislav Korotky :

Nüansların farkında olan varsa, lütfen bir ipucu verin.

Bu öyle bir özellik ki, bilseniz bile kafanızdaki tüm katmanı yeniden yükseltmeniz gerekiyor.

Burada kendi varlığının tespitini yaptı. TF'yi değiştirirken işe yarıyor gibi görünüyor.

Init_Sync
Init_Sync
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
Neden: