Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1410

 

Beyler, tüm profesyonellere ve nasıl yapılacağını bilenlere merhaba!

Bir göstergeden veri almakla ilgili bir sorunum var - lütfen bana yardım edin, kim yapabilir....

Fonksiyon Hedefi: Belirtilen dönem için"Bollinger Bantları" göstergesinin dış çizgileri arasındaki ortalama mesafeyi nokta cinsinden hesaplayın.

Sorunun özü: Belirtilen çubuk için gösterge çizgilerindeki fiyatın gerçek değerlerini alamıyorum, çünkü bazı nedenlerden dolayı aynı fiyat değeri göstergenin farklı arabelleklerine yazılıyor ve bu da gerçek değerlere karşılık gelmiyor. bu çubuktaki çizgilerden herhangi biri. Ve sonuç olarak, bilinmeyen bir fiyat değeri farklı arabelleklere (farklı isteklerde) yazılır ve bu da işlevin tüm diğer çalışmalarını geçersiz kılar.
Ayrıca, bu işlevdeki ile tamamen aynı yöntemi kullanarak, diğer göstergelerden göstergeler alabildim, ancak burada çalışmıyor....

int Bollinger_Bands(int _Average_Period, int _Number)
{
   double   Buffer_BASE_LINE[];                                                                          // Массив Буффера Линии BASE_LINE
   double   Buffer_UPPER_BAND[];                                                                         // Массив Буффера Линии UPPER_BAND
   double   Buffer_LOWER_BAND[];                                                                         // Массив Буффера Линии LOWER_BAND
   int      Bar_Cash             = _Average_Period;                                                                       // Количество плучаемых значений от индикатора
   int      Bands_Handel         = 0;                                                                       // Хендл индикатора Bollinger_Bands
   //---//
   double   Base_Line            = 0;                                                                       // Значение линии BASE_LINE
   double   Upper_Line           = 0;                                                                       // Значение линии UPPER_BAND
   double   Lower_Line           = 0;                                                                       // Значение линии LOWER_BAND
   //---//
   double   Band_Size_Buffer[];											// Буфер расчётных значений разницы между линиями индикатора 
   int      Band_Size_Total      = 0;										// Итог среднего значения расстояния между линиями в пунктах
   ENUM_APPLIED_PRICE   applied_price = PRICE_CLOSE; // тип цены 
   //---//
      ArrayResize(Band_Size_Buffer,_Average_Period+1);  
      ArrayResize(Buffer_UPPER_BAND,_Average_Period+1);
      ArrayResize(Buffer_LOWER_BAND,_Average_Period+1);
      //---//
         Bands_Handel = iBands(_Symbol,PERIOD_CURRENT,20,2,0,applied_price);
         //---//      
            CopyBuffer(Bands_Handel,0,_Number,_Average_Period,Buffer_BASE_LINE);       ArraySetAsSeries(Buffer_BASE_LINE,true);
            CopyBuffer(Bands_Handel,1,_Number,_Average_Period,Buffer_UPPER_BAND);      ArraySetAsSeries(Buffer_UPPER_BAND,true);
            CopyBuffer(Bands_Handel,2,_Number,_Average_Period,Buffer_LOWER_BAND);      ArraySetAsSeries(Buffer_LOWER_BAND,true);
            //---//

         //---//  Тут получение значений для выбранного номера бара из переменной которая передаётся в функцию (использовал как проверку получения данных по линиям)
         Base_Line   = NormalizeDouble(Buffer_BASE_LINE[_Number], _Digits);      //Alert("Base_Line[",_Number,"] = ",Base_Line);
         Upper_Line  = NormalizeDouble(Buffer_UPPER_BAND[_Number], _Digits);     //Alert("Upper_Line[",_Number,"] = ",Upper_Line);
         Lower_Line  = NormalizeDouble(Buffer_LOWER_BAND[_Number], _Digits);     //Alert("Lower_Line[",_Number,"] = ",Lower_Line);
             //---//
         
         
         //---// ** А это расчёт среднего расстояния между внешними линиями Боллинджера за указанный период. Получается 0 потому что одно число отнимается само от себя.
         for(int i=_Average_Period; i>=0; i--) { 
         //---//
            Upper_Line  = NormalizeDouble(Buffer_UPPER_BAND[i], _Digits);     //Alert("Upper_Line[",i,"] = ",Upper_Line);
            Lower_Line  = NormalizeDouble(Buffer_LOWER_BAND[i], _Digits);     //Alert("Lower_Line[",i,"] = ",Lower_Line);
            //---//
               Band_Size_Buffer[i] = NormalizeDouble( ((Upper_Line - Lower_Line) / _Point), 2);     //Alert("Band_Size_Buffer[",i,"] = ",Band_Size_Buffer[i]);
              }//---//
         
               Band_Size_Total = (int) MathMean(Band_Size_Buffer);
               //---//

   
 return(Band_Size_Total);
}
 

Standart kütüphanenin kullanımıyla ilgili bir karışıklık var.
Standart kütüphaneyi kullanarak bir sipariş açtıktan sonra bilet nasıl alınır?
Sunucu yanıtının burada zaten alındığından emin olabilir miyim? Sunucudan yanıt beklerken terminal kilitleniyor mu? Bu açık değil.

                     if(!m_trade.BuyLimit(...))
                       {
                        ...
                       }
                     else
                       {
                       int ticket=m_trade.RequestOrder();  // ??? 
                        ...
                        a[n]=ticket; 
                       }

MQ4'te her şey basitti:

         ticket=OrderSend(...);
         if(ticket>0)
           {
            ...
            a[n]=ticket;
           }
 
