Özel semboller. Hatalar, hatalar, sorular, öneriler. - sayfa 18

 

Hata 24.

İletilen ve içe aktarılan kenelerin veritabanları yanlış bir şekilde bir arada bulunur.

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

void OnInit ()
{
   MathSrand (( int ) TimeLocal ());
   EventSetMillisecondTimer ( 20 ); // С такой частотой будем пробрасывать тики
}

void OnTimer ()
{
   static bool FirstRun = true ;
   static const string Name = _Symbol + ( string ) MathRand ();
    
   static MqlTick Ticks[];
   static int Pos = 0 ;
    
   if (FirstRun)
  {    
     if ( CustomSymbolCreate (Name, NULL , _Symbol ) && SymbolSelect (Name, true )) // Создали символ
      PRINT( CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , ( ulong ) D'2019.06.20' * 1000 , 5 )); // Взяли 5 тиков для проброса
      
    FirstRun = false ;
  }
   else if (Pos < ArraySize (Ticks))
  {
     MqlTick Tick[ 1 ];
    
    Tick[ 0 ] = Ticks[Pos++];
    
    PRINT( CustomTicksAdd (Name, Tick)); // Пробросили тик.
    PRINT( CustomTicksReplace (Name, Tick[ 0 ].time_msc, Tick[ 0 ].time_msc, Tick)); // Заменили его же через импорт.
  }
   else
  {
    PRINT( CopyTicksRange (Name, Ticks)); // Взяли всю тиковую историю
     ArrayPrint (Ticks);                   // Распечатали ее.
    
     ExpertRemove ();
  }
}


Sonuç

 CopyTicks ( _Symbol ,Ticks, COPY_TICKS_ALL ,( ulong ) D'2019.06.20' * 1000 , 5 ) = 5
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CopyTicksRange (Name,Ticks) = 10
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[ 0 ] 2019.06 . 20 00 : 00 : 05 1.12255 1.12268 0.0000          0 1560988805004        6        0.00000
[ 1 ] 2019.06 . 20 00 : 00 : 07 1.12259 1.12268 0.0000          0 1560988807693        2        0.00000
[ 2 ] 2019.06 . 20 00 : 00 : 08 1.12259 1.12267 0.0000          0 1560988808627        4        0.00000
[ 3 ] 2019.06 . 20 00 : 00 : 09 1.12256 1.12267 0.0000          0 1560988809561        2        0.00000
[ 4 ] 2019.06 . 20 00 : 00 : 10 1.12255 1.12268 0.0000          0 1560988810083        6        0.00000
[ 5 ] 2019.06 . 20 00 : 00 : 05 1.12255 1.12268 0.0000          0 1560988805004        6        0.00000
[ 6 ] 2019.06 . 20 00 : 00 : 07 1.12259 1.12268 0.0000          0 1560988807693        6        0.00000
[ 7 ] 2019.06 . 20 00 : 00 : 08 1.12259 1.12267 0.0000          0 1560988808627        6        0.00000
[ 8 ] 2019.06 . 20 00 : 00 : 09 1.12256 1.12267 0.0000          0 1560988809561        6        0.00000
[ 9 ] 2019.06 . 20 00 : 00 : 10 1.12255 1.12268 0.0000          0 1560988810083        6        0.00000


Art arda beş tik attık/içe aktardık ve tarihte 10 tik bulduk.Aynı zamanda, önce beş kene, sonra aynı beş kene. Onlar. kene veri tabanındaki girişlerin zamanları bile tutarlı değil.

Kenelerin ikinci yarısının bayraklarına dikkat edin, ilkinden farklıdırlar.

 
Slava :

Oynanabilir değil. Çubuklar içe aktarıldıktan hemen sonra boş bir grafik güncellenir.

Grafik açılmazsa ne olur? Çubukları içe aktardıktan sonra grafiği açın .

Veya grafiği kapatıp açın.

Veya grafiğin bağlam menüsünden grafiği güncelleyin.

