"Çok Sayıda Enstrüman Üzerinde Alım Satım Yapan bir Expert Advisor Oluşturma" makalesi için tartışma - sayfa 3

 

6.Eksik gibi görünüyor:

TradePerformer( 4, Symb4, Trade4, StLoss4, TkProfit4, Lots4, Slippage4, UpSignal, DnSignal, UpStop, DnStop);

Exp_TEMA.mq5 içinde ?

 
ias:

6. Kayıp gibi görünüyor

Exp_TEMA.mq5'te?

Evet! Bu kadar anormal bir sıcaklıkta çok fazla çalışmış ve aşırı ısınmış olmalıyım!
 
Renat:

Lütfen tekrarlanabilir bir örnek yapın. Yani, derleyebileceğiniz, bir grafiğe atabileceğiniz ve sonuç alabileceğiniz hazır bir koda ihtiyacınız var.

Bu olmadan, çok az insan neden bahsettiğimizi anlayacaktır.

İnsanları boş yere bekletmemek için kısa keseyim dedim.

İşte tam sürüm:

#property indicator_separate_window    // Gösterge ayrı bir pencerede çizilir
#property indicator_buffers 1



#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  Aqua

input string InstrumentName = "EURJPY";

//-- Gösterge dizisi
double ScreenBuffer[]; 

//-- Dinamik Tampon --
double ArrayBuffer[];

int OnInit()                          // Özel init() işlevi
{
//--------------------------------------------------------------------

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   return 0;                          // Çıkış
}
//--------------------------------------------------------------------
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[])
{
int Counted_bars;   // Çalıştırılacak çubuk sayısı 
int copied;

//--------------------------------------------------------------------
   //1 input rates_total = 9667 / prev_calculated = 0 / Bars = 9667
   //-- o zaman rates_total = 9667 / prev_calculated = 9667 / Bars = 9667
   //-- işlem sırasında o zaman rates_total = 9668 / prev_calculated = 9667 / Bars = 9668
   //Print("rates_total: " + (string)rates_total);
   if (rates_total == prev_calculated) return (rates_total);//-- Hala aynı bar, yani biz yokuz--

   //-- İşlenmemiş çubukların sayısını al (ilk girişte hepsi, sonra 1)
   //-- Çıktı çubuklarının sayısı grafiğin kendisini ifade eder, ancak biz başka bir enstrümanın çıktısını alacağız
   //-- çubuk sayısı farklı olabilir, bu nedenle önce tüm verileri tampona atıyoruz --
   Counted_bars = rates_total-prev_calculated;
   
   // Print("Counted_bars: " + Counted_bars);
   Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(Symbol(),0));
   //-- Ana enstrümanın çubuk sayısına göre bellek ayırın --
   if (ArrayResize(ArrayBuffer, Counted_bars,0) == -1) return (rates_total);//-- Bellek ayırma hatası --
   //--- dizi elemanlarını EMPTY_VALUE değeri ile başlatın ----
   ArrayInitialize(ArrayBuffer,EMPTY_VALUE);
         
   //-- Bu enstrümanın gerçekte kaç çubuğu olduğunu alın --
   copied = (int)SeriesInfoInteger(InstrumentName,0,SERIES_BARS_COUNT);
   
   if (copied > 0){
      copied=CopyClose(InstrumentName,0,0,copied,ArrayBuffer);//-- Verileri bellek tamponuna yaz --
      if (copied <= 0) return (rates_total);//-- hata
   } 
   else{

      return (rates_total);//-- hata 
   }
    
   if (Counted_bars > copied) Counted_bars = copied;//-- Düşük değeri al --

   Counted_bars--;//-- 0'dan itibaren sayıldığı için --
   //-- Veri bellek tamponuna yüklendi, şimdi sağdan sola doğru ekran tamponuna yaz --
   for (int i = Counted_bars; i > 0; i--){
      ScreenBuffer[i] = ArrayBuffer[i];
   }   
   
//--------------------------------------------------------------------
   return(rates_total);
}


void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0,0,-1);             // grafikteki tüm nesneler silinir.
}
 

Neyi yanlış yapıyorum, neden başka bir enstrümanın grafiğini normal şekilde görüntüleyemiyorum?

MQL4'te her şey çalıştı, burada yalnızca aynı enstrümanda görüntülerseniz çalışıyor, o zaman hata yok.

[Silindi]  
gisip:

Neyi yanlış yapıyorum, neden başka bir enstrümanın grafiğini normal şekilde görüntüleyemiyorum?

MQL4'te her şey çalıştı, burada yalnızca aynı enstrümanda görüntülerseniz çalışıyor, o zaman hata yok.


Uygulamanın ve genel olarak algoritmanın doğruluğundan emin değilim, ancak koda ve onunla yapabildiklerime dayanarak bunu varsayıyorum:

Dize

// Print("Counted_bars: " + Counted_bars);
Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(Symbol(),0));

şöyle görünmelidir

// Print("Counted_bars: " + Counted_bars);
Print("rates_total: " + rates_total + "   /   prev_calculated: " + prev_calculated + "   /   Bars: " + Bars(InstrumentName,Period()));


Belki de her yerde "0" olarak geçen periyodu PERIOD_CURRENT olarak değiştirmek daha doğru olacaktır.

En azından bu tür değişikliklerden sonra her şey benim için çalıştı.....

PS

Belki konuyla ilgili değildir, ancak bu şekilde derleyici çok daha az ÖNEMLİDİR

Print("rates_total: ",rates_total," / prev_calculated: ",prev_calculated," / Bars: ",Bars(InstrumentName, PERIOD_CURRENT));
 
Interesting:

Genel olarak doğru uygulama ve algoritmadan emin değilim, ancak koda ve onunla yapabildiklerime dayanarak bunu varsayacağım:

Dize

şöyle görünmelidir

PS

Belki de her yerde "0" olarak geçen periyodu PERIOD_CURRENT olarak değiştirmek daha doğru olacaktır.

En azından bu tür değişikliklerden sonra her şey benim için çalıştı....

Değiştirdim, hala çalışmıyor, grafik gerçekle uyuşmuyor.
 

Ekranımda böyle görünüyor:


Açıkça yanlış.
[Silindi]  

Benim için bu şekilde sonuçlandı

Ancak indükleyicinin mantığına ve uygulamasına girmediğim için sonuçların doğruluğunu değerlendirmek bana düşmez.


PS

Yine de parametredeki sembolden kurtulur ve onu mevcut sembol ve TF ile yapardım ve ardından normal iCustom () kullanarak Expert Advisor'da veya başka bir araçta kullanırdım.

Ayrıca, tamponlarla çalışmanın mantığını gerçekten anlamıyorum (hesap makinesinin kuyruğunu kastediyorum vb.). Bence üzerinde çalışılması gereken çok şey var....

Dosyalar:
proba.mq5  4 kb
 
Interesting:

Ben de bunu aldım.

Ancak indükleyicinin mantığına ve uygulamasına girmediğim için sonuçların doğruluğunu değerlendirmek bana düşmez.


PS

Yine de parametredeki sembolden kurtulur ve bunu mevcut sembole ve TF'ye göre yapardım ve ardından bunu Uzman Danışman'da veya normal iCustom () kullanarak başka herhangi bir araçta kullanırdım.


Tavsiye için teşekkürler, deneyeceğim.
[Silindi]  

Interesting:

Ayrıca, tamponlarla çalışmanın mantığını gerçekten anlamıyorum (yani hesap makinesinin kuyruğu vb.). Bence üzerinde çalışılması gereken çok şey var....


Yine de tamponlarla çalışma algoritmasına dikkat ederdim. Doğru anladıysam, bir tampon yeterlidir (sadece doğru hesaplanması ve grafikte çizilmesi gerekir).

PS

Ve mevcut varyantla, indükleyicinin "sağ" (güncel) yerine "sol" verileri (geçmişin en başlangıcı) görüntülediği izlenimine sahibim ....

Ya da bu göstergenin mantığında hiçbir şey anlamıyorum....