Nauris Zukas Standart kütüphanenin kullanımıyla ilgili bir karışıklık var.
Standart kütüphaneyi kullanarak bir sipariş açtıktan sonra bilet nasıl alınır?
Sunucu yanıtının burada zaten alındığından emin olabilir miyim? Sunucudan yanıt beklerken terminal kilitleniyor mu? Anlamıyorum.

MQ4'te her şey basitti:

OnTradeTransaction() olay işlemini kullanmak daha iyidir

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

OnTradeTransaction() olay işleyicisini kullanmak daha iyidir

Teşekkürler! O zaman birkaç fonksiyonu yeniden yapmam gerekecek.

Belki bir yerlerde mql5 üzerinde kaymayı hesaplayan bir fonksiyon görmüşsünüzdür?

 
Nauris Zukas #:

Teşekkür ederim! O zaman birkaç işlevi yeniden yapmam gerekecek.

Bir yerlerde mql5 üzerinde kaymayı hesaplayan bir fonksiyon gördünüz mü?

Neden arıyorsunuz? OnTradeTransaction'da emir verme olayını yakalar, emir fiyatını okur, ardından işlemi yakalar, işlem fiyatını okur ve bu fiyatların farkını alırsınız.

Ayrıca küresel düzeyde bir değişken oluşturabilir, emri gönderirken fiyatı içine yazabilir ve OnTradeTransaction'da işlemin fiyatını alabilirsiniz...

 

Alexey Viktorov #:

Ayrıca global düzeyde bir değişken oluşturabilir, emir gönderildiğinde fiyatı içine yazabilir ve OnTradeTransaction 'da işlemin fiyatını alabilirsiniz....

Bu seçenek kesinlikle devre dışıdır. Çok sayıda emir gönderirsem bilet olmadan bir fiyata ne ihtiyacım var, OnTradeTransaction bununla nasıl başa çıkacak?

 
Nauris Zukas #:

Bu seçenek kesinlikle devre dışı. Çok sayıda emir gönderirsem bilet olmadan ne fiyatlandırırım, OnTradeTransaction bununla nasıl başa çıkacak?

Pozisyon kimliğine göre herhangi bir sorun olmadan sıralanacaktır.

Bir işlem alırsınız, ondan pozisyon kimliği alırsınız, bu kimliğe göre geçmişten emirleri ve işlemleri çekersiniz ve emir ve işlem fiyatlarını IN olarak okursunuz.

Belgeleri okuyun. Orada pek çok ilginç şey bulabilirsiniz.

 

Alexey Viktorov #:

Bir işlem alırsınız, ondan pozisyon kimliğini alırsınız, bu kimliğe göre geçmişten emirleri ve işlemleri çekersiniz ve emir ve işlem fiyatlarını IN olarak okursunuz.

Her şey açık! Ancak, bir emir gönderirken kaydedilen fiyatla ikinci seçenek, global düzeyde ve ardından OnTradeTransaction'da işlemin fiyatını almak... bu benim için net değil. Neden emri gönderirken (emre) bağlı olmayan bir fiyatı kaydedelim?


Kısacası, bu şekilde yapacağım - işlemi alın, sonra diğer her şeyi çıkarın.

 
Adam Dee "Bollinger Bantları" göstergesinin dış çizgileri arasındaki ortalama mesafeyi nokta cinsinden hesaplayın.

Sorunun özü: Belirtilen çubuk için gösterge satırlarındaki fiyatın gerçek değerlerini alamıyorum, çünkü bazı nedenlerden dolayı aynı fiyat değeri göstergenin farklı arabelleklerine yazılıyor ve bu da gerçek değerlere karşılık gelmiyor. bu çubuktaki satırlardan herhangi biri. Ve sonuç olarak, bilinmeyen bir fiyat değeri farklı arabelleklere (farklı isteklerde) yazılır ve bu da işlevin tüm diğer çalışmalarını geçersiz kılar.
Ayrıca, bu işlevdeki ile tamamen aynı yöntemi kullanarak, diğer göstergelerden göstergeler alabildim, ancak burada çalışmıyor....

Bolinger, SMA +- N * standart sapmalardır.

Standart sapma ve SMA hakkında kendi göstergeleri vardır. Ancak hepsi onlar olmadan hesaplanır - bir referans kitabı alın ve işte bir formül. Buradan, varsayılan değerlere göre şu anda 4 sigmaya eşit olan "çizgiler arasındaki noktalarda ortalama mesafeyi" bulursunuz.
Ve ortalama (hangi dönem için?), hesaplamak için zahmet ediyor musunuz?

Fiilen standart sapmanın ortalamasını bilmek istiyorsunuz.

 
Nauris Zukas #:

Bu açık! Ancak, emri gönderirken fiyatı global düzeyde kaydetme ve ardından OnTradeTransaction'da işlemin fiyatını alma şeklindeki ikinci seçenek... bu benim için net değil. Neden emri gönderirken (emre) bağlı olmayan bir fiyatı kaydedelim?


Kısacası, bu şekilde yapacağım - ticareti yapın, sonra diğer her şeyi çıkarın.

Bu, her şeyin zamanında olacağı sakin ticaret hakkında söylendi... Bunu dikkate almadan

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum

Yeni başlayanlardan gelen sorular MQL5 MT5 MetaTrader 5

Nauris Zukas, 2022.06.11 17:49

Bu seçenek kesinlikle devre dışı. Çok sayıda sipariş gönderirsem, bilet olmadan benim için fiyat nedir, OnTradeTransaction bununla nasıl başa çıkacak?