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

 

Göstergenin maksimum ve minimum değerleri nasıl boşaltılır? Örneğin, maksimum 100 ve minimum 0 ayarlanmışsa ve ardından her şeyi görselleştirmek için göstergeye ihtiyacınız varsa, o zaman nasıl organize edilir? Gerçek şu ki, birinde maksimum ve minimum kullandığım birkaç modlu bir gösterge yazıyorum, ancak modu değiştirdikten sonra, giriş parametrelerinde maksimum 100 ve minimum 0 kalıyor


MQL5

 
Alekseu Fedotov :

Sapma(Kanal) işlevi tarafından döndürülen değeri Zarflar( ........ ) işlevini zaten çağırdınız ve ilettiniz.

ve Zarflar( ........ ) işlevinin kendisinde, son parametre, bu değeri alacak bir değişken bildirir


bunun gibi bir şey

Teşekkürler, şimdi daha net.

 

Tavsiyenize göre MT5 kodunu biraz yeniden düzenledim, şöyle çıktı:

 input    string Parametrs_Indicator       = "Настройки Индикатора" ; // Настройки Индикатора

input    ENUM_TIMEFRAMES    Time_Frames    = PERIOD_M5 ;             // Временной период
       int                 Ma_Period     = 120 ;                   // Период
       int                 Ma_Shift      = 0 ;                     // Cдвиг средней
       ENUM_MA_METHOD      Ma_Method     = MODE_SMMA ;             // Mетод усреднения
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE ;           // Tип цены
//************************************************************************************************/
void OnTick ()
{
//---------------------------------------------------
   double Signal_Sell = Envelopes( 0 , Deviation( 1 )); // Сигнал на Продажу
   Print ( "Signal_Sell = " , Signal_Sell);
     if (Signal_Sell < 0 ) { Print ( "Signal_Sell error #" , GetLastError ()); }
   double   Signal_Buy = Envelopes( 1 , Deviation( 1 ));   // Сигнал на Покупку
   Print ( "Signal_Buy = " , Signal_Sell);
     if (Signal_Buy < 0 ) { Print ( "Signal_Buy error #" , GetLastError ()); }
//---------------------------------------------------
   double Signal_Sell_2 = Envelopes( 0 , Deviation( 2 ));
   Print ( "Signal_Sell_2 = " , Signal_Sell);
       if (Signal_Sell_2 < 0 ) { Print ( "Signal_Sell_2 error #" , GetLastError ()); }
   double   Signal_Buy_2 = Envelopes( 1 , Deviation( 2 ));
   Print ( "Signal_Buy_2 = " , Signal_Sell);
       if (Signal_Buy_2 < 0 ) { Print ( "Signal_Buy_2 error #" , GetLastError ()); }
//---------------------------------------------------
}
//************************************************************************************************/
double Envelopes( int buff, double _Deviation)
{
   double buf[ 1 ];
   int handle= iEnvelopes ( Symbol (), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, _Deviation);
   if (handle< 0 )
   {
     Print ( "Failed to create handle iEnvelopes, Error: " , GetLastError ());
     return ( WRONG_VALUE );
   } else
   {
     if ( CopyBuffer (handle,buff, 0 , 1 ,buf)< 0 )
    {
     Print ( "Failed to copy data from the indicator iEnvelopes, Error: " , GetLastError ());
     return ( WRONG_VALUE );
    }
   }
   return (buf[ 0 ]);
}
//************************************************************************************************/

Ancak şimdi ilk hesaplanan değerin neden her tikte her yerde kaydedildiğini anlamıyorum.

hesaplamalar

Nasıl düzelteceğimi söyle?
 
Alexander Layzerevich :

Tavsiyenize göre MT5 kodunu biraz yeniden düzenledim, şöyle çıktı:

Ancak şimdi neden her tik ile her yere bir hesaplanmış değer yazıldığını anlamıyorum.

 //---------------------------------------------------
   double Signal_Sell = Envelopes( 0 , Deviation( 1 )); // Сигнал на Продажу
   Print ( "Signal_Sell = " , Signal_Sell );
     if (Signal_Sell < 0 ) { Print ( "Signal_Sell error #" , GetLastError ()); }
   double   Signal_Buy = Envelopes( 1 , Deviation( 1 ));   // Сигнал на Покупку
   Print ( "Signal_Buy = " , Signal_Sell );
     if (Signal_Buy < 0 ) { Print ( "Signal_Buy error #" , GetLastError ()); }
//---------------------------------------------------
   double Signal_Sell_2 = Envelopes( 0 , Deviation( 2 ));
   Print ( "Signal_Sell_2 = " , Signal_Sell );
       if (Signal_Sell_2 < 0 ) { Print ( "Signal_Sell_2 error #" , GetLastError ()); }
   double   Signal_Buy_2 = Envelopes( 1 , Deviation( 2 ));
   Print ( "Signal_Buy_2 = " , Signal_Sell );
       if (Signal_Buy_2 < 0 ) { Print ( "Signal_Buy_2 error #" , GetLastError ()); }
