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

[Silindi]  

Double MarketInfo(string symbol, int type) fonksiyonunu, giriş parametrelerinin özelliklerine göre farklı veri türleri döndüren bir fonksiyon seti olarak taşımayı öneriyorum


Örneğin, bu fonksiyonlar:

int MarketInfoInt(string sembol, int tip);

string MarketInfoStr(string sembol, int tip)....

Bir keresinde geliştiricilerle REFERANSLAR ve fonksiyonların sonuçları hakkında iletişim kurdum, ancak bunu yapmayı reddettiler (ve bu üzücü).


PS

Bu temelde, şu an için en iyi çözümün gerekli tüm fonksiyonları içerecek olan MarketInfo kütüphanesi olacağını düşünüyorum.

Bu arada, bu tam olarak kendi kütüphanemde yaptığım şey :)

 
Interesting:

Bence bir geçiş ortamında TF'yi idare etmek için iki özelliğe ihtiyaç vardır:

1. Saniye sayısını TF'ye dönüştürür - örneğin ENUM_TIMEFRAMES SecondToPeriod (int Value);

2. Periyodu saniyeye dönüştürür - örneğin int PeriodToSecond(ENUM_TIMEFRAMES Value).


Bunu en başta geçiş modülümde başarıyla yaptım (ayrıca bir DLL seçeneği de var).


PS

MQL4 ile uyumu en üst düzeye çıkarmak için, şahsen standart olmayan tüm dönemlerden kurtuldum



işlev iyi ve kullanışlı ama uygulama....

Ben olsam şu şekilde yapardım

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void FixTF(int &tf)
  {
   switch(tf)
     {
      case 0: tf = 0;break;
      case 1: tf = PERIOD_M1;break;
      case 5: tf = PERIOD_M5;break;
      case 15: tf = PERIOD_M15;break;
      case 30: tf = PERIOD_M30;break;
      case 60: tf = PERIOD_H1;break;
      case 240: tf= PERIOD_H4;break;
      case 1440: tf=PERIOD_D1;break;
      case 10080: tf = PERIOD_W1;break;
      case 43200: tf = PERIOD_MN1;break;
      default: tf=0;break;
     }
  }
//+------------------------------------------------------------------+



tüm fonksiyonlarda sadece dizilerin boyutunu tanımlamanız gerekir

Tıpkı Az Buki Vedi gibi.

 
CoreWinTT:

İşlev iyi ve yararlı ama uygulama..... sapkınlık.

İşiniz mi?

WHERE BREAK!!!!!! keder programcıları!!!!


Geri dönüş kırılmadan nasıl daha kötü olabilir?
 
Özür dilerim.
 
CoreWinTT:

tüm işlevlerde dizilerin boyutunu
basitçe az'buki vedi olarak tanımlamanız yeterlidir.

Her zaman değil, zaman serilerine ve göstergelere erişim bölümüne bakın:

Zaman serileri ve göstergelerle çalışmak için fonksiyonlar. Bir zaman serisinin normal bir diziden farkı, zaman serisi elemanlarının indekslenmesinin dizinin sonundan başına (en yeni veriden en eskisine) doğru yapılmasıdır. Zaman serileri ve göstergelerin değerlerini kopyalamak için yalnızca dinamik dizilerin kullanılması önerilir, çünkü kopyalama işlevleri gerekli büyüklükteki dizi-değer alıcılarını bağımsız olarak ayırır.

Bu kuralın önemlibir istisnasıvardır : zaman serileri ve gösterge değerlerinin kopyalanması sık sık yapılması gerekiyorsa, örneğin Uzman Danışmanlarda her OnTick() çağrısında veya göstergelerde her OnCalculate ( ) çağrısında, bu durumda statik olarak dağıtılmış diziler kullanmak daha iyidir, çünkü dinamik diziler için bellek ayırma işlemleriek zaman gerektirir ve bu Uzman Danışmanların test ve optimizasyonunu etkileyecektir.

 
Rosh:

Her zaman değil, Zaman Serilerine ve Göstergelere Erişim bölümüne bakın:


Uygulamamın gösterdiği gibi, bunu yapmak yapmamaktan daha iyidir.

Aksi takdirde bir veri erişim hatası ortaya çıkar

özellikle global dizilerde.


İlk olarak, belirli bir boyuta sahip bir dizide indeksleme statiktir ve ters çevirme dizilerinin bu tehlikeli anları yoktur.

İkincisi, diziler için alan daha tutumlu bir şekilde tahsis edilir

ve üçüncü olarak, dizi erişim hatası olasılığı birçok kez azalır.

Bu nedenle, bu işlevlerin dizi boyutunu belirlemek için bir işleve ihtiyaç duyduğuna inanıyorum.

 
CoreWinTT:

işlev iyi ve kullanışlıdır, ancak işte uygulama....

Ben olsam bu şekilde yapardım

Makale değiştirilmiştir:

  • TFMigrate() işlevini orijinal haline geri döndürdü
  • Bölüm 18'de değiştirilen işlevler
 
Referans Kılavuzuna iMAOnArray(...) fonksiyonu eklendi
 
iMAOnArray işlevi düzeltildi. MODE_SMA modunda hesaplama süresi önemli ölçüde azaltıldı.
[Silindi]  

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)....

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);
  }