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

 
Vladimir Karputov # :

OnDeinit'te yapmanız gereken ObjectsDeleteAll - önekle sil (sizin durumunuzda önek "HLine" dir)

Ve hangi satırda "HLine" yazmalı?

 
Green handsome # :

Ve hangi satırda "HLine" yazmalı?

Tam olarak net olmayan ne?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5

Vladimir Karputov , 2021.09.10 15:53

OnDeinit'te yapmanız gereken ObjectsDeleteAll - önekle sil ( sizin durumunuzda önek "HLine" dir )

 int    ObjectsDeleteAll (
   long            chart_id,   // идентификатор графика
   const string      prefix,   // префикс имени объекта
   int        sub_window=- 1 ,   // индекс окна
   int       object_type=- 1      // тип объекта для удаления
   );


 
Vladimir Karputov # :

Tam olarak net olmayan ne?


 int    ObjectsDeleteAll (
   long            chart_id,   // идентификатор графика
   const string       HLine,   // префикс имени объекта
   int        sub_window=- 1 ,   // индекс окна
   int       object_type=- 1      // тип объекта для удаления
   
   );

Ben de öyle yaptım yine silinmiyor.

 
void OnDeinit ( const int reason)
  {
     {
       ObjectsDeleteAll ( 0 ,prefix, 0 );
     }
//---
   //ChartRedraw();
  }

önek, grafik etiketleri oluşturmak için adlar içerir

ön ekin ne anlama geldiğini biliyor musun?

 
Fast235 # :

önek, grafik etiketleri oluşturmak için adlar içerir

ön ekin ne anlama geldiğini biliyor musun?

MQL'yi hiç anlamıyorum.... Birkaç satırı düzelteyim dedim, o kadar.

 
Green handsome # :

MQL'yi hiç anlamıyorum.... Birkaç satırı düzelteyim dedim, o kadar.

yukarıdaki kod yardımcı olmalıdır, aksi takdirde hangi önek nesnelerinin oluşturulduğuna bakın

 

Sol üst köşedeki alt pencerede kısa adın görüntülenmemesinin nedeni nedir?


Ayrıca, grafiğe bir gösterge yüklenirse, ikinci kopya artık çalışmaz - OnInit() = çalışmaz ve hiçbir şey yazdırmaz. Ancak "Giriş parametrelerini" başkalarına değiştirirseniz - çalışır

 #property indicator_separate_window

#property indicator_plots 0

input int MASlow = 21 ; // Период медленной МА
input int MAFast = 8 ;   // Период быстрой МА

//+------------------------------------------------------------------+
string prog_name,short_name;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ( void )
{
  prog_name= MQLInfoString ( MQL_PROGRAM_NAME );
  short_name= "=Set (" +( string )MASlow+ "/" +( string )MAFast+ ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
   Print ( "INIT_SUCCEEDED" );
   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[])
{
//---

//--- return value of prev_calculated for next call
   return (rates_total);
}

---

Yanlış olan, mt4'te bu kod çalışıyor.

 
Vitaly Muzichenko # :

Sol üst köşedeki alt pencerede kısa adın görüntülenmemesinin nedeni nedir?


Ayrıca, grafiğe bir gösterge yüklenirse, ikinci kopya artık çalışmaz - OnInit() = çalışmaz ve hiçbir şey yazdırmaz. Ancak "Giriş parametrelerini" başkalarına değiştirirseniz - çalışır

---

Yanlış olan, mt4'te bu kod çalışıyor.

Çok kısa kesildiği için olabilir mi? Ekran yok, arabellek yok... Neden böyle bir göstergenin ikinci bir kopyasını yapıyorsunuz, böylece terminal kendi iradesiyle...

 
Vitaly Muzichenko # :

Sol üst köşedeki alt pencerede kısa adın görüntülenmemesinin nedeni nedir?


Ayrıca, grafiğe bir gösterge yüklenirse, ikinci kopya artık çalışmaz - OnInit() = çalışmaz ve hiçbir şey yazdırmaz. Ancak "Giriş parametrelerini" başkalarına değiştirirseniz - çalışır

---

Yanlış olan, mt4'te bu kod çalışıyor.

bir şey eksik - muhtemelen bir tür özellik , bununla da karşılaştım, ancak bir gösterge çizdim, her şey yolunda

 #property copyright "Copyright 2021, IgorM"
#property link        " https://www.mql5.com/ru/users/igorm "
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2
//--- indicator buffers
double          Label1Buffer[];
input int MASlow = 21 ; // Период медленной МА
input int MAFast = 8 ;   // Период быстрой МА
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
   string short_name = MQLInfoString ( MQL_PROGRAM_NAME ) + "=Set (" + ( string )MASlow + "/" + ( string )MAFast + ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME , short_name);
   SetIndexBuffer ( 0 , Label1Buffer, INDICATOR_DATA );
//---
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
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[])
{
   for ( int i = prev_calculated == 0 ? 0 : prev_calculated - 1 ; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return (rates_total);
}
//+------------------------------------------------------------------+

gösterge adının alt pencerede yazmayı bıraktığında arama yapmak için yorum yapabilirsiniz ... ama çok tembel

 
Igor Makanu # :

bir şey eksik - muhtemelen bir tür özellik , bununla da karşılaştım, ancak bir gösterge çizdim, her şey yolunda

gösterge adının alt pencerede yazmayı bıraktığında arama yapmak için yorum yapabilirsiniz ... ama çok tembel

Veriler görüntülenir, ancak OnInit () işlevi çalışmadıysa nereden? Grafiğe bir kopya atarız ve OnInit() yanlışlıkla çalışabilir, ancak başka bir kopya varsa, o kadar, baskı olmasa bile. Ancak giriş parametrelerini değiştirirseniz - çalışır.

 #property copyright "Copyright 2021, IgorM"
#property link        " https://www.mql5.com/ru/users/igorm "
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2


input int MASlow = 21 ; // Период медленной МА
input int MAFast = 8 ;   // Период быстрой МА

//+------------------------------------------------------------------+
int wndNum;
string short_name;
double Label1Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
  short_name= "Set (" +( string )MASlow+ "/" +( string )MAFast+ ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
  wndNum= ChartWindowFind ();
   Print ( "INIT SUCCEEDED: " +( string )wndNum);
   SetIndexBuffer ( 0 , Label1Buffer, INDICATOR_DATA );
//---
   return ( INIT_SUCCEEDED );
}

//+------------------------------------------------------------------+
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[])
{
   for ( int i = prev_calculated == 0 ? 0 : prev_calculated - 1 ; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return (rates_total);
}

---

Çıktı nedir, OnInit neden çalışmıyor?