MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1578

 
MakarFX :

Versuchen Sie es (ich habe es nicht getestet)

Teşekkürler, daha sonra kontrol edeceğim.

 
Eugen8519 :



İşlevi doğru şekilde konumlandırmaya yardımcı olun

...

Ama nasıl ve nereye eklenecek

Durdurma kaybına ulaşıldığında mesaj almak veya   profesyonel al ?


MakarFX :

Aynı şeyden mi bahsediyoruz?

OnTradeTransaction kullanarak SL ile çıkışı izleyen bir örnek buldum: https://www.mql5.com/en/code/21147 .

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

İki farklı cihazda aynı Uzman Danışman

Merhaba! Lütfen anlamak için yardım edin.

Sürüklendiği çizelge üzerinde çalışan bir Expert Advisor vardır ( Simge() değeri, çalışan enstrümanın adı olarak alınır).

Ancak bu EA aynı zamanda verilen siparişin biletini içeren ticket_exist değişkenine de sahiptir ve EA, eğer ticket_exist sıfıra eşit değilse, siparişin burada ayarlandığını anlar.

Soru: Böyle bir Expert Advisor'ı iki farklı enstrümanda açarsam ve bir enstrümanda ticket_exist değişkeni sıfırdan farklı olursa, diğer enstrümanda aynı isimli değişken sıfıra eşit kalır mı?

SU.

 
Mihail Nefedov :

İki farklı cihazda aynı Uzman Danışman

Merhaba! Lütfen anlamak için yardım edin.

Sürüklendiği çizelge üzerinde çalışan bir Expert Advisor vardır ( Simge() değeri, çalışan enstrümanın adı olarak alınır).

Ancak bu EA aynı zamanda verilen siparişin biletini içeren ticket_exist değişkenine de sahiptir ve EA, eğer ticket_exist sıfıra eşit değilse, siparişin burada ayarlandığını anlar.

Soru: Böyle bir Expert Advisor'ı iki farklı enstrümanda açarsam ve bir enstrümanda ticket_exist değişkeni sıfırdan farklı olursa, diğer enstrümanda aynı isimli değişken sıfıra eşit kalır mı?

SU.

Bir Uzman Danışmandaki bir değişkenin değeri, başka bir Uzman Danışman tarafından kullanılamaz. Ana şey, sembollerin veya sihirlerin veya her ikisinin de farklı olmasıdır.

 

Kenelerde zaman nedir? Sunucu zamanı mı yoksa UTC mi?

Bir yerde okuduğumu hatırlıyorum ama nerede olduğunu hatırlayamıyorum...

 
Alexey Viktorov :

Bir Uzman Danışmandaki bir değişkenin değeri, başka bir Uzman Danışman tarafından kullanılamaz. Ana şey, sembollerin veya sihirlerin veya her ikisinin de farklı olmasıdır.

Sayesinde! Doğru anlarsam, farklı semboller üzerinde çalışan Uzman Danışmanların (iki kesinlikle aynı olan) çakışmasını sağlamak için, değişkenlerini global (tüm terminal için) veya örneğin, bir siparişe seri olarak erişmeniz gerekir. sayı mı yoksa sadece varlığıyla mı?

 
MakarFX :

Bunu dene (kontrol etmedim)

çalışmıyor, derleme hataları veriyor


sonra bunu denedim sorunsuz derleniyor ama piyasa kapanınca test edemiyorum

yarın bitireceğim

   void OnTradeTransaction ( const MqlTradeTransaction &trans,
                           const MqlTradeRequest &request,
                           const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       long      deal_entry        = 0 ;
       string    deal_symbol       = "" ;
       long      deal_magic        = 0 ;
       long      deal_reason       =- 1 ;
       if ( HistoryDealSelect (trans.deal))
        {
         deal_entry= HistoryDealGetInteger (trans.deal, DEAL_ENTRY );
         deal_symbol= HistoryDealGetString (trans.deal, DEAL_SYMBOL );
         deal_magic= HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
         deal_reason= HistoryDealGetInteger (trans.deal, DEAL_REASON );
        }
       else
         return ;

       if (deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if (deal_entry== DEAL_ENTRY_OUT )
           {
             if (deal_reason== DEAL_REASON_SL )
               SendNotification ( "Закрыл  позицию > StopLoss" );

             if (deal_reason== DEAL_REASON_TP )
               SendNotification ( "Закрыл  позицию > TakeProfit" );
           }
       }
  }
Dosyalar:
x4.PNG  11 kb
 
Eugen8519 :

çalışmıyor, derleme hataları veriyor


sonra bunu denedim sorunsuz derleniyor ama piyasa kapanınca test edemiyorum

yarın bitireceğim

kodu yanlış girdiniz !

biraz düzeltildi, her şey çalışıyor (kontrol ettim)

   datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit ()
  {
   lastclouse= TimeCurrent ();
   .....
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (LastClouseProfit()!= EMPTY_VALUE )
     {
       SendNotification (LastClouseProfit()); lastclouse= TimeCurrent ();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket= 0 ;
   double profit= EMPTY_VALUE ;
   HistorySelect (lastclouse, TimeCurrent ());
   uint total= HistoryDealsTotal (); 
   for ( uint i= 0 ;i<total;i++) 
     { 
       if ((ticket= HistoryDealGetTicket (i))> 0 ) 
        { 
         profit+= HistoryDealGetDouble (ticket, DEAL_PROFIT ); 
        }
     } 
   return (profit);
  }
//+------------------------------------------------------------------+
 
MakarFX :

kodu yanlış girdiniz !

biraz düzeltildi, her şey çalışıyor (kontrol ettim)

Burada, anlaşmanın tam olarak SL veya TP tarafından kapatıldığını da takip etmeniz gerekiyor. Ve OnTradeTransaction'ın yardımıyla, anlaşma kapandıktan hemen sonra hazır verileri alıyoruz.

 double LastClouseProfit()
  {
   ulong ticket= 0 ;
   double profit= EMPTY_VALUE ;
   HistorySelect (lastclouse, TimeCurrent ());
   uint total= HistoryDealsTotal (); 
   for ( uint i= 0 ;i<total;i++) 
     { 
       if ((ticket= HistoryDealGetTicket (i))> 0 ) 
        { 
         profit= HistoryDealGetDouble (ticket, DEAL_PROFIT ); 
        }
     } 
   return (profit);
  }

TimeCurrent tarafından birden fazla anlaşma kapatılırsa, hangi sonucun döndürülmesi gerekir?... Ve bir kârın varlığı, anlaşmanın SL veya TP tarafından kapatıldığı anlamına gelmez. Dediğim gibi bunun izlenmesi gerekiyor. Bu yüzden OnTradeTransaction'ı kullanmak en kolay çözümdür!

 
Mihail Matkovskij :

Burada, anlaşmanın tam olarak SL veya TP tarafından kapatıldığını da takip etmeniz gerekiyor.

İşlemin kapanmasıyla ilgili bir bildirime ihtiyacınız olduğunu anlıyorum, belki ben yanlış anladım...

Michael Matkovskij :

TimeCurrent tarafından birden fazla anlaşma kapatılırsa, hangi sonucun döndürülmesi gerekir?

bilmiyorum kontrol etmem lazım