ana soru)))

Çubukları içe aktardım ve tüm pencereleri kapattım.

Sonra sembolleri yeniden açtım ve Çubuklar sekmesine gittim ve oradaki sembolümü seçtim.

Barlar gösterilmeli mi? Orası boş.

Yükle düğmesine tıklayarak (kaplama süresinin ön seçimi ile) - bunlar da görünmez.

1970 sürümü denendi - aynı durum.

Grafiği ve programı açmak/kapatmak yardımcı olmuyor.

Henüz programlamaya girmek kolay değil.

işte böyle olmalı...


Mümkünse uzaktan bağlanın, neye ihtiyacı olduğuna bir bakın, lütfen.

 

https://www.mql5.com/ru/forum/147666/page2#comment_3720399

belki biri yardım eder
ama benim farklı bir maydanozum vardı
1. 2019.hcc dosyasına ek olarak 1970.hcc dosyası oluşturuldu
çıkarıldıktan sonra zaten canlandı
2. o veya h'nin lh'nin dışında olduğu yerlerde kırmızı çizgiler vardı

1970 nereden geldi - belirsiz
böyle tarihler yoktu, boş satırlar yoktu
belki bir sürü mum, 50 binin altında

İzleyebilirsiniz, ancak daha görünür bir genliğin grafiğini nasıl genişletebilirsiniz?
Nesneler oluştururken mumların uçlarını doğru bir şekilde hedeflemem gerekiyor
özelliklere girmek ve değerleri manuel olarak yazmak uygun değildir
bundan sonra grafik sona kaydırılır, geri sarmanız gerekir
son çubuğa atlamaması için nasıl düzeltilir?

Тестер не работает
Тестер не работает
  • 2013.11.04
  • www.mql5.com
2013.11.03 17:25:58 TestGenerator: no history data 'EURUSD1' Вот такое сообщение появляется в журнале после нажатия кнопки "Старт"...
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Stanislav Korotky , 2019.08.22 17:34

Özel sembollerle ilgili aşağıdaki sorunla karşılaşan var mı? CustomRatesUpdate işlevine normal alıntılar iletilir, ancak aslında grafikte ve veri penceresinde garip bir şey olur (bu durumda, yakın ve düşük değerler, geçenlerden 100 kat daha küçüktür):

Ayrıca, tek tikler, CustomTicksAdd kullanılarak günlüktekiyle aynı kapanış fiyatı değerleriyle (CustomRatesUpdate'den hemen önce) eş zamanlı olarak öykünür, yani. tırnak içindeki azaltılmış değerlerin nereden geldiği belli değil.

UPD:

USDCAD'de bir anlamda "ters" bir durum var - kayıttan sonra fiyatlar 10 kat artıyor. Bu aldığım günlük:

 2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1)                  [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1) [ 0 ] 2019.08 . 23 00 : 02 : 00 1.32987 1.32987 1.32980 1.32987            457        48              0
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1) Retry: 1 0
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1)                  [time]  [open]   [high]   [low]  [close] [tick_volume] [spread] [real_volume]
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1) [ 0 ] 2019.08 . 23 00 : 02 : 00 1.32980 13.29730 1.32980 13.29730            457        52              0

İlk ArrayPrint, CustomRatesUpdate'e yazılan şeydir ve ikinci ArrayPrint, yazmadan hemen sonra en son en yeni çubuktan CopyRates kullanılarak okunan şeydir. İlk olarak, fark açılışta son hanededir, ancak daha da önemlisi, yüksek ve yakın 10 kat artar.

not. Kenelerde her şey yolunda:

 

Stanislav Korotky :

not. Kenelerde her şey yolunda:

Hata 22.

 
fxsaber :

Hata 22.

Bazı son derlemelerde düzeltildi mi?

 

4022 hatası nedir? Bir şekilde özel bir sembole bir çubuk yazma girişimleriyle bağlantılı. Ancak koda bakılırsa, genel olanlara aittir.

