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

 
barabashkakvn :
Gösterge koduna, OnCalculate() işlevine bakın.

Ben şöyle yapıyorum:

 int limit=rates_total-prev_calculated;
   double pr=close[ 0 ];
   //----
   if (rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
       //----
   for ( int i=limit- 1 ;i>= 0 ;i--)
     {
       CopyBuffer (ma1Handle, 0 ,i, 1 ,ma1Val);
      ExtMapBuffer1[i]=ma1Val[ 0 ]-pr;
     }
Hiç birşey çalışmıyor. MQL4'te her şey açıktır. MQL5 hakkında fazla bilgim yok. Muhtemelen, fiyatı almak için bazı işlevleri çağırmanız mı gerekiyor?
 
forexman77 :

Ben şöyle yapıyorum:

Hiç birşey çalışmıyor. MQL4'te her şey açıktır. MQL5 hakkında fazla bilgim yok. Muhtemelen, fiyatı almak için bazı işlevleri çağırmanız mı gerekiyor?

OnInit'e yazın:

 //--- установим индексацию для буфера как в таймсерии 
ArraySetAsSeries (ma1Val, true ); 
 
forexman77 :

Ben şöyle yapıyorum:

Hiç birşey çalışmıyor. MQL4'te her şey açıktır. MQL5 hakkında fazla bilgim yok. Muhtemelen, fiyatı almak için bazı işlevleri çağırmanız mı gerekiyor?

Fiyat geçmişine erişmek için CopyRates'i kullanabilirsiniz ( CopyBuffer'a benzer).

Ask, Bid fiyatlarının güncel değerleri SymbolInfoTick veya SymbolInfoDouble kullanılarak elde edilebilir ( Spread göstergesinde olduğu gibi).

 
barabashkakvn :

OnInit'e yazın:

Otomatik Ticaret :
Fiyat geçmişine erişmek için CopyRates'i kullanabilirsiniz ( CopyBuffer'a benzer). Ask, Bid fiyatlarının güncel değerleri SymbolInfoTick kullanılarak alınabilir.

Hiç birşey çalışmıyor. İşte kodun tamamı:

 #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_label1   "BUY TP"
input int Period_= 34 ;
int ma1Handle;
double ma1Val[ 1 ];
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   SetIndexBuffer ( 0 ,ExtMapBuffer1, INDICATOR_DATA );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0.0 );
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,Period_);
   ArraySetAsSeries (ExtMapBuffer1, true );
   ma1Handle= iMA ( _Symbol , _Period ,Period_, 0 , MODE_EMA , PRICE_CLOSE );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 limit=rates_total-prev_calculated;
   //----
   if (rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
       //----
   for ( int i=limit- 1 ;i>= 0 ;i--)
     {
       MqlTick latest_price;       // Будет использоваться для текущих котировок
       if (! SymbolInfoTick ( _Symbol ,latest_price))
          {
           Alert ( "Ошибка получения последних котировок - ошибка:" , GetLastError (), "!!" ); return ( 0 );
          }
       double iclose=latest_price.bid;
       CopyBuffer (ma1Handle, 0 ,i, 1 ,ma1Val);
      ExtMapBuffer1[i]=iclose - ma1Val[ 0 ];
     }
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
forexman77 :

Hiç birşey çalışmıyor. İşte kodun tamamı:

Peki neden olmasın. Her şeyi yapabilirim:

Gösterge çalışıyor!

Dosyalar:
test.mq5  3 kb
 
Вbarabashkakvn :

Peki neden olmasın. Her şeyi yapabilirim:

Görsel olarak, ilk bakışta doğru gibi görünüyor. Ancak, fiyat ile hareketli ortalama arasındaki farkı yeniden hesaplayarak tamamen farklı bir rakam elde edilir.

EURUSD/1.36421-1.36168=0.00253'ü kontrol ettim ve gösterge 0.00157'yi gösteriyor, ekran görüntüsünü ekliyorum.

 

Tünaydın.

KimIV'in MQL4 http://forum.mql4.com/ru/38949'da olduğu gibi MQL5'te bir yerlerde hazır fonksiyon kodları var mı?

Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
forexman77 :

Görsel olarak, ilk bakışta doğru gibi görünüyor. Ancak, fiyat ile hareketli ortalama arasındaki farkı yeniden hesaplayarak tamamen farklı bir rakam elde edilir.

EURUSD/1.36421-1.36168=0.00253'ü kontrol ettim ve gösterge 0.00157'yi gösteriyor, ekran görüntüsünü ekliyorum.

Ve, peki, isteklerde daha kesin olmanız gerekir. Şimdi doğru sayıyor.
Dosyalar:
test.mq5  3 kb
 
abeiks :

Tünaydın.

KimIV'in MQL4 http://forum.mql4.com/ru/38949'da olduğu gibi MQL5'te bir yerlerde hazır fonksiyon kodları var mı?

mql5, işlev kodlarını değil, nesne kitaplıklarını kullanır. İşlevlerin bağlanması zordur, OOP'de daha kolaydır: gerekli kitaplığı bağlarız, bir nesne oluştururuz ve içinde gerekli yöntemleri alırız - algoritmik dillerdeki işlevlerin analogları.
 
Sinyale abone oldum, söyleyin sinyalin çalışması için terminalin devreye girmesi ve hesabın açılması gerekli mi?