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

 
Sfinks35 :
Tünaydın!
Şu anda yapılmış gibi görünüyor:

Ancak derlerken bir uyarı veriyor: satırdaki tür dönüşümü nedeniyle olası veri kaybı :
indeks = GetPatt5barsDN(indeks);

İşlev başlığında (ve işlevin kendisinde) derleme hatası yoktur.

 double low3 = 0 ;
   int index = 0 ;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print ( "low3= " , low3);
   Print ( "index= " , index);
 

Selamlar, bir sorum var: optimize ederken bir şekilde belirli bir geçişi atlayabilir miyim?

Örneğin, robotu 2 MA ile optimize ediyorum - her biri için 10'dan başlayıp 1000 ile biten hızlı ve yavaş

Yavaş dönem hızlı dönemden daha kısa olduğunda geçişleri nasıl atlayabilirim?

 
Roman Sharanov :

Selamlar, bir sorum var: optimizasyon yaparken bir şekilde belirli bir geçişi atlayabilir miyim?

Örneğin, robotu 2 MA ile optimize ediyorum - her biri için 10'dan başlayıp 1000 ile biten hızlı ve yavaş

Yavaş dönem hızlı dönemden daha kısa olduğunda geçişleri nasıl atlayabilirim?

Bu durumda, başlatılırken do return(INIT_PARAMETERS_INCORRECT);

 
Igor Zakharov :

Bu durumda, başlatılırken do return(INIT_PARAMETERS_INCORRECT);

Teşekkür ederim

 

Merhaba. Kim söyleyecek. Farklı çiftler üzerinde üç farklı sihirli numaraya sahip üç farklı TS, üç farklı Uzman Danışman. Ancak ortak bir özelliği vardır - belirli koşullara ulaşıldığında (sipariş sayısı ve küçük bir kâr) siparişlerin kapatılması (OrderClose() işlevi aracılığıyla). Test cihazında herhangi bir sorun yok, ancak pratikte, çiftlerden birinde OrderClose() işlevi tetiklendiğinde, bu işlev (OrderClose() ) koşulların karşılanıp karşılanmadığına bakılmaksızın diğer çiftlerde tetikleniyor gibi görünüyor. olumsuzluk. Nedeni ne olabilir? Belki özel bir Kapat() işlevinde?

Aşağıda kapanış koşulları ve özel Close() işlevi verilmiştir.

 if (CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
       int     i;
       int     total    = OrdersTotal ();
       double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
       if ((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for (i = total- 1 ; i >= 0 ; i--)
         {
             if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
            {
               if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
               { 
                   if (OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for (i = total- 1 ; i >= 0 ; i--)
         {
             if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
            {
               if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
               { 
                   if (OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = - 1 ;
   int k      = OrdersTotal ();
   
   for (i = k - 1 ; i >= 0 ; i--)
   {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {
         if ((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if (OrderTicket() != ticket) 
       if (! OrderSelect (ticket, SELECT_BY_TICKET))
         Print ( "Ошибка в выборе ордеров!" );

   while ( true )
   {
       int   error;
       bool result = true ;
      
       if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), Slippage, 0 );
         
       if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), Slippage, 0 );
         
       if (result != TRUE) 
      { 
         error = GetLastError (); 
             Print ( "LastError = " , error); 
      }
       else 
      { 
         error = 0 ; 
      }
       if (error == 135 ) 
         RefreshRates();
       else break ;
   } 
}

 
Youri Lazurenko :

Merhaba. Kim söyleyecek. Farklı çiftler üzerinde üç farklı sihirli numaraya sahip üç farklı TS, üç farklı Uzman Danışman. Ancak ortak bir özelliği vardır - belirli koşullara ulaşıldığında (sipariş sayısı ve küçük bir kâr) siparişlerin kapatılması (OrderClose() işlevi aracılığıyla). Test cihazında herhangi bir sorun yok, ancak pratikte, çiftlerden birinde OrderClose() işlevi tetiklendiğinde, koşulların karşılanıp karşılanmadığına bakılmaksızın diğer çiftlerde bu işlev (OrderClose()) tetikleniyor gibi görünüyor. olumsuzluk. Nedeni ne olabilir? Belki özel bir Kapat() işlevinde?

Aşağıda kapanış koşulları ve özel Close() işlevi verilmiştir.

Önce siparişleri, beklendiği gibi OrderSelect() aracılığıyla numaralandırmaya göre kontrol edersiniz - siparişin sembolünü ve sihirli numarasını kontrol edersiniz ve ardından OrderCloseX()'te siparişleri kapatır ve tekrar siparişler üzerinde yinelersiniz, ancak bir nedenden dolayı kontrol etmezsiniz. OrderSelect() içindeki sembol ve sihirli sayı

Kodun tamamını yeniden yazmamak için OrderCloseX() öğesine eklemeniz gerektiğini düşünüyorum:

 if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
 
Igor Makanu :

Önce siparişleri, beklendiği gibi OrderSelect() aracılığıyla numaralandırmaya göre kontrol edersiniz - siparişin sembolünü ve sihirli numarasını kontrol edersiniz ve ardından OrderCloseX()'te siparişleri kapatır ve tekrar siparişler üzerinde yinelersiniz, ancak bir nedenden dolayı kontrol etmezsiniz. OrderSelect() içindeki sembol ve sihirli sayı

Kodun tamamını yeniden yazmamak için OrderCloseX() öğesine eklemeniz gerektiğini düşünüyorum:

Teşekkür ederim. düzelteceğim. Zaten düzeltildi. Belki de sebep budur - çiftlerden birinde OrderCloseX () işlevinin çağrıldığı ve daha sonra diğer tüm çiftler ve büyüler üzerinde çalıştığı ortaya çıktı. Olabilir, olabilir. Tekrar teşekkürler.

 
Igor Makanu :

Rakamlar - Önceden tanımlanmış değişkenler

Ben de bu işlevi kullanmaya karar verdim, okudum ki ofisteki karakter sayısı 5 ise örneğin 1.00000 ve son değerler sıfır ise 5 karakter değil sıfır dönebilir veya örneğin , sayı bu şekilde görünecek 1.24700 3 ondalık basamak döndürecek, 5 tane olması gerektiği halde doğru mu?

 
Seric29 :

Ben de bu işlevi kullanmaya karar verdim, okudum ki ofisteki karakter sayısı 5 ise örneğin 1.00000 ve son değerler sıfır ise 5 karakter değil sıfır dönebilir veya örneğin , sayı bu şekilde görünecek 1.24700 3 ondalık basamak döndürecek, 5 tane olması gerektiği halde doğru mu?

Rakamlar NormalizeDouble ile kullanılır

https://docs.mql4.com/en/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
Birdenbire, tüm terminaller brokerlerle temasını kaybetti. Her yerde bağlanılamadı hatası.
Giriş penceresinde sunucu seçim yapmanıza izin vermiyor, boş. Ondan önce hiçbir yerde hiçbir şeyi değiştirmedim, hiçbir şey yüklemedim ve hiçbir şeyi silmedim.
Sebebi ne?