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

 
vladzeit :

Örnek için teşekkürler.

Yine de belirtin lütfen... doğru anlaşılıp anlaşılmadığını.

bununla =( datetime ) OrderGetInteger. OrderGetInteger'a açık bir tarih saat türü almasını söyleriz . ?  

Bu kural, açık bir türü olmayan veya atanan değişkenin türüyle eşleşmeyen tüm işlevler için geçerli midir? Yoksa bu sadece özel bir durum mu?

Bunun bir kural mı yoksa özel bir durum olarak mı hatırlanması gerektiğini anlamak istiyorum.

Bu özel bir durum değil. Bir türdeki bir değişkene başka türden bir değer yazarsanız, derleyici sizi bu konuda uyaracaktır. Ve sonra hangi değişkenin hangi verileri kabul edeceğine karar vermek size kalmış.

Sizin durumunuzda, açık bir tarih saat değerine sahip long türünde bir işlevden dönerken, elbette güvenlidir ve işlevden aldığınız değerin türünü açıkça belirtmeniz gerekir.

Ancak bir int değişkenine double değeri kabul ederseniz, burada böyle bir atama sırasında veri kaybı olup olmayacağını kendiniz anlamalısınız. Döndürülen değerin int'ye sığacağından eminseniz, o zaman açıkça int'yi belirtin, bilmiyorsanız onu bir çift değişkende kabul edin.

 
Artyom Trishkin :

Bu özel bir durum değil. Bir türdeki bir değişkene başka türden bir değer yazarsanız, derleyici sizi bu konuda uyaracaktır. Ve sonra hangi değişkenin hangi verileri kabul edeceğine karar vermek size kalmış.

Sizin durumunuzda, açık bir tarih saat değerine sahip long türünde bir işlevden dönerken, elbette güvenlidir ve işlevden aldığınız değerin türünü açıkça belirtmeniz gerekir.

Ancak bir int değişkenine double değeri kabul ederseniz, burada böyle bir atama sırasında veri kaybı olup olmayacağını kendiniz anlamalısınız. Döndürülen değerin int'ye sığacağından eminseniz, o zaman açıkça int'yi belirtin, bilmiyorsanız onu bir çift değişkende kabul edin.

Detaylı cevap için teşekkürler. Anladım.

 

Herkese iyi yaratıcılık)))


MT4'te ustalaştı, ancak MT5 .... Ben araba kullanmıyorum (((Birkaç açıklayıcı örnek var ve olmayanlar neyin gerekli olduğunu açıklamıyor.

MT4 kodundan yapılan alıntıların MT5'te nasıl görüneceğini veya benzer durumlara sahip göstergelere bağlantılar verebilir misiniz?


1.

 if ( Period ()<= PERIOD_H4 && TimeHour ( Time [h])== 0 && TimeMinute ( Time [h])== 0 )


2.

 while (A< 1 )
  {
   ObjectDelete ( "MB" );
   OP= iOpen ( NULL ,Timeframe,br);
   CL= iClose ( NULL ,Timeframe,br);
 if (OP>CL)
   bear=(OP-CL)/ _Point ;
 if (SizeCandles*FactorCandleы <= bear)
   A= 2 ;
 if (br> iBars ( NULL ,Timeframe))
  {
   Lab( "MB" , " No Bear candle" , 4 , 510 , 1 , clrWhite );
   break ;
  }
   br++;
  }


3. iMa tutamacı kullanarak öğeleri nasıl karşılaştıracağımı anlamıyorum... Yapıları biliyorum!!! Denedim ama MT5, MT4 kadar görsel değil...

   
 for ( int i=limit; i> 0 && ! IsStopped (); i--)
   {
   ma1= iMA ( NULL , Period (),Ma1, 0 ,MAMethod1,MAPrice1,i);
   ma2= iMA ( NULL , Period (),Ma2, 0 ,MAMethod2,MAPrice2,i);
   ma3= iMA ( NULL , Period (),Ma3, 0 ,MAMethod3,MAPrice3,i);
   ma4= iMA ( NULL , Period (),Ma4, 0 ,MAMethod4,MAPrice4,i);
   MA= iMA ( NULL , Period (),MAPeriod, 0 ,MAMethod,MAPrice,i);
//----
 if (filtercase== true && xPer== Period ())
  {
//--- High signal
 if ( Open [i]< Close [i] && MA> Open [i] && MA< Close [i] && ma1>ma2 && ma1<ma3 && MA<ma4)  
   ExtLineBuffer1[i]= High [i]+shiftmap* _Point ;
 if (ShowPeriod== false && xPeriod== Period ())
   ExtLineBuffer1[i]= 0.0 ;
//--- Low signal
 if ( Open [i]> Close [i] && MA< Open [i] && MA> Close [i] && ma1<ma2 && ma1>ma3 && MA>ma4)  
   ExtLineBuffer2[i]= Low [i]-shiftmap* _Point ;
 if (ShowPeriod== false && xPeriod== Period ())
   ExtLineBuffer2[i]= 0.0 ;
  } 
 

MT5'te programlamadaki genel farklılıkları zaten anladım! Ama şu ana kadar programlayamıyorum (küpler toplanmıyor)))))

MT5'in bu parçalarını ve modüllerini kafamda KATLAMAK benim için önemli.... MT4'te mantığı çabucak anlıyorum ve MT5 sadece "zar"....

İpuçları için teşekkürler)))

 
Lütfen robotumda lot başına sabit lotu % olarak yeniden oluşturun. Kişisel olarak kodlayın.
 
Sprut112 :
Lütfen robotumda lot başına sabit lotu % olarak yeniden oluşturun. Kişisel olarak kodlayın.

serbest

 
kopeyka2 :

Herkese iyi yaratıcılık)))


MT4'te ustalaştı, ancak MT5 .... Ben araba kullanmıyorum (((Birkaç açıklayıcı örnek var ve olmayanlar neyin gerekli olduğunu açıklamıyor.

MT4 kodundan yapılan alıntıların MT5'te nasıl görüneceğini veya benzer durumlara sahip göstergelere bağlantılar verebilir misiniz?


1.


2.


3. iMa tutamacı kullanarak öğeleri nasıl karşılaştıracağımı anlamıyorum... Yapıları biliyorum!!! Denedim ama MT5, MT4 kadar görsel değil...

MT5'te programlamadaki genel farklılıkları zaten anladım! Ama şu ana kadar programlayamıyorum (küpler toplanmıyor)))))

MT5'in bu parçalarını ve modüllerini kafamda KATLAMAK benim için önemli.... MT4'te mantığı çabucak anlıyorum ve MT5 sadece "zar"....

İpuçları için teşekkürler)))

Başlamak için belgeleri dikkatlice okuyun. " Zaman serilerine ve göstergelere erişim " bölümü

Zamanın nasıl alınacağı, yapıya "yerleştirileceği" ve oradan saat ve dakikanın ayrı ayrı nasıl alınacağı netleşmeli.

Sapından gösterge değerleri almak için bir CopyBuffer da vardır.

Peki, herhangi bir sorunuz varsa...


 
kopeyka2 :

Herkese iyi yaratıcılık)))


MT4'te ustalaştı, ancak MT5 .... Ben araba kullanmıyorum (((Birkaç açıklayıcı örnek var ve olmayanlar neyin gerekli olduğunu açıklamıyor.

MT4 kodundan yapılan alıntıların MT5'te nasıl görüneceğini veya benzer durumlara sahip göstergelere bağlantılar verebilir misiniz?


1.


2.


3. iMa tutamacı kullanarak öğeleri nasıl karşılaştıracağımı anlamıyorum... Yapıları biliyorum!!! Denedim ama MT5, MT4 kadar görsel değil...

MT5'te programlamadaki genel farklılıkları zaten anladım! Ama şu ana kadar programlayamıyorum (küpler toplanmıyor)))))

MT5'in bu parçalarını ve modüllerini kafamda KATLAMAK benim için önemli.... MT4'te mantığı çabucak anlıyorum ve MT5 sadece "zar"....

İpuçları için teşekkürler)))

Aynı zaman dilimindeki birkaç zaman serisini karşılaştırmanız gerekiyorsa, MqlRates -> gibi bir diziyle çalışın ve bu diziyi doldurmak için CopyRates kullanın.

Zaman bir yapıda uygun bir şekilde saklanır   MqlDateTime -> zamanı tarih saatinden yapıya dönüştürmek için   MqlDateTime TimeToStruct kullanın .

Şimdi örnek 1'iniz şöyle görünecek:

 //+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
#property script_show_inputs
//--- input parameters
int InpBarTime= 3 ; // Bar where we compare the time
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   MqlRates rates[];
   ArraySetAsSeries (rates, true );

   int start_pos  = 0 ;                           // start position 
   int count=(InpBarTime< 10 )? 10 :InpBarTime+ 1 ;   // data count to copy 

   int result= CopyRates ( Symbol (), Period (),start_pos,count,rates);
   if (result!=count)
     {
       Print ( "Ordered: " , IntegerToString (count), ", received " , IntegerToString (result));
     }

//--- example 1
// if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)
   MqlDateTime SDateTime;
   TimeToStruct (rates[InpBarTime].time,SDateTime); // Converts a value of datetime type into a structure variable MqlDateTime
   if ( Period ()<= PERIOD_H4 && SDateTime.hour== 0 && SDateTime.min== 0 )
     {

     }
  }
//+------------------------------------------------------------------+
Dosyalar:
Test_en.mq5  3 kb
 
Lütfen sor. herhangi bir kural var mı?
mql5'te aynı görev birçok şekilde çözülebilir.
Bir koddaki bir sınıfın örneğine atıfta bulunursam, örneğin: CSymbolInfo. m_symbol.Ask().. vb. Daha ileri.
ve aynı kodda, sınıfa atıfta bulunmadan Ask'a bir değer atadım. örneğin bunun gibi.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK ),_Digits);

Soru: Bu, hatalara yol açar mı yoksa tek bir kodda, hatta bir işlevde normal midir?

 
kopeyka2 :

Herkese iyi yaratıcılık)))


MT4'te ustalaştı, ancak MT5 .... Ben araba kullanmıyorum (((Birkaç açıklayıcı örnek var ve olmayanlar neyin gerekli olduğunu açıklamıyor.

MT4 kodundan yapılan alıntıların MT5'te nasıl görüneceğini veya benzer durumlara sahip göstergelere bağlantılar verebilir misiniz?


1.


2.


3. iMa tutamacı kullanarak öğeleri nasıl karşılaştıracağımı anlamıyorum... Yapıları biliyorum!!! Denedim ama MT5, MT4 kadar görsel değil...

MT5'te programlamadaki genel farklılıkları zaten anladım! Ama şu ana kadar programlayamıyorum (küpler toplanmıyor)))))

MT5'in bu parçalarını ve modüllerini kafamda KATLAMAK benim için önemli.... MT4'te mantığı çabucak anlıyorum ve MT5 sadece "zar"....

İpuçları için teşekkürler)))

Göstergelerle çalışma - MA Force kodu örneğinde

Adım 1: genel program düzeyinde, gösterge tutamağını depolayacak olan handle_iMA değişkenini bildirin

 int     handle_iMA;                           // variable for storing the handle of the iMA indicator

Adım 2: OnInit() içinde bir gösterge oluşturun ve oluşturulan göstergenin tanıtıcısını handle_iMA değişkenine döndürün

 //--- create handle of the indicator iMA
   handle_iMA= iMA (m_symbol.Name(),Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created 
   if (handle_iMA== INVALID_HANDLE )
     {
       //--- tell about the failure and output the error code 
       PrintFormat ( "Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d" ,
                  m_symbol.Name(),
                   EnumToString (Inp_MA_period),
                   GetLastError ());
       //--- the indicator is stopped early 
       return ( INIT_FAILED );
     }

Adım 3: OnTick()'te bir istek yaparız - göstergeden belirli bir miktarda veriyi ( count ) ma[] dizisine kopyalarız

    double ma[] ,force[];
   ArraySetAsSeries (ma, true );
   ArraySetAsSeries (force, true );
   int start_pos= 0 ,count=InpTrendBars+ 3 ;
   if (!iGetArray(handle_iMA, 0 ,start_pos,count,ma) || 
      !iGetArray(handle_iForce, 0 ,start_pos,count,force))
     {
      PrevBars= 0 ;
       return ;
     }

Adım 4: gösterge veri dizisiyle çalışın ve öğelerini karşılaştırın:

   bool trend_up=(ma[ 1 ]>ma[ 2 ]);
   bool trend_down=(ma[ 1 ]<ma[ 2 ]);
 
vladzeit :
Lütfen sor. herhangi bir kural var mı?
mql5'te aynı görev birçok şekilde çözülebilir.
Bir koddaki bir sınıfın örneğine atıfta bulunursam, örneğin: CSymbolInfo. m_symbol.Ask().. vb. Daha ileri.
ve aynı kodda, sınıfa atıfta bulunmadan Ask'a bir değer atadım. örneğin böyle.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK ),_Digits);

Soru: Bu, hatalara yol açar mı yoksa tek bir kodda, hatta bir işlevde normal midir?

Bir yaklaşımı karıştırmamak ve kullanmamak daha iyidir: ya CSymbolInfo ticaret sınıfı ya da SymbolInfoXXXX türünün sistem işlevleri.