Otomatik doğrulayıcı - sorunlar

 

EA sürümünü güncellemeye çalışıyorum ve bir hata alıyorum.

Strateji test cihazında aynı Uzman Danışman.


Aynı zamanda MT4 için danışmanlar yazıyorum, orada her şey yolunda. 4 ve 5 için Uzman Danışmanların kodu aynıdır, yalnızca içerme dosyasında farklılık gösterirler (4 ve 5 için farklıdırlar).

Bu danışman en son Ocak ayında güncellendiğinde - her şey yolundaydı.

Program sürümü - MetaTrader 5 x64 build 2025 başladı (MetaQuotes Software Corp.)

-Terminal Windows 10 (derleme 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Bellek: 1866 / 3967 Mb, Disk: 5/35 Gb, GMT+3

 
Uladzimir Kirychenka :

EA sürümünü güncellemeye çalışıyorum ve bir hata alıyorum.

Strateji test cihazında aynı EA.


Aynı zamanda, MT4 için danışmanlar yazıyorum, orada her şey yolunda. 4 ve 5 için Uzman Danışmanların kodu aynıdır, yalnızca içerme dosyasında farklılık gösterirler (4 ve 5 için farklıdırlar).

Bu danışman en son Ocak ayında güncellendiğinde - her şey yolundaydı.

Program sürümü - MetaTrader 5 x64 build 2025 başladı (MetaQuotes Software Corp.)

-Terminal Windows 10 (derleme 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Bellek: 1866 / 3967 Mb, Disk: 5/35 Gb, GMT+3

Aptalca oynayın ve 1$ veya 100500 lot yatırın ve takas olup olmayacağını görün. Ve sadece bir aptalın bu tür parametreleri ayarlayabileceğine dair bildirimler olacak mı?

 
Alexey Viktorov :

Aptalca oynayın ve 1$ veya 100500 lot yatırın ve takas olup olmayacağını görün. Ve sadece bir aptalın bu tür parametreleri ayarlayabileceğine dair bildirimler olacak mı?

Aynı sorun. Denedim - yardımcı olmuyor). 13 Nisan'dan beri güncelleme yapamıyorum. Her şeyi ve her şeyi kontrol etmekle yaparsanız - tüm semboller için bir "ticaret işlemi yoktur" yazısı çıkar. Çekler olmadan bir hata oluşur - bir pozisyon açmak için yeterli fon yoktur. Ve MT4'ün yanı sıra TS'nin yazarının sürümü de sorunsuz bir şekilde güncellendi.

123

Rakam minimum lotu gösteriyor - 2000, bakiye 10000, açmak için açıkça yeterli değil, en azından yeterli para olmadığını kontrol edin, en azından bahis yapmayın. Hala testi geçmiyor.

Ve bu gibi durumlarda ne yapmalı?

 

Elbette pazarlık olmayacak. Bildirimler ne olmalı? Yalnızca lot boyutu SYMBOL_VOLUME_MIN ve SYMBOL_VOLUME_MAX aralığına dahil değilse OnInit'te var, ardından INIT_PARAMETERS_INCORRECT başlatma hatası

 
Uladzimir Kirychenka :

Elbette pazarlık olmayacak. Bildirimler ne olmalı? Yalnızca lot boyutu SYMBOL_VOLUME_MIN ve SYMBOL_VOLUME_MAX aralığına dahil değilse OnInit'te var, ardından INIT_PARAMETERS_INCORRECT başlatma hatası

Benim için de aynı olduğunu hatırlıyorum sonra moderatörler arabadan sonra kontrol ettiler. kontrol eder. Yanlış parametreler durumunda OnInit, INIT_PARAMETERS_INCORRECT koduyla aynı şeyi tamamladı. Ve otomatik. çek, takas olmadığı için aynı hatayı verdi. Bu yüzden moderatör bana OnInit()'i bu kodla tamamlamamamı, sadece bir Uyarı vermemi tavsiye etti.

 

Muhtemelen ayda bir, birileri bu soruyu soruyor. Bir kez daha.

Mesele şu ki, ticaret yaparken (gerçek hayatta), sadece bakiyenin büyüklüğü değil, aynı zamanda partinin büyüklüğü de değişebilir.

Ve test sırasında depozitin boyutu (1'den 10.000.000'a kadar) veya lotun (1.000.000'den 0.01'e) değişebilir.

Bu nedenle, bu kontroller OnInit'te bir kez değil, sürekli olarak, bir döngüde (örneğin, OnTick'te) yapılmalıdır.

Log taşması olmaması için bir uyarı (Mesaj Yazdır veya Uyarı) sadece bir kez görüntülenmelidir.

 
Uladzimir Kirychenka :

Elbette pazarlık olmayacak. Bildirimler ne olmalı? Yalnızca lot boyutu SYMBOL_VOLUME_MIN ve SYMBOL_VOLUME_MAX aralığına dahil değilse OnInit'te var, ardından INIT_PARAMETERS_INCORRECT başlatma hatası

Aptal gibi davranmanın çok zor olduğunu anlıyorum ama bu beceri bazen yardımcı oluyor. Tekrar deneyin. Hesabına bir danışman, 1 dolar koydun, 100500 dolar koydun ve bekle... Bir gün, bir saniye, üçüncü bir bekledin... sonra kızmaya başlıyorsun, "Ne için ödedim. Neden vermiyorsun? Bu bok işe yaramıyor mu?" ve kimse bir şey demiyor, kimse "Sen salaksın... Forex piyasasında böyle bir mevduatla çalışamazsın. Sadece bir aptal 100500 koyabilir" gibi bir şey söylemek istemiyor... Bir şey bunun gibi.

 
Petros Shatakhtsyan :

Muhtemelen ayda bir, birileri bu soruyu soruyor. Bir kez daha.

Mesele şu ki, ticaret yaparken (gerçek hayatta), sadece bakiyenin büyüklüğü değil, aynı zamanda partinin büyüklüğü de değişebilir.

Ve test sırasında depozitin boyutu (1'den 10.000.000'a kadar) veya lotun (1.000.000'den 0.01'e) değişebilir.

Bu nedenle, bu kontroller OnInit'te bir kez değil, sürekli olarak, bir döngüde (örneğin, OnTick'te) yapılmalıdır.

Log taşması olmaması için bir uyarı (Mesaj Yazdır veya Uyarı) sadece bir kez görüntülenmelidir.

Son derece basit kod - ve doğrulamayı geçemez. Listelediğiniz koşulları karşılıyor gibi görünüyor.

 void OnTick ()
  {
   ENUM_POSITION_TYPE PosType= POSITION_TYPE_SELL ;
   MqlTradeRequest request;
   MqlTradeResult result;
   MqlTradeCheckResult check;
   ZeroMemory (request);
   ZeroMemory (result);
   ZeroMemory (check);
   long digit;
   double point,Bid;
   SymbolInfoDouble ( _Symbol , SYMBOL_BID ,Bid);
   request.type   = ORDER_TYPE_SELL ;
   request.price  = Bid;
   request.action = TRADE_ACTION_DEAL ;
   request.symbol = _Symbol ;
   request.volume = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
   request.sl= 0 ;
   request.tp= 0 ;
   request.deviation= 10 ;
   request.magic= 55555 ;
   request.comment= NULL ;
   request.type_filling= 0 ;
   if ( PositionsTotal ()== 0
   &&CheckMoneyForTrade( _Symbol , SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ), ORDER_TYPE_SELL )== true
   ){
   OrderSend (request,result);
   } else {
      ExtExpert.Deinit();
       return ;
   }
  }
   bool CheckMoneyForTrade( string symb, double lots, ENUM_ORDER_TYPE type)
  {
//--- получим цену открытия
   MqlTick mqltick;
   SymbolInfoTick (symb,mqltick);
   double price=mqltick.ask;
   if (type== ORDER_TYPE_SELL )
      price=mqltick.bid;
//--- значения необходимой и свободной маржи
   double margin,free_margin= AccountInfoDouble ( ACCOUNT_MARGIN_FREE );
   //--- вызовем функцию проверки
   if (! OrderCalcMargin (type,symb,lots,price,margin))
     {
       //--- что-то пошло не так, сообщим и вернем false
       Print ( "Error in " , __FUNCTION__ , " code=" , GetLastError ());
       return ( false );
     }
   //--- если не хватает средств на проведение операции
   if (margin>free_margin)
     {
       //--- сообщим об ошибке и вернем false
       Print ( "Not enough money for " , EnumToString (type), " " ,lots, " " ,symb, " Error code=" , GetLastError ());
       return ( false );
     }
//--- проверка прошла успешно
   return ( true );
  }
para çeki ile - çek olmadan ticaret işlemi yok - yeterli para yok
 
Petros Shatakhtsyan :

Muhtemelen ayda bir, birileri bu soruyu soruyor. Bir kez daha.

Mesele şu ki, ticaret yaparken (gerçek hayatta), sadece bakiyenin büyüklüğü değil, aynı zamanda partinin büyüklüğü de değişebilir.

Ve test sırasında depozitin boyutu (1'den 10.000.000'a kadar) veya lotun (1.000.000'den 0.01'e) değişebilir.

Bu nedenle, bu kontroller OnInit'te bir kez değil, sürekli olarak, bir döngüde (örneğin, OnTick'te) yapılmalıdır.

Log taşması olmaması için bir uyarı (Mesaj Yazdır veya Uyarı) sadece bir kez görüntülenmelidir.

Bu kontroller (LotMin, LotMax, LotNormalizeStep, bakiye kontrolü, OrderCheck) her pozisyon açıldığında yapılır. Ve OnInit'te sadece parti kontrol edilir. OnInit'teki bakiye kontrol mantığını hayal edemiyorum.

Not: Uyarı, Doğrulayıcı hatalarından kaydedilmez (((((((((((((((((((((((((

 
Uladzimir Kirychenka :

Bu kontroller (LotMin, LotMax, LotNormalizeStep, bakiye kontrolü, OrderCheck) her pozisyon açıldığında yapılır. Ve OnInit'te sadece parti kontrol edilir. OnInit'teki bakiye kontrol mantığını hayal edemiyorum.

Not: Uyarı, Validator hatalarından kaydedilmez (((((((((((((((((((((((((((((((

Doğrulayıcıda hata yok :)

Doğrulayıcı bir kez daha sağlanan kodda

  • tam kontrol yok
  • hata işleme yok
Doğrulayıcı, sözde kod yazarının kendisini hiçbir zaman kullanıcının yerine koymadığını gösterir.

 
Vladimir Karputov :

Doğrulayıcıda hata yok :)

Doğrulayıcı bir kez daha sağlanan kodda

  • tam kontrol yok
  • hata işleme yok
Doğrulayıcı, sözde kod yazarının kendisini hiçbir zaman kullanıcının yerine koymadığını gösterir.

))

Neden: