Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 54

 
Büyük erkek kardeş geldi. Muhtemelen yarın.
 
Merkulovv_Artem :

Hatanın nerede olduğunu söyle, tam değerleri alıyorum ama “Obem_Pozic” değerini 1.00 gibi gösteremiyorum ki maruziyet lotunu hesaplayayım, değerleri normalleştirmek istemiyorum, 4 ondalık veriyor yerler ve bu kadar.

MQL4'te yazıyorum.

MQL4 hakkında ilgili forumda soruyorlar, işte beş


Sorunuzda - 4 ondalık basamak Uyarısı verir. DoubleToStr() işlevini kullanmalısınız. daha doğru ekran çıktısı için

DoubleToStr - Документация на MQL4
  • docs.mql4.com
DoubleToStr - Документация на MQL4
 
Yedelkin :

Büyük olasılıkla, bu çift terminal tarafından sağlanır, sadece bağlamanız gerekir. Elle ise, Piyasa İzleme'de. Ve yetişkin bir şekilde ise, programlı olarak SymbolSelect () aracılığıyla.

Bir hata göründüğünde, geri kalanı takip eder. İlk hatalar sırayla alttaki terminaldedir. Yani ilk hataları ortadan kaldırmaya çalışmalıyız, sonra göreceğiz :)

Teşekkürler!! Çok net ve iyi yazılmış. SymbolSelect(), Uzman Danışmanım Gerçekten de. Görmeniz gerekiyorsa, 53. sayfadaki kodla gönderdim. Yardımı kontrol ettim - her şey doğru !! O zaman Büyük olasılıkla, bu çift terminal tarafından sağlanıyorsa - ne düşünmeliyim?

Ayrıca, ilk sıradaki hatalar aşağıdan terminalde ise. Neden hata mesajları ve terminal mesajları sırayla yazdırılmıyor - hayır, bunlar birlikte gruplandırılmış mı?

Belki terminal bu fonksiyondan olmayan bir hata bildirir?

 
Ve görünüşe göre evet, bundan değil !! Ya da bundan, ama böyle değil. İlk olarak, program mesajları (baskılar) ve tirminal mesajlar gerçekten değişiyor ve sonra aniden, patlama ve 10-12 kez, 4002 hatası aniden bir kalabalığa tırmanıyor !!
 
Muhtemelen hala koda bakmam gerekiyor .. başka nerede bir göstergeye sahip olabilirim
 
Dimka-novitsek : Uzman Danışmanımda SymbolSelect() var. Görmeniz gerekiyorsa, 53. sayfadaki kodla gönderdim.

Evet görüyorum. Şöyle deneyelim:

 ResetLastError ();
if ( SymbolSelect (a_symbol, true) ) Print ( "Символ " ,a_symbol, " успешно выбран" );
else Print ( "Неудача с выбором символа " ,a_symbol, ", error = " , _LastError );
 

Teşekkürler!! !!

Lütfen söyleyin, zaman çerçevesi değişkeninin baskısı nasıl olmalı, dijital olabilir mi? Birini görüyorum, bir numaranın görüntülendiği anlamda.

 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 
 double   iMAf( string symbol, ENUM_TIMEFRAMES timeframe, int period, int mama_shift, ENUM_MA_METHOD mama_method, int applied_pricece, int shift){
 
     Print ( " iMAfsymbol  " ,symbol, "    iMAftimeframe " ,timeframe, "  iMAfperiod  " ,period, " iMAfmama_shift  " ,mama_shift , "  iMAfmama_method " ,mama_method,
     "  iMAfapplied_pricece " , applied_pricece, "  iMAfshift " ,shift);
 
                     MA_handle= iMA (symbol,timeframe,periodd(period),mama_shift, mama_method,applied_pricece); Sleep ( 2000 );
                     //--- если не удалось создать хэндл
   if (MA_handle== INVALID_HANDLE )
     {
       //--- сообщим о неудаче и выведем номер ошибки
     PrintFormat ( "Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d" ,
                 symbol,
                   EnumToString (timeframe),
                   GetLastError ()); ResetLastError (); return ( 0.0 );} 
                     
                     CopyBuffer ( MA_handle, 0 , 0 , 100 ,MA);
                     ArraySetAsSeries (MA, true );
                     if (shift> 99 ) return ( 0 );
     return ( (MA[shift])); } 
                   
///////////////////////////////////////////////////////////////////////////////////////////////////////

neden diye soruyorum. Bu bir fonksiyondur, baskılı bir çizgisi vardır. Sırasıyla üstten ikinci.

İştefonksiyon çağrısı .

/////////////////////////////////////////////////////////////////////
int Distance_from_MA(string symbb)
{
 double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0);
 
 int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD));
 double point = SymbolInfoDouble(symbb,SYMBOL_POINT);
 
if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5)
{spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10);
point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;}
 
 if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1);
 if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1);
 
 
 return(0);
} 

////////////////////////////////////////////////////////////////////

Çağrı hattında bir fonksiyon daha kullandığımı lütfen unutmayın. Zaman çerçevesi dönüşümü için kullanılır. Danışman dördünden esinlendiği için oldu. İçinde vaka destekçisini kullandım. Daha sonra, her ihtimale karşı, beşin zaman dilimlerini dördünün zaman dilimlerine, daha sonra kullanılması için fona ekledim ve çalışmasında, genel olarak orada yanılacak bir şey olmadığından eminim.

 ///////////////////////////////////////////////////////////////////////////////////////////////  
    
   ENUM_TIMEFRAMES   periodd( int per)
  {
   switch (per)
     {
       case 0 : return ( PERIOD_CURRENT );
       case 1 : return ( PERIOD_M1 );
       case 5 : return ( PERIOD_M5 );
       case 15 : return ( PERIOD_M15 );
       case 30 : return ( PERIOD_M30 );
       case 60 : return ( PERIOD_H1 );
       case 240 : return ( PERIOD_H4 );
       case 1440 : return ( PERIOD_D1 );
       case 10080 : return ( PERIOD_W1 );
       case 43200 : return ( PERIOD_MN1 );
      
       case 2 : return ( PERIOD_M2 );
       case 3 : return ( PERIOD_M3 );
       case 4 : return ( PERIOD_M4 );      
       case 6 : return ( PERIOD_M6 );
       case 10 : return ( PERIOD_M10 );
       case 12 : return ( PERIOD_M12 );
       case 16385 : return ( PERIOD_H1 );
       case 16386 : return ( PERIOD_H2 );
       case 16387 : return ( PERIOD_H3 );
       case 16388 : return ( PERIOD_H4 );
       case 16390 : return ( PERIOD_H6 );
       case 16392 : return ( PERIOD_H8 );
       case 16396 : return ( PERIOD_H12 );
       case 16408 : return ( PERIOD_D1 );
       case 32769 : return ( PERIOD_W1 );
       case 49153 : return ( PERIOD_MN1 );      
       default : return ( PERIOD_CURRENT );
     }
  }  
  
  
   ///////////////////////////////////////////////////////////////////////////

Ve gördüğüm şey bu

 
Dimka-novitsek : çerçevesi değişkeninin baskısının nasıl görünmesi gerektiğini söyler misiniz, dijital olabilir mi? Birini görüyorum, bir numaranın görüntülendiği anlamda.

Eh, bu kodda biraz daha düşük, sonuçta kullanır

 EnumToString (timeframe), 
 
Teşekkür ederim! hemen bakacağım
 
Dimka-novitsek : Teşekkürler! hemen bakacağım

Sorunun nerede olabileceğini anlıyor gibi görünüyor. şimdi yazacağım.

Şekil, Expert Advisor'ın М1, timeframe==1, period==140 tarihinde başlatıldığını göstermektedir. Doğru şekilde?

timeframe==1 değeri, büyük olasılıkla, timeframe==M1 olduğunu söylüyor. Bu durumda, periodd(dönem) kaydı periodd( 140 ) anlamına gelir. Koda göre, periodd( 140 ) işlevi PERIOD_CURRENT değerini döndürmelidir. Yani periodd( 140 )==M1 çıkıyor.
Bu, iMA çağrısının şöyle göründüğü anlamına gelir: iMA(sembol, M1 , M1 ...). İkinci argümanın değeri için üçüncü argümanın değeriyle eşleşmesi için iMA'yı hesaplarken kabul edilebilir olup olmadığını bilmiyorum (yani, periyodun değerinin ortalama periyodla eşleşmesi için), ancak bir şey bana bunun olduğunu söylüyor. yanlış.