Önce bu çıktı:

KI       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) Alert : Error on writing custom record: 3082 , err: 4401
HS       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) Failed to add:
LE       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1)                  [time]   [open]   [high]    [low]  [close] [tick_volume] [spread] [real_volume]
KG       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) [ 0 ] 2019.08 . 28 00 : 06 : 00 1542.500 1542.500 1542.400 1542.400              15        170              0
GF       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) Last known 10 M1:
JN       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1)                  [time]   [open]   [high]    [low]  [close]       [tick_volume] [spread]       [real_volume]
JJ       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 0 ] 2019.08 . 28 00 : 00 : 00 1543.100 1543.100 1543.000 1543.000                    4        180                    0
DE       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 1 ] 2019.08 . 28 00 : 01 : 00 1543.000 1543.000 1542.900 1542.900                    2        180                    0
EP       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 2 ] 2019.08 . 28 00 : 02 : 00 1542.900 1542.900 1542.800 1542.800                    1        180                    0
ES       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 3 ] 2019.08 . 28 00 : 03 : 00 1542.800 1542.800 1542.700 1542.700                    1        180                    0
EN       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 4 ] 2019.08 . 28 00 : 04 : 00 1542.700 1542.700 1542.600 1542.600                    1        180                    0
QH       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 5 ] 2019.08 . 28 00 : 05 : 00 1542.600 1542.700 1542.500 1542.500                    30        170                    0
RE       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 6 ] 1970.01 . 01 00 : 00 : 00    + 0.000    + 0.000    + 0.000    + 0.000            5365435195          1 1827299883397152768
FF       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 7 ] 2106.02 . 07 06 : 28 : 16      0.078    + 0.000    + 0.000    + 0.000 4597373804417646592          1                  9481
KR       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 8 ] 1970.01 . 01 00 : 00 : 00    + 0.000    + 0.000    + 0.000    + 0.000            136454688          1 1827300776750350336
KL       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 9 ] 0000.00 . 00 00 : 00 : 00    + 0.000      2.150    + 0.000    + 0.000 1287860306076237824          0            4294967300
CH       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) Timeout before retry...

4401 CustomRatesUpdate çağrılırken . Ardından, CopyRates kullanarak özel sembolün son 10 çubuğunu okumak (veritabanında bir tür saçmalık olduğu görülebilir). Ardından, birkaç zaman aşımından sonra, 4022'ye kadar bir çubuğu tekrar kaydetme girişimleri çıktı ve ardından Expert Advisor'ın Anormal sonlandırması, ardından kendini yeniden başlattı.

 

Soru.

Özel semboldeki durma ve donma seviyelerini dinamik olarak değiştirmemiz gerekiyor.

Aşağıdaki test EA kodu vardır:

 //+------------------------------------------------------------------+
//| Globals                                                          |
//+------------------------------------------------------------------+
string symbol_name= "EURUSD_1" ;
string symbol_path= "" ;
string symbol_origin= "EURUSD" ;
long stop_lvl= 20 ;
long freeze_lvl= 30 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 1) create
   if (!:: SymbolInfoInteger (symbol_name, SYMBOL_CUSTOM ))
     {
       ResetLastError ();
       if (!:: CustomSymbolCreate (symbol_name,symbol_path,symbol_origin))
        {
         PrintFormat ( "Error code: %d" , GetLastError ());
         return INIT_FAILED ;
        }
     }
//--- 2) set levels
   ResetLastError ();
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
//---
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- 1) stop level
   stop_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   if (stop_lvl== 20 )
      stop_lvl= 30 ;
   else
      stop_lvl= 20 ;
   ResetLastError ();
   if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the stop level: %d" ,
                   GetLastError ());
       return ;
     }
//--- 2) freeze level
   freeze_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL );
   if (freeze_lvl== 30 )
      freeze_lvl= 40 ;
   else
      freeze_lvl= 30 ;
   if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the freeze level: %d" ,
                   GetLastError ());
       return ;
     }
  }
//+------------------------------------------------------------------+

Normal hata ayıklama modunda, yalnızca OnTick() işleyicisinin gövdesinde bir hata alıyorum. Ve hata kodu 0'dır.

 2019.09 . 09 23 : 25 : 05.010 TestingLevels (EURUSD,M1)       Error code while setting a new value for the stop level: 0


Tarihte hata ayıklama modunda , başlatmanın hemen ardından bir hata alıyorum. Hata şöyle:

 2019.09 . 09 23 : 29 : 43.005 2019.09 . 02 00 : 00 : 00    Error code: 4014

Onlar. bir sistem işlevini çağırma yasağı var.

ERR_FUNCTION_NOT_ALLOWED

4014

Sistem işlevinin çağrılmasına izin verilmiyor


Genel olarak, EA özel bir sembol üzerinde çalışırken durma seviyesi ve donma seviyesi değerlerini değiştirmek mümkün müdür?

 
Denis Kirichenko :

Soru.

Özel semboldeki durma ve donma seviyelerini dinamik olarak değiştirmemiz gerekiyor.

Aşağıdaki test EA kodu vardır:

Normal hata ayıklama modunda, yalnızca OnTick() işleyicisinin gövdesinde bir hata alıyorum. Ve hata kodu 0'dır.


Geçmişte hata ayıklama modunda , başlatmanın hemen ardından bir hata alıyorum. Hata şöyle:

Onlar. bir sistem işlevini çağırma yasağı vardır.

ERR_FUNCTION_NOT_ALLOWED

4014

Sistem işlevinin çağrılmasına izin verilmiyor


Genel olarak, EA özel bir sembol üzerinde çalışırken durma seviyesi ve donma seviyesi değerlerini değiştirmek mümkün müdür?

Ve neden satırlarda OnTick() içinde

 if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))

ve

 if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))

sembol özelliğinin başarılı bir şekilde değiştirilmesinden sonra hata işleme bloğunun gövdesine mi giriyoruz? (sinyal yok)

 
Artyom Trishkin :

Ve neden satırlarda OnTick() içinde

ve

sembol özelliğinin başarılı bir şekilde değiştirilmesinden sonra hata işleme bloğunun gövdesine mi giriyoruz? (sinyal yok)

Artyom, teşekkürler! Benim gözetimim.

Güncellenmiş versiyon:

 //+------------------------------------------------------------------+
//| Globals                                                          |
//+------------------------------------------------------------------+
string symbol_name= "EURUSD_1" ;
string symbol_path= "" ;
string symbol_origin= "EURUSD" ;
long stop_lvl= 20 ;
long freeze_lvl= 30 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 1) create
   if (!:: SymbolInfoInteger (symbol_name, SYMBOL_CUSTOM ))
     {
       ResetLastError ();
       if (!:: CustomSymbolCreate (symbol_name,symbol_path,symbol_origin))
        {
         PrintFormat ( "Error code: %d" , GetLastError ());
         return INIT_FAILED ;
        }
     }
//--- 2) set levels
   ResetLastError ();
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
//---
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- 1) stop level
   stop_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   if (stop_lvl== 20 )
      stop_lvl= 30 ;
   else
      stop_lvl= 20 ;
   ResetLastError ();
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the stop level: %d" ,
                   GetLastError ());
       return ;
     }
//--- 2) freeze level
   freeze_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL );
   if (freeze_lvl== 30 )
      freeze_lvl= 40 ;
   else
      freeze_lvl= 30 ;
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the freeze level: %d" ,
                   GetLastError ());
       return ;
     }
  }
//+------------------------------------------------------------------+

Artık her şey normal hata ayıklama modunda çalışıyor. Ama Tester'da değil. Orada yazmaya devam ediyor:

 2019.09 . 10 07 : 16 : 49.867 2019.09 . 03 00 : 00 : 00    Error code: 4014