//---------------------------------------------------

Hemen göze çarpar. Hatta vurgulamadan.

 
Artyom Trishkin :

Hemen göze çarpar. Hatta vurgulamadan.

Sayesinde.

 

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

WinProject , 2019.05.07 18:38

Aynı kodun neden MT4'te çalıştığını ancak MT5'te çalışmadığını söyleyebilir misiniz? MT5'te strNum değişkeni her zaman =1'dir, ancak MT4'te sayaç ++ olması gerektiği gibi çalışır ve strNum = dosyadaki satır öğelerinin sayısıdır.

int strNum;
void OnStart ()
  {
 FileNum();
 Alert1();
  } 

   void FileNum()
{
       int handle= FileOpen ( "File.csv" , FILE_CSV | FILE_READ , ';' );
      strNum= 0 ; 
       while (! FileIsEnding (handle))
{
       FileReadString (handle);
      strNum++;
       if ( FileIsEnding (handle)== true )
       break ;
}
       FileClose (handle);
}

       void Alert1()
{
       Alert (strNum);
}

Kendi kendime cevaplıyorum, MT5'te döngüsü olmayan biri için bir dizi veya yapı içine dosya açarken, okurken faydalı olabilir. MT5'te, MT4'ten farklı olarak, bir .csv dosyası okunurken, FILE_ANSI dosyası açık bayrağı ek olarak ayarlanmalıdır.

Onlar. MT5'te satır şöyle görünmelidir:

 int handle= FileOpen ( "File.csv" , FILE_READ | FILE_ANSI | FILE_CSV , ";" );

Ben neden bilmiyorum, bilen var mı?

 
EA günlüğünde bu formatta bir bildirim varsa - uninit neden 3 (bildirim TM'nin değiştirilmesinden kaynaklanmaktadır), ancak robot grafikten kaldırılmamışsa, değişkenlerin değerleri ve alınan tüm hesaplamalar kaydedildi mi?
 

Bilinmeyen bir nedenden dolayı "OrderSend hatası 130" alıyorum, program strateji test cihazında bir demo hesabında yürütülüyor, bu nedenle komisyoncudan herhangi bir kısıtlama olamaz, anladığım kadarıyla, Durma Düzeyi = 30. Bir hata alıyorum Test sırasında düzenli aralıklarla durdurma, tüm işlemler için ATR yüzdesi olarak sabitlenirken, ancak bazı siparişler başarılı bir şekilde verilir, diğerleri verilmez.

       Print ("!!! long level = ", level, ", stop = ", NormalizeDouble (level - stop, Digits ));
       if (Bid < level) {
         tickets[orders] = OrderSend (symbol, OP_BUYSTOP, volume, level, 5 , NormalizeDouble (level - stop, Digits ), 
                             NormalizeDouble (level + take, Digits ), NULL , magicNum, TimeLocal () - TimeLocal () % 1800 + 7200 , clrBlue );                                                                           
         orderLevels[orders] = level;
         directions[orders] = true ;
         orderIsTheLast[orders] = lastOrder;          
         firstTouchTimes[orders] = firstTouchTime;
         orders++;                   
      }       
       else { 
         tickets[orders] = OrderSend (symbol, OP_BUYLIMIT, volume, level, 5 , NormalizeDouble (level - stop, Digits ), 
                             NormalizeDouble (level + take, Digits ), NULL , magicNum, TimeLocal () - TimeLocal () % 1800 + 7200 , clrBlue );                
         orderLevels[orders] = level;
         directions[orders] = true ;
         orderIsTheLast[orders] = lastOrder;
         firstTouchTimes[orders] = firstTouchTime;
         orders++;    
      }

Siparişin birkaç kez reddedildiği ve ardından geçtiği zamanlar vardır ...



 

CodeBase'de farklı dil hedef kitleleri için aynı kodu nasıl yayınlarım (örneğin, ilgili dil için piyasada bir formu nasıl doldurabilirsiniz)?


Bunu CodeBase'de görmüştüm, işte bir örnek


Aynısını nasıl yapabilirim?

 

Gösterge verilerinin doğruluğu ile hangi grafik ekranının daha eğimli olması gerekir, örneğin, mum ölçeğinin boyutunu fare ile en sınıra indirirseniz, hiçbir şey yazılmamasına rağmen gösterge verilerinin okumaları değişir. binlerin herhangi birinde gösterge kodundaki mumların boyutunu değiştirme hakkında Örneğin, saat 4'te, azaltılmış formdaki hacimler bir değer gösterir, ancak farklı bir düzenleme için mumları biraz artırmaya değer, hangi okumalar daha doğru kabul edilir.


Neden: