İşkence hatası ticaret işlemi yok - sayfa 14

 
Maxim Kuznetsov :

Stop Out ile ne olacağını düşünün. (zaten bir Teminat Çağrınız var, dokunma her zamankinden daha yakın)

anlaşmanız zorla kapatılacak, ancak böyle bir seçeneği görmezden geleceksiniz ve her tıkta (tarihte, bu uzun bir zaman) üzerine tırmanacak ve yanlış siparişler göndereceksiniz.

Sadece "MQL programlamasında 10 yıldan fazla deneyime" sahip olan herkes için eklemek için

Bir şey olacaksa mutlaka olur.

Stop Out ve Margin Call tam olarak normal değil, doğaldır ve danışman bunlara hazır olmalıdır.

Ticaret koşulları değişebilir, sabit değildir. StopLevel atlar ve hatta omuz bile bazen değişir.

Kullanıcı, istemeden de olsa, bir anlaşmayı kolayca Durdur/Al veya kapat ayarlayabilir/değiştirebilir veya kapatabilir - danışman buna tepki vermelidir

Kullanıcı, Expert Advisor's Magic ile bir siparişi açabilir/kapatabilir (veya yanlışlıkla Magic=0 ayarlayıp "eller" takas edebilir) - robot ne yapacak?

Bakiye, danışmanı yeniden başlatmadan yenilenir / kaldırılır - robotun bunu yapabilmesi son derece önemlidir (son zamanlarda bir konu vardı - bir kişi gerçekten para kaybetti)

Terminal uzun süre yeniden başlatılabilir ve güncellenebilir veya bağlantı önemli bir süre için kaybolabilir - tüm bunlar ve çevrimdışı olan her şey dikkate alınmalıdır.

Doğrulayıcı, "aday minimumunun" yalnızca %1-2'sini kontrol edecek ve insanlar hala şikayet ediyor...

 
Renat Akhtyamov :

sırayla yazılmış gibi görünüyor, soru cevaptır

tüm tema sayfaları mevcuttur

Renat, siparişleri saydığını anlıyorum. anlamadım neden?


Maksim Kuznetsov :

Sadece "MQL programlamada 10 yıldan fazla deneyime" sahip olan herkes için eklemek için

Bir şey olacaksa mutlaka olur.

Stop Out ve Margin Call tam olarak normal değil, doğaldır ve danışman bunlara hazır olmalıdır.

Ticaret koşulları değişebilir, sabit değildir. StopLevel atlar ve hatta bazen omuz değişir.

Kullanıcı, istemeden de olsa, bir anlaşmayı kolayca Durdur/Al veya kapat ayarlayabilir/değiştirebilir veya kapatabilir - danışman buna tepki vermelidir

Kullanıcı, Expert Advisor's Magic ile bir siparişi açabilir/kapatabilir (veya yanlışlıkla Magic=0 ayarlayıp "eller" takas edebilir) - robot ne yapacak?

Bakiye, danışmanı yeniden başlatmadan yenilenir / kaldırılır - robotun bunu yapabilmesi son derece önemlidir (son zamanlarda bir konu vardı - bir kişi gerçekten para kaybetti)

Terminal uzun süre yeniden başlatılabilir ve güncellenebilir veya bağlantı önemli bir süre için kaybolabilir - tüm bunlar ve çevrimdışı olan her şey dikkate alınmalıdır.

Doğrulayıcı, "aday minimumunun" yalnızca %1-2'sini kontrol edecek ve insanlar hala şikayet ediyor...

Maxim, neden bahsediyorsun?! Stop out ile ne yapacağım konusunda tavsiye istedim. Forumu 6. sayfadan okuyun bence sorumu çok detaylı bir şekilde ifade etmişimdir.

 
Andrey Kaunov :

Renat, siparişleri saydığını anlıyorum. anlamadım neden?


Maxim, neden bahsediyorsun?! Stop out ile ne yapacağım konusunda tavsiye istedim. Forumu 6. sayfadan okuyun bence sorumu çok detaylı bir şekilde ifade etmişimdir.

çünkü gerçek biletler 0 değil,,,,N

 
Ah, benim küçük kodumdan bahsediyorsun. Yani ne tür biletlerin olduğu önemli değil. Renat ayrıca iki boyutlu bir dizidir. [0] hücresine bir bilet yazar ve [1] hücresine siparişleri sayar. Farklı değişkenler yapmak mümkündü ama ben böyle bir şeye karar verdim.
 
Andrey Kaunov :

Renat, siparişleri saydığını anlıyorum. anlamadım neden?


Maxim, neden bahsediyorsun?! Stop out ile ne yapacağım konusunda tavsiye istedim. Forumu 6. sayfadan okuyun bence sorumu çok detaylı bir şekilde ifade etmişimdir.

Peki, 10 yıllık tecrübenle, peki, ne tavsiye edebilirim ... ama prensipte hiçbir şey :-)

tüm tavsiyeleri görmezden geliyorsunuz ve danışmanınız için doğrulayıcıyı düzeltmeyi talep ediyorsunuz

---

NZDUSD için stopout yaptınız, emir kapattınız, danışmanınızın mantığı kabarık, yine de seçip OrderClose gönderiyorsunuz, yanlış alıyorsunuz. Her tikte muhteşem işlemi tekrarlıyorsunuz, her şey yavaşlıyor ve çek iptal oluyor. Ve bu en basitidir.

ticaret koşullarını kontrol etme hakkında - önceki 14 sayfaya bakın

 
Andrey Kaunov :

Şu yazınıza dikkat edin:

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

Bir hata ile eziyet ticaret işlemleri yoktur

Andrey Kaunov , 2020.07.25 11:42

Renat, tavsiyen için teşekkürler, deneyeceğim.

Vladimir, konuyu yapıcı bir şekilde anlayabiliyor musun?! Partiyi marj ve benzeri şeyler için kontrol etmiyor muyum? "Hangi çekler geçmeli ..." makalesi ile benim için zaten bir İncil gibi. Yukarıda yayınlanan kod parçacıkları. Tam uyumluluk için, makaledeki önerilerinize göre kodu değiştirdim:

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots( string symbol, double lot, int direction, bool is_margin= true ) {
   if (lot<= 0 ) return ( 0.0 );
   RefreshRates();
   double min= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   double max= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   double step= SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP ); 
   //double free = AccountFreeMargin()*0.95;
   //double margin = MarketInfo(symbol,MODE_MARGINREQUIRED);
   double _lot=lot<min?min:(lot>max?max:lot);
          _lot= MathRound (_lot/step)*step;
   //if(is_margin && _lot*margin>free)  _lot=0.0;
   ResetLastError ();
   if (is_margin && ( AccountFreeMarginCheck( Symbol (),direction,_lot)<= 0 || GetLastError ()== 134 )) _lot= 0.0 ;
   return (_lot);
}

Ama yine de "takas yok" alıyorum:

Eh, işlev her zaman çok fazla 0.0 gönderiyorsa ve böylece anlaşmaların açılmasını engelliyorsa, minimum lotu gönderecek şekilde değiştiririm:

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots( string symbol, double lot, int direction, bool is_margin= true ) {
   if (lot<= 0 ) return ( 0.0 );
   RefreshRates();
   double min= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   double max= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   double step= SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP ); 
   //double free = AccountFreeMargin()*0.95;
   //double margin = MarketInfo(symbol,MODE_MARGINREQUIRED);
   double _lot=lot<min?min:(lot>max?max:lot);
          _lot= MathRound (_lot/step)*step;
   //if(is_margin && _lot*margin>free)  _lot=0.0;
   ResetLastError ();
   if (is_margin && (AccountFreeMarginCheck( Symbol (),direction,_lot)<= 0 || GetLastError ()== 134 )) _lot= min ;
   return (_lot);
}

Ve işlemlerin devam ettiğine dair bir hikaye alıyorum (aşağıdaki ekran görüntülerine bakın). Ancak minimum lot elbette çok garip, ama gelsin. Ama anlaşmalar var!

Bu durumda, doğrulayıcı çok garip davranır ve 1 $ depozito ile minimum 0,2 lot yapar.


Doğal olarak, bu yaklaşımla anlaşma olmayacak! Ve bu tamamen yeterli kodla. Bu arada, test için göstergeler vb. için tüm koşulları kaldırdım. Danışmanın göreve başlamasından hemen sonra işlemler açılmaya başlar.

Peki bir doğrulayıcı ne yapar?! Şimdiye kadar sadece programcıların beynini patlatmak için görüyorum!

Doğrulayıcıdaki bir şeyi değiştirmenizi istemediğimi unutmayın. Sadece test günlüklerini görebiliriz. Daha sonra testlerin hangi parametrelerle, hangi mevduatlar üzerinde geçtiği netleşecektir. Sonunda, baskılar en azından koddaki hatanın nerede olduğunu izleyebilir ve hızlı bir şekilde düzeltebilir. Parmağınızı bir hafta boyunca gökyüzüne doğrultmak yerine, yalnızca hatayı lokalize etmeye çalışın. Birbirimize karşı çalışmıyoruz! Anlıyorum, birlikte bir şeyler kazanmaya çalışıyoruz.

İlk ekran görüntüsünüz. NZDUSD'de alım satım işlemi olmadığı mesajına eklendiniz. Ve 14 sayfadır bu yel değirmeniyle savaşıyorsunuz.

Ve ilk ekrandaki ana hata hiç de bu değil. Ve GBPUSD üzerinde çok uzun testler hakkında sizi bilgilendiren. Tam olarak, oradaki testinizin çok uzun sürmesi nedeniyle, doğrulayıcı zaman aşımı ile kesintiye uğradı.

GBPUSD, M30 üzerinde kod profil oluşturucuyu çalıştırın ve üç saat boyunca işlem yapmasına izin verin. Ardından, darboğazlara bakın ve bunları düzeltin.

 
Maxim Kuznetsov :


---

NZDUSD için stopout yaptınız, emir kapattınız, danışmanınızın mantığı kabarık, yine de seçip OrderClose gönderiyorsunuz, yanlış alıyorsunuz. Her tikte muhteşem işlemi tekrarlıyorsunuz, her şey yavaşlıyor ve çek iptal oluyor. Ve bu en basitidir.

ticaret koşullarını kontrol etme hakkında - önceki 14 sayfaya bakın

Maxim, kodu çok dikkatsiz okudun.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   gl_lots= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
   gl_ask= NormalizeDouble (Ask, _Digits );
   gl_bid= NormalizeDouble (Bid, _Digits );
   gl_comm= "test" ;
//---
   if (AccountFreeMarginCheck( _Symbol ,OP_BUY,gl_lots)<= 0 || GetLastError ()== 134 ) {
       printf ( "Not enough money for the minimum lot: %.4f" ,gl_lots); 
       return ;
   }
   if (test_ticket[ 1 ]< 8 && test_ticket[ 0 ]== 0 ) {
      test_ticket[ 0 ]= OrderSend (( StringCompare ( _Symbol , "NZDUSD" )== 0 ? "NZDUSD" : _Symbol ),OP_BUY,gl_lots,gl_ask, 30 , 0.0 , 0.0 ,gl_comm, 33333 , 0 , clrNONE );
       if (test_ticket[ 0 ]> 0 ) test_ticket[ 1 ]++;
       else if (Fun_Error( GetLastError ())== 1 ) return ; 
   }   
   if (test_ticket[ 0 ]> 0 )
       if ( OrderSelect (test_ticket[ 0 ],SELECT_BY_TICKET)) {
         if ( OrderCloseTime()== 0 && OrderOpenTime()+ 300 < TimeCurrent ())
             if (OrderClose(test_ticket[ 0 ],OrderLots(),gl_bid, 30 , clrNONE )) {
               printf ( "Test order closed, ticket #%d" ,test_ticket[ 0 ]);
               test_ticket[ 0 ]= 0 ;
            } else if (Fun_Error( GetLastError ())== 1 ) return ;
      } else if (Fun_Error( GetLastError ())== 1 ) return ;
}

Marker tarafından belirtilen koşul, OrderClose() işlevine gitmenize izin vermez, eğer emir kapalıysa, bu ilkidir. İkinci olarak, NZDUSD için en az bir emir açılmışsa, doğrulayıcı "işlemsiz işlem" döndürmez.

Artyom Trishkin :

...

GBPUSD, M30 üzerinde kod profil oluşturucuyu çalıştırın ve üç saat boyunca işlem yapmasına izin verin. Ardından, darboğazlara bakın ve bunları düzeltin.

Tamam, Artyom. Deneyeceğim.

 
Andrey Kaunov :

Maxim, kodu çok dikkatsiz okudun.

İşaretçi tarafından belirtilen koşul, OrderClose() işlevine gitmenize izin vermez, bu ilkidir. İkinci olarak, NZDUSD için en az bir emir açılmışsa, doğrulayıcı "işlemsiz işlem" döndürmez.


Dürüst olmak gerekirse, çarpık kodun hata ayıklayıcısı olarak hareket etmekten ve yazarın özgüvenini aşmaya çalışmaktan bıktım. Hatalar var, kendin ara

"deneyimi" atın ve danışmanı kendinize göre yeniden yazın, böylece onu önemli bir kişisel hesaba koymak korkutucu olmaz. doğrulayıcı

 
Evet, senden kişisel olarak herhangi bir hata ayıklamanı istemiyorum Maxim. Eğri kodu, mükemmel, ancak doğrulamayı geçen o . Soru tamamen farklı.
 
Artyom Trishkin :

...

GBPUSD, M30 üzerinde kod profil oluşturucuyu çalıştırın ve üç saat boyunca işlem yapmasına izin verin. Ardından, darboğazlara bakın ve bunları düzeltin.

Artyom, darboğaz profilini göstermedi. Tüm kodlar, patolojik olarak uzun süreçler olmaksızın sorunsuz çalışır.

Ve bu hikayenin sonu şudur. Kanca veya dolandırıcı tarafından, yine de doğrulamayı geçtim. Hiç koda bağlı değildir (eğer doğruysa, makalede belirtilen bariz hatalar olmadan). Doğrulayıcının nasıl çalıştığı, görünüşe göre yalnızca yaratıcısı tarafından biliniyor. Kod, üçüncü kez 2 kez sonra testi geçer. Bazen birkaç kez üst üste oluyor bazen olmuyor. Ayrıca, yalnızca giriş parametrelerini değiştiririm (önemli değil) veya yeniden düzenlerken hiçbir şeyi değiştirmeyen satırları yeniden düzenlerim veya genellikle yorumları silerim veya eklerim (bu, çalışma dosyasını hiç etkilememelidir).

Genel olarak, doğrulamayı geçip geçmemeniz, yalnızca doğrulayıcının "ruh durumuna" bağlıdır (ağdaki voltaj, bir tür enerji akışı veya başka herhangi bir şey). Aynı zamanda, aklı başında parametrelere sahip sıradan bir test cihazındaki kod, hiçbir çift ve TF'de asla kapanmadı ve herhangi bir hata vermedi.