SetLastError ver!!! - sayfa 5

 
vit46 :

Ve bu koşulsuz bir sıfırlama değildir, ancak sadece last_error_fifo == 0 ise, aynı yumurtalar sadece profilde daha kısadır. hataları kontrol etmeden önce işlevin ne döndürdüğünü kontrol edin.

 
Roger :
Bir tema geliştirin.

Sadece sizin için bakın:

OrderSend () işini bitirmek için seçenekler;

1. Hata yok. Hala GetLastError () 'ı çağırıyorsunuz - prensipte, önceki hatanın okunması, işlenmesi ve sıfıra sıfırlanması korkutucu değil.

IMHO - gerekli değil.

2. Bir hata var - GetLastError () çağırırken anladığım kadarıyla , birçoğu olmasına rağmen yalnızca birini analiz ediyorsunuz.

IMHO daha iyi seçenek:

        ticket= OrderSend (symbol,cmd,op_v,ordprice,slippage, 0 , 0 ,comment,magic,expiration,arrow_color);
         if (ticket< 0 )
        {
            err = GetLastError ();
             int err_res = ErrReaction(err);
.........................................

Sonuncusu - ErrReaction(err) - hata işlemedir.

Örneğin şöyle:

 int ErrReaction( int err)
{
     switch (err)
    {
         case ERR_TRADE_NOT_ALLOWED    :
                 Print ( "TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')" );
         case ERR_INVALID_FUNCTION_PARAMSCNT :    
         case ERR_INVALID_FUNCTION_PARAMVALUE :    
         case ERR_INVALID_STOPS        : 
         case ERR_INVALID_TRADE_VOLUME : 
         case ERR_MARKET_CLOSED        : 
         case ERR_TRADE_DISABLED       : 
         case ERR_NOT_ENOUGH_MONEY     : 
                 return (-err);
         case ERR_NO_CONNECTION        :
............................................
         case ERR_BROKER_BUSY          : 
         case ERR_TRADE_CONTEXT_BUSY   : 
..............................
         case ERR_PRICE_CHANGED : 
         case ERR_OFF_QUOTES    : 
         case ERR_REQUOTE       : 
.................................................
         default : break ;
    } //switch(err)
     return ( 0 );
} //int ErrReaction(int err)

işleme işlevi, hataları "kurtarılabilir" ve "kurtarılamaz" olarak ayırır - "kurtarılabilir" çözümleme girişimleri, kurtarılamayan kod geri döner - harici (çağırma) prosedüründe işlenmek üzere.

 
sergeev :



Her neyse, benim hamamböceklerim daha havalı çünkü her bir fonksiyonun ne döndürdüğünü kontrol etmeye gerek yok, bu yüzden kod daha iyi görünüyor ... artı, kendi hata kodlarınızı düzenleyebilirsiniz.
 
vit46 :
Ayrıca, kendi hata kodlarınızı düzenleyebilirsiniz.


bir şekilde kendimize yetecek kadar var.

 
Roger :

Senin mantığına bağlı. Sonuçta , her hatanın işlenmesini yapabilirsiniz , ancak bu durumda yalnızca önemli olanları yapabilirsiniz.

Elbette, en önemli hataların tümünü ele alma işlevine sahip olmak arzu edilir ve daha sonra danışmana gömülü mantık, öncelikleri "düzeltecektir".

Ayrı olarak, sorum konunun ana yönünden sapıyorsa konuyu başlatan kişiden özür dilerim.

 
sergeev :


bir şekilde kendimize yetecek kadar var.



MQL5'in mucitleri, SetUserError'ı bu kadar zorlayanlar için... 65535'e kadar hata kodunu kendilerine ayırmışlar ve yukarıdaki her şey için kendinizinkini düzenleyebilirsiniz :)
 
VladislavVG :

Sadece sizin için bakın:

2. Bir hata var - GetLastError () çağırırken anladığım kadarıyla , birçoğu olmasına rağmen yalnızca birini analiz ediyorsunuz.

IMHO daha iyi seçenek:

Sonuncusu - ErrReaction(err) - hata işlemedir.

Tartışmalı olan bu seçenek. Hatayı sıfırlamazsanız ve OrderSend sonrasında herhangi bir hata olmazsa yine eski hatayı işlemeye devam edersiniz.
 

vit46 :

Ознакомьтесь с этим материалом. imho, не повредит.

https://www.mql5.com/ru/forum/131373

 
charter :

Elbette, en önemli hataların tümünü ele alma işlevine sahip olmak arzu edilir ve daha sonra danışmana gömülü mantık, öncelikleri "düzeltecektir".


Örneğin bir siparişi 5 kez açmaya çalışıp sonra denemeyi bırakmanız yeterli diye düşünüyorum ama siz 20 kere sipariş açmanız gerektiğini veya "kazanana kadar" açmanız gerektiğini düşünebilirsiniz.
 
Roger :

Örneğin bir siparişi 5 kez açmaya çalışıp sonra denemeyi bırakmanız yeterli diye düşünüyorum ama siz 20 kere sipariş açmanız gerektiğini veya "kazanana kadar" açmanız gerektiğini düşünebilirsiniz.

Hayır, hiçbir şeyi saymıyorum. Kendi kesin ve kesin bir fikrim yok, bu yüzden En Değerli hata işleme işlevini önermenizi rica ediyorum.