Hatalar, hatalar, sorular - sayfa 2016

 
fxsaber :

CopyBuffer INF'nin tamamı var.

Kayan bir sayma algoritmasıyla, tüm tamponun INF olması için ilk başta sadece iki DBL_MAX fiyatı yeterlidir.

DBL_MAX + DBL_MAX = INF

ve sonra INF hesaplamaları bırakmayacak

EMPTY_VALUE'u hesaba katmamak için tüm göstergelerin kodunu değiştirmeniz gerekiyor
 
A100 :

Kayan bir sayma algoritmasıyla, tüm ara belleğin INF olması için ilk başta yalnızca iki DBL_MAX fiyatı yeterlidir.

DBL_MAX + DBL_MAX = INF

ve sonra INF hesaplamaları bırakmayacak

Bu seçenek oldukça olasıdır, çünkü. Mashka periyodunun altındaki değerler sadece DBL_MAX ile tıkanır. Daha sonra hata, tekrarlayan ortalama algoritmasında bulunur - MODE_SMA.

Ve orada! Değişiklikler yapıldı ve işe yaradı

 // Вычисляем Машку от Машки через хэндл самого себя
#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots    1 

#property indicator_type1   DRAW_LINE 
#property indicator_color1   clrRed 
#property indicator_style1   STYLE_SOLID 
#property indicator_width1   1 

input bool CustomData = false ; // true - кастомный режим для iCustom
input int MAPeriod = 1 e1;       // Период МАшки

string GetMyName( void )
{
   const int Length = StringLen ( TerminalInfoString ( TERMINAL_DATA_PATH ) + "\\MQL5\\Indicators\\" );
   const string Path = MQLInfoString ( MQL_PROGRAM_PATH );
  
   return ( StringSubstr (Path, Length, StringLen (Path) - Length - 4 ));
}

double Buffer[];
const bool Init = SetIndexBuffer ( 0 , Buffer, INDICATOR_DATA );

const int handleMA = CustomData ? iMA ( NULL , PERIOD_CURRENT , 100 , 0 , MODE_SMA , PRICE_OPEN ) // от этой МАшки будет брать другую Машку, но не напрямую, а кастомно
                                : iMA ( NULL , PERIOD_CURRENT , MAPeriod, 0 , MODE_SMA , iCustom ( _Symbol , PERIOD_CURRENT , GetMyName(), true ));

int Replace( double &Array[], const double NewValue = 1 e3, const double PrevValue = EMPTY_VALUE )
{
   for ( int i = ArraySize (Array) - 1 ; i >= 0 ; i--)
     if (Array[i] == PrevValue)
      Array[i] = NewValue;
      
   return ( 0 );
}

int OnCalculate ( const int rates_total,       // размер входных таймсерий 
                 const int prev_calculated,   // обработано баров на предыдущем вызове
                 const datetime & time[],     // Time 
                 const double & open[],       // Open 
                 const double & high[],       // High 
                 const double & low[],         // Low 
                 const double & close[],       // Close 
                 const long & tick_volume[],   // Tick Volume 
                 const long & volume[],       // Real Volume 
                 const int & spread[] )       // Spread 
{
   return (prev_calculated + CopyBuffer (handleMA, 0 , prev_calculated, rates_total - prev_calculated, Buffer) + Replace(Buffer) );
}

Tekrarlayan iMA algoritmasının girdi olarak DBL_MAX sağlandığında durumu hesaba katmadığı kesin olarak söylenebilir. Böcek.


@A100 Teşekkürler!

 

Ekli dosyayı derlemeye çalışırken MetaEditor kilitleniyor

Hemen donmazsa biraz beklemeniz veya son satıra gidip derleme zamanını görmeniz gerekiyor.

Dosyalar:
Test0.mq5  1 kb
 

Fare ile üzerine gelindiğinde açılan pencerede sipariş/fırsat numarasını neden göstermiyorsunuz? Bunu bin yıl önce sormuştum, bu çok eksik!

 
fxsaber :


 return (prev_calculated + CopyBuffer (handleMA, 0 , prev_calculated, rates_total - prev_calculated, Buffer ) + Replace( Buffer ));

Bu tür yapılardan kaçınılmalıdır. C++'da işlenen yürütme sırası düzenlenmemiştir, bu nedenle her şey belirli bir derleyicinin takdirindedir. Bunun istisnası, işlenenlerin her zaman soldan sağa doğru değerlendirildiği && ve || operatörleridir.

 
Alexey Navoykov :

Bu tür yapılardan kaçınılmalıdır. C++'da işlenen yürütme sırası düzenlenmemiştir, bu nedenle her şey belirli bir derleyicinin takdirindedir. Bunun istisnası, işlenenlerin her zaman soldan sağa doğru değerlendirildiği && ve || operatörleridir.

Eh, biz MQL'deyiz!

 
fxsaber :

Eh, biz MQL'deyiz!

Belgeler belirli bir sipariş hakkında hiçbir şey söylemiyor. Bu nedenle, istedikleri zaman kendi takdirlerine bağlı olarak değiştirebilirler.

Bu sorunu açıklığa kavuşturmak için hizmet masasıyla zaten bir kez iletişime geçtim.

 

Merhaba. Grafikte görüntülenen göstergelerin ve parametrelerinin bir listesini almak için hangi işlevlerin kullanılabileceğini söyler misiniz? Sadece bir fonksiyon buldum. bu, grafikteki göstergelerin sayısını döndürür

Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
У каждого графика можно посмотреть списки наложенных объектов: индикаторов, аналитических объектов и советников. Там же можно можно редактировать их свойства и удалять их с графика. Список индикаторов Индикаторы сгруппированы на наложенные на основное окно графика и на те, что открыты в отдельных окнах. Выберите индикатор и нажмите "Свойства...
 
Aleksandr Teleguz :

Merhaba. Grafikte görüntülenen göstergelerin ve parametrelerinin bir listesini almak için hangi işlevlerin kullanılabileceğini söyler misiniz? Sadece bir fonksiyon buldum. bu, grafikteki göstergelerin sayısını döndürür

GöstergeParametreleri (+ Gösterge Yayını)

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorParameters
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorParameters
  • www.mql5.com
//| Script program start function                                    |                          +                                    p,                                                                        parameters[p].integer_value,                                    parameters[p].double_value...
 
Alexey Navoykov :

Belgeler belirli bir sipariş hakkında hiçbir şey söylemiyor . Bu nedenle, istedikleri zaman kendi takdirlerine bağlı olarak değiştirebilirler.

Bunun için uğraşmıyorum. Orada pek çok şey anlatılmıyor.

Navskidu

  • MT4/5'te ticaret geçmişi kayıtlarını zamana göre sıralama.
  • Genel /statik bir değişkeni bir işlev tarafından başlatma yeteneği nispeten yenidir.
  • Önişlemci yönergelerini tek satırda ayarlamak yakında kapatılacak.
  • Operandların soldan sağa yürütülmesi.
  • OrderSend, vakaların %99'unda ticaret ortamıyla senkronize edilir.
  • ChartApplyTemplate eşzamansızdır.
  • ve daha birçok belgelenmemiş nüans. Ancak belgelerin gerçeğe uymadığı durumlar hala var. Ve bu bir hata değil, sadece bahsedilmeyen nadir bir özellik.

Bir emsal vardı - rol almayı reddetmek, ama bir sebep vardı.

Bu nedenle, bir şeyi açıklanmadığı için kullanmamak şüpheli bir karardır.


Böyle bir kodun programcılar arasında şüphe yaratmayacağını düşünüyorum.

 int Replace( double &Array[], int );

return (prev_calculated + Replace( Buffer , CopyBuffer (handleMA, 0 , prev_calculated, rates_total - prev_calculated, Buffer )));

Ancak, bir şekilde çirkin. MyCopyBuffer yazmak mantıklıdır, ancak kısa bir kodda hatayı atlamak için bunun gerekli olduğunu açıkça göstermek yine çirkindir. Bu nedenle, belgelenmemiş işlenen yürütme önceliğinin kullanılması, bunun geçici bir çözüm olduğunu göstermenin en iyi yoludur.

Neden: