"MQL4'ten MQL5'e geçiş" makalesi için tartışma - sayfa 4

 
Interesting :

Bu tasarımın işlevselliği hakkında çok fazla şüphe duymaya başladım. Bloğun mantığını ne kadar anlamaya çalışsam da yapamadım (ve çok uğraştım)....

Şüphe nedir? Doğru sayılıyor.

//+------------------------------------------------------------------+
//|Test.mq5 |
//+------------------------------------------------------------------+
#include <InitMQL4.mqh>
double   close[];
int      total,count;
datetime time[];
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnStart()
  {
   count=Bars(_Symbol,_Period);
   total=CopyClose(_Symbol,_Period,0,count,close);
   total=CopyTime(_Symbol,_Period,0,count,time);
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(close,true);
   int N=7;
   int shift=iBarShiftMQL4(_Symbol,_Period,time[N]);
   Print("TIME",time[N],"BAR=",shift," CLOSE=",close[shift]);
  }
//+------------------------------------------------------------------+
int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }
//+------------------------------------------------------------------+
[Silindi]  
DC2008 :

Sorun nedir? Doğru sayıyor.

Ve şimdi hokus pokus için


1. MT4'te bu satırı yazıyoruz ve kodu H4'te yürütüyoruz

Print(iBarShift(Symbol(),Period(),1274356800,false)); //tarih 20.05.2010 12:00 pm

Sonra aynı şeyi MT5 ve dize ile yaparız.

int shift=iBarShiftMQL4(_Symbol,_Period,StringToTime("20.05.2010 12:00"),false);

Sonuç olarak 8 elde ederiz.


2. Bundan sonra tamamen aynı işlemi yapıyoruz, ancak D1 ile.

Sonuç olarak MT4 - 1 ve MT5 0 döndürür.

Şimdi kim bana iBarShiftMQL4 'ün bu uygulamasının gerekli olana ne kadar karşılık geldiğini söyleyebilir ...

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }
 

Bunu dene:

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
     {
      if(ArraySize(Arr)>2) return(ArraySize(Arr)-1);
      if(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  }
 

Tekrar soruyorum, hakkında yazdığınız fonksiyonu okudunuz mu???

mcl4'te tam olarak şöyle yazıyor

double iClose( string symbol, int timeframe, int shift)
shift parametresiyle belirtilen ilgili grafikten(sembol, zaman dilimi) çubuğun kapanış fiyatının değerini döndürür. Bir hata durumunda fonksiyon 0 döndürür. Hata hakkında daha fazla bilgi almak için GetLastError() fonksiyonunu çağırın.
Geçerli grafik için, kapanış fiyatları hakkındaki bilgiler önceden tanımlanmış Close[] dizisindedir.

ve sizde.... var

return(-1);

moderatörler neye bakıyor...

 

Teşekkürler, CoreWinTT.

Düzeltilen fonksiyonlar: iClose, iLow, iHigh, iOpen, iTime, iVolume. Hata durumunda -1 yerine 0 döndürüyorlar.

 

ve ne zaman kütüphanede olacaklar???

Böylece en azından

Çünkü açarsanız soru çıkıyor ve yukarıda yazılanların anlamı????.

ve ayrıca en azından tüm soruların çözüldüğü fonksiyonları toplayın ve geri kalanında hataları incelemeye devam edin.

 
bool  SetIndexBuffer(
   int                    index,         // tampon dizini
   double                 buffer[],      // dizi
   ENUM_INDEXBUFFER_TYPE  data_type      // ne depolayacağız
   );

Geçen gün birisi μl4 ortamı yaratmak için akıllıca bir yöntem önerdi

dizilerini kullanarak

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

ancak bunları kullanmak zor olacaktır çünkü sabit durumları vardır.

Global tamponlar oluşturamazsınız

yardımıyla beyan edilmeleri gerektiğinden

SetIndexBuffer

Belirtilen gösterge tamponunu, global olarak bildirilen double türünde tek boyutlu bir dinamik diziyle ilişkilendirir.

ancak yalnızca double türü ve tarih-zaman türündeki birimler ve diziler geçmeyecektir.

Geriye kalan tek şey bu dizileri mql4 modülü içinde başlatmaktır.

Bu da pratikte.... göstergesini yeniden yazmaya eşittir.

 
CoreWinTT:

ve ne zaman kütüphanede olacaklar???

Çoktan geldiler bile.
 
boş ve boştu ve sadece bir grup tanım ve başka bir şey yoktu....
[Silindi]  
CoreWinTT:

ve ne zaman kütüphanede olacaklar???

Böylece en azından

Çünkü açarsanız soru çıkıyor ve yukarıda yazılanların anlamı????.

ve ayrıca en azından tüm soruların çözüldüğü fonksiyonları toplayın ve geri kalanlardaki hataları incelemeye devam edin.

Bu konuda özel kütüphanelerde uzun zamandır bir sürü çözüm var.

Ben mesela en başından beri IsTesting() ve benzeri şeyleri kullanıyorum, ayrıca uzun zamandır tarih ve saat ile her şey çözülüyor (tabii ki başka çözümler de var)....

Başka bir şey de MT5'in kendisinde bu tür "Eski çözümlerin" varlığıdır ...