MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 204

 
STARIJ :

Çubuklar arasında MA geçişi meydana gelir - iyi bir örnek yakaladı

Kavşağın solundaki ve sağındaki çubuklardaki MA, kesişme noktasındaki fiyattan farklıdır. Anladığım kadarıyla, sorgulayıcının komşu çubuklardan birindeki değer yerine tam olarak kesişme noktasındaki değere ihtiyacı var. Tam olarak bu değer, doğrusal enterpolasyon kullanılarak elde edilebilir - sonuçta, çubuklar arasındaki MA, düz çizgi parçaları tarafından oluşturulur. Veya komşu çubuklardaki her MA'nın koordinatlarını alın. Analitik olarak 2 düz çizgi çizin ve kesişme noktalarını hesaplayın. 2 benzer üçgeni göz önünde bulundurarak hesaplayabilirsiniz. Bir karşı soru ortaya çıkıyor - bu neden gerekli? Maliyetler sonucun değeri ile orantılı mı? Sonuçta, MA parametrelerinde minimum bir değişiklikle kesişme noktaları değişecektir. Büyük olasılıkla, bu kurs projesinin başkanı tarafından istenmektedir.

açıklama için teşekkürler, bunun kolay olmadığını anladım
 
missha32 :

Hesaplarda nerede hata yaptığımı bulamıyorum yardımcı olabilir misiniz?
Son gününen yüksek ve en düşük değerini bulmanız gerekiyor, ancak bir nedenden dolayı minimumu geçen gün içinde zaten buluyor.

Tüm bunların yerine, PERIOD_D1 periyodunu ve ilgili çubuğu veya zamanı belirten CopyHigh ve CopyLow'u kullanmak daha iyidir.

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
 
missha32 : Son günün en yüksek ve en düşük değerini bulmamız gerekiyor, ancak nedense en düşük, önceki gün zaten bulundu.
  // iHigh и iLow дают макс и мин цены указанного бара. Если PERIOD_D1, то целых суток  если 1 то вчерашних последних завершенных суток

   Alert ( "Максимум вчерашнего дня = " , iHigh ( _Symbol , PERIOD_D1 , 1 ));
   Alert ( "Минимум  вчерашнего дня = " , iLow ( _Symbol ,  PERIOD_D1 , 1 ));
Herhangi bir Zaman Çerçevesinin herhangi bir çubuğu, daha düşük Zaman Çerçevelerinin çubuklarının karşılık gelen aralığı hakkında genelleştirilmiş bilgiler içerir: Maksimum; minimum; aralıktaki ilk çubuğun açılma süresine eşit açılma süresi; aralıktaki son çubuğun kapanma zamanına eşit kapanma zamanı; hacim, aralık çubuklarının hacimlerinin toplamına eşittir. Bunun yerine, bu bilgi karşılık gelen dizilerde bulunur.
 
STARIJ :
Herhangi bir Zaman Çerçevesinin herhangi bir çubuğu, daha düşük Zaman Çerçevelerinin karşılık gelen çubuk aralığı hakkında genelleştirilmiş bilgiler içerir: Yüksek, Düşük, açılış ve kapanış süreleri ve alt çubuklardan gelen hacimlerin toplamına eşit hacim. Bunun yerine, bu bilgi karşılık gelen dizilerde bulunur.

Bunu yapardım ama sonraki algoritmaya göre verileri hesaplayamayabilirim çünkü dünün diğer değerlerini aramak zorunda kalabilirim ve yine yeniden yazma işlevlerinde bir tıkanıklık olacaktır.

Kodumdaki hatanın nerede olduğunu söylerseniz, çözemiyorum. Ekranda çubuk sayısını gösteriyorum, her şey birleşiyor, ancak maksimum veya minimum almaya çalıştığımda, olması gerekeni göstermiyor

 
missha32 :

Bunu yapardım ama sonraki algoritmaya göre verileri hesaplayamayabilirim çünkü dünün diğer değerlerini aramak zorunda kalabilirim ve yine yeniden yazma işlevlerinde bir tıkanıklık olacaktır.

Kodumdaki hatanın nerede olduğunu söylerseniz, çözemiyorum. Ekranda çubuk sayısını gösteriyorum, her şey birleşiyor, ancak maksimum veya minimum almaya çalıştığımda, olması gerekeni göstermiyor

O kadar yığılmışsın ki, anlamak için ellerin bile indirilmiş. Birinden diğerine dönüşümler dağı...

Ve hepsi günün maksimum ve minimumunu bulmak için mi?

Peki işinize yaramayan nedir?

 //+------------------------------------------------------------------+
double GetPriceMaximum( const string symbol_name, const ENUM_TIMEFRAMES timeframe, int shift){
   double array[ 1 ];
   ResetLastError ();
   if ( CopyHigh (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
   Print ( __FUNCTION__ , " > Ошибка копирования цены High: " , GetLastError ());
   return ( WRONG_VALUE );
}
//+------------------------------------------------------------------+
double GetPriceMinimum( const string symbol_name, const ENUM_TIMEFRAMES timeframe, int shift){
   double array[ 1 ];
   ResetLastError ();
   if ( CopyLow (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
   Print ( __FUNCTION__ , " > Ошибка копирования цены Low: " , GetLastError ());
   return ( WRONG_VALUE );
}
//+------------------------------------------------------------------+

Bugünün maksimumunu bulmanız mı gerekiyor? Rica ederim:

 double max_price=GetPriceMaximum( Symbol (), PERIOD_D1 ,0);

Dünün yüksekliğini bilmek mi gerekiyor? Kolayca:

 double max_price=GetPriceMaximum( Symbol (), PERIOD_D1 ,1);

Dünden önceki günün minimumunu bilmeniz mi gerekiyor? Sorun yok:

 double min_price=GetPriceMinimum( Symbol (), PERIOD_D1 ,2);

Kolay yoldan gidebilir ve tamamen dörtlü işlevleri kullanabilirsiniz:

 double price_max= iHigh ( Symbol (), PERIOD_D1 , 1 );

Ama tavsiye etmem - yeni dil yapıları kullanarak, kendinizi ve kodlarınızı bir gün dördün artık desteklenmeyeceği ve öz disiplin ve tüm bunlar için önceden hazırlayacaksınız;)

 
Artyom Trishkin :

O kadar yığılmışsın ki, ellerin bile düşüyor. Birinden diğerine dönüşümler dağı...

Ve hepsi günün maksimum ve minimumunu bulmak için mi?

Peki işinize yaramayan nedir?

Bugünün maksimumunu bulmanız mı gerekiyor? Rica ederim:

Dünün yüksekliğini bilmek mi gerekiyor? Kolayca:

Dünden önceki günün minimumunu bilmeniz mi gerekiyor? Sorun yok:

Kolay yoldan gidebilir ve tamamen dörtlü işlevleri kullanabilirsiniz:

Ama tavsiye etmem - yeni dil yapıları kullanarak, kendinizi ve kodlarınızı bir gün dördün artık desteklenmeyeceği ve öz disiplin ve tüm bunlar için önceden hazırlayacaksınız;)

Kendimde bir hata buldum (tüm dikkatsizlik, iHighest , iLowest parametrelerini yanlış okudu).

Bu yüzden uymuyor çünkü dünden itibaren başka hesaplamalar gerekecek

 
missha32 :

Kendimde bir hata buldum (tüm dikkatsizlik, iHighest, iLowest parametrelerini yanlış okudu).

Bu yüzden uymuyor çünkü dünden itibaren başka hesaplamalar gerekecek

Diğer hesaplamalar için basit ve doğal bir veri alımının neden engellendiğiniz açık değildir.
 
missha32 : satın almak için her bir kırmızı sinyal ve her bir sinyale kontör yükleyebilmeniz için her bir mavi sinyal satmak için

if(Kırmızı) SiparişGönder ( ... Satın Al ...) ; if( Mavi ) SiparişGönder( ... Satış ...) ;

Tam tersi, tepeden sat, alttan al...

OnInit işlevi (eski şekilde init ister) gösterge başlatıldığında yürütülür (aynı zamanda zaman çerçevesini değiştirirken, yeniden derlerken, ...). Kullanılan tüm değişkenler kendilerine atanmış bir değere sahip olmalıdır. OnInit işlevi SetIndexDrawBegin(0,i-1); i değişkenine bir değer atamak veya bir sabit kullanmak gerekli olacaktır.

 
STARIJ :

if(Kırmızı) OrderSend( ... Satın Al ...) ; if( Mavi ) SiparişGönder( ... Satış ...) ;

Tam tersi, tepeden sat, alttan al...

OnInit işlevi (eski şekilde init ister) gösterge başlatıldığında yürütülür (aynı zamanda zaman çerçevesini değiştirirken, yeniden derlerken, ...). Kullanılan tüm değişkenler kendilerine atanmış bir değere sahip olmalıdır. OnInit işlevi SetIndexDrawBegin(0,i-1); i değişkenine bir değer atamak veya bir sabit kullanmak gerekli olacaktır.

Dürüst olmak gerekirse hiçbir şey anlamadım, Mql4 programlamada yeniyim, zor değilse kod konusunda yardımcı olabilirsiniz.
 
missha32 :
Dürüst olmak gerekirse hiçbir şey anlamadım, Mql4 programlamada yeniyim, zor değilse kod konusunda yardımcı olabilirsiniz.

Serbest çalışma genellikle kod konusunda yardımcı olur.

Burada - ya algoritma ya da hatalarınızı düzeltin. Ama sizin için yeni bir şekilde yeniden yazmayın.