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

 
Interesting:

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


Örneğin EURUSD'den EURUSD'ye veya EURJPY'den EURJPY'ye çıktı alırsanız, her şey yolunda gider.

Yani çıktı yönü doğru görünüyor.

Burada birçok varyant denedim ve hatta bunun gibi:

handle1=iMA(InstrumentName,PERIOD_CURRENT,ex_Period_MA_1,0,MODE_SMA, PRICE_CLOSE);

...

copied=CopyBuffer(handle1,0,0,0,Counted_bars,Buf_0);

Hala hiçbir şey çıkmıyor.

En azından bir şekilde iki farklı aracı bir ekranda görüntülemek için bir örneği olan var mı?

 
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.


Kırpılmış biçimde çalışır. Çekler ve ekonomi ekleyin.

#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);
   ArraySetAsSeries(ArrayBuffer,true);
   ArraySetAsSeries(ScreenBuffer,true);
   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;

//--------------------------------------------------------------------
   copied=(int)SeriesInfoInteger(InstrumentName,0,SERIES_BARS_COUNT);
   copied=CopyClose(InstrumentName,PERIOD_M1,0,copied,ArrayBuffer);//-- Verileri bellek tamponuna yaz --

   for(int i=0; i<copied; i++)
     {
      ScreenBuffer[i]=ArrayBuffer[i];
     }

//--------------------------------------------------------------------
   return(rates_total);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,0,-1);             // grafikteki tüm nesneler silinir.
  }
[Silindi]  
gisip:

Örneğin EURUSD'den EURUSD'ye veya EURJPY'den EURJPY'ye çıktı alırsanız, her şey yolunda gider.

Yani çıktı yönü doğru sayılır.

Burada birçok varyant denedim ve hatta bunun gibi:

handle1=iMA(InstrumentName,PERIOD_CURRENT,ex_Period_MA_1,0,MODE_SMA, PRICE_CLOSE);

...

copied=CopyBuffer(handle1,0,0,0,Counted_bars,Buf_0);

Hala hiçbir şey çıkmıyor.

En azından bir şekilde iki farklı aracı bir ekranda görüntülemek için bir örneği olan var mı?

MQL4 için bir kaynak kodunuz var mı?


Mevcut enstrüman için bir indeks oluşturmak ve %100 hata ayıklamak olan bir alternatif önermiştim. Bundan sonra, Expert Advisor'da veya başka bir göstergede gerekli parametrelerle kolayca çağırabilirsiniz.

Böyle bir uygulama ile, göstergenin temel mantığını değiştirmeniz gerekir, çünkü hesap makinesine aktarılan parametreler diğer enstrümanlar için tam olarak doğru değildir(çubuk sayısı ve diğer şeyler eşleşmeyebilir) ....

Ve genel olarak bu kavram (en hafif tabirle) pek de "doğru" değildir.


PS

Kısacası, burada iki seçenek var:

1. Mevcut TF ve enstrüman için her şeyi gerçekleştirin ve çalışabilirliğini kontrol edin. Bundan sonra iCustom() kullanın;

2. İndüktörün mantığını, hesap makinesinde parametrelerde belirtilen enstrümanla ilgili tüm verileri alacak şekilde yeniden yazmak (maliyetli ve çok doğru olmayan bir yöntem).

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
gisip:
Değiştirdim, hala çalışmıyor, grafik doğru değil.

Bunu göstergenizde yapın

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

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   ArraySetAsSeries(ScreenBuffer,true);
   
   return 0;                          // Çıkış
  }

ve Diziler ve Zaman Serilerinde İndeksleme Yönü bölümünü okuyun

[Silindi]  
DC2008:

Kırpılmış form çalışıyor. Çekleri ve ekonomiyi ekleyin.

Bu iki şeye orada ihtiyaç yoktur.

//1

//-- Dinamik Tampon --
double ArrayBuffer[];
...............
ArraySetAsSeries(ArrayBuffer,true);

//2

   for(int i=0; i<copied; i++)
     {
      ScreenBuffer[i]=ArrayBuffer[i];
     }
 
Interesting:

Bunlar orada ihtiyacınız olmayan iki şey.

Aslında, evet.
 

Evet, sanırım işe yaradı!

Hepinize çok teşekkür ederim!!!

Daha fazla test edeceğim.

 

İşlemleri görselleştirmeniz gerekiyor. Uzman Danışman çok para birimlidir. Diyelim ki EURUSD'de takılıyor ve diğer döviz çiftlerinde anlaşmalar açıyor. Sonuçlarda bir fark var, bunun benim hatam olduğunu anlıyorum, ancak kontrol edemiyorum (Uzman Danışman EURUSD'de asılı kaldığında AUDUSD işlemlerinin olduğu bir grafik açamıyorum ).

Uzman Danışman AUDUSD'de asılı kalıyorsa, onu açıyorum ve programladığım gibi çalıştığını görüyorum, ancak EURUSD'de asılı kalıyorsa sonuçlar farklı ve nedenini anlayamıyorum. İşlemlerin görselleştirilmesi çok yardımcı olacaktır.

Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
Операции с графиками / ChartOpen - Документация по MQL5
 

7.Exp_TEMA.mq5'i test ederken, Told[] Tnew[1]ifadeleri aşağıdaki değerleri alır:
Told[] İfade değerlendirilemedi
Tnew[1] Geçersiz dizi aralığı.
Bu değerler ne anlama geliyor ve Uzman Danışmanın çalışmasının sonucunu nasıl etkiliyor?

8.Exp_TEMA.mq5, test ederken neden bir çubuk içinde işlem açıyor?

9.Bir pozisyonu kapatmak ve ters yönde bir pozisyon açmak yerine, bir çevirme yaparsak, yani ters yönde çift hacimli bir pozisyon açarsak, kod azaltmaya, işlem yürütme süresinin kısalmasına, kaymanın azalmasına, maliyetlerin (komisyonlar vb.) Azalmasına yol açacak mı?

Barın içindeki anlaşmalar.

[Silindi]  
ias:

7.Exp_TEMA.mq5'i test ederken, Told[] Tnew[1]ifadeleri aşağıdaki değerleri alır:
Told[] İfade değerlendirilemedi
Tnew[1] Geçersiz dizi aralığı.
Bu değerler ne anlama geliyor ve Uzman Danışmanın çalışmasını nasıl etkiliyor?

Tnew[1] Geçersiz dizi aralığı için, aralığın aşılması gibi görünüyor. Dizi öğelerinin numaralandırılmasının 0'dan başladığını unutmayın!