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

 
Ve ayrı ayrı 2 dosya Market'e yerleştirilemez. Politika bu.
 
Aleksei Stepanenko # :

İşte gösterge:

İşte uzman:

İşte her şey tek bir dosyada:

Dört doğru, ama aynı zamanda ilk beşte.

Yalnızca Expert dosyasını derlediniz.

Uzman Danışman tarafından çağrılması için göstergeyi en az basit bir grafik nesne ile doldurmaya çalışın. Ardından, derlemeden sonra Res_Ind.ex4'ü, Market'e yalnızca Expert dosyasını gönderiyormuş gibi yeniden adlandırın veya silin. İstemci çalışmayan bir program alacaktır.

 
Aleksei Stepanenko # :
Ve ayrı ayrı 2 dosya Market'e yerleştirilemez. Politika bu.
Ne hakkında konuşuyoruz...
 
Dmitriy VC # :

Yalnızca Expert dosyasını derlediniz.

Uzman Danışman tarafından çağrılması için göstergeyi en az basit bir grafik nesne ile doldurmaya çalışın. Ardından, derlemeden sonra Res_Ind.ex4'ü, Market'e yalnızca Expert dosyasını gönderiyormuş gibi yeniden adlandırın veya silin. İstemci çalışmayan bir program alacaktır.

Evet, bu kadar inatçı olamazsın... Kaynak tarafından bağlanan göstergenin danışmanın yürütülebilir dosyasında yer aldığı söyleniyor, öyle.

Ancak göstergenizin grafik nesneler çizmesi ve danışmanın bunları okuması büyük bir sorundur. Grafik nesneler yalnızca görselleştirme ile test edilirken kullanılabilir ve otomatik doğrulayıcı onsuz test eder, bu nedenle nesnelerin özelliklerini görmez...

 
Alexey Viktorov # :

Kaynak tarafından bağlanan göstergenin danışmanın yürütülebilir dosyasına dahil edildiği söylenir, öyledir.

Ayrı bir pencerede gösterge

 //+------------------------------------------------------------------+
//|                                                          win.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {

   IndicatorSetString ( INDICATOR_SHORTNAME , "win" );

   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);
  }
//+------------------------------------------------------------------+

Göstergeyi Derleme --> win.ex5.

Kaynakta bu Göstergeye sahip Uzman Danışman

 //+------------------------------------------------------------------+
//|                                                          exp.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        " https://www.mql5.com "
#property version    "1.00"

#resource "\\Indicators\\win.ex5"
char       number    = - 1 ;
int        handle    = INVALID_HANDLE ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {

   if (number< 0 )
     {
      handle= iCustom ( _Symbol , _Period , "win.ex5" );
      number= char ( ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL ));

       if (handle!= INVALID_HANDLE )
        {
         ChartIndicatorAdd ( 0 ,number,handle);
        }
     }

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   if (reason== REASON_REMOVE )
     {
       ChartIndicatorDelete ( 0 , int ( ChartWindowFind ( 0 , "win" )), "win" );
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---

  }
//+------------------------------------------------------------------+

Uzmanı Derleme --> exp.ex5.

Expert Advisor'ı başlatıyoruz, grafikte bir gösterge penceresi var.

Market'te bir exp.ex5 uzman dosyası yayınlıyoruz (aslında win.ex5 gösterge dosyasını siliyoruz)

Expert Advisor'ı başlatıyoruz, grafikte gösterge penceresi yok.

Silinen win.ex5 dosyasını geri yükleme.

Expert Advisor'ı başlatıyoruz, grafikte bir gösterge penceresi var.


Sonuç: Gösterge kodu, Uzman Danışman koduna dahil değildir. Kaynak Göstergesi olan bir Uzman Danışmanın normal çalışması için, kaynakta belirtilen Göstergenin yürütülebilir dosyası gereklidir.


Sorumu tekrar edeceğim:

Özel Gösterge, kitaplık, ör. Expert'in düzgün çalışması için birden fazla dosyaya mı ihtiyacınız var?

Dosyalar:
win.mq5  2 kb
exp.mq5  4 kb
 
Dmitriy VC # :

Ayrı bir pencerede gösterge

Göstergeyi Derleme --> win.ex5.

Kaynakta bu Göstergeye sahip Uzman Danışman

Uzmanı Derleme --> exp.ex5.

Expert Advisor'ı başlatıyoruz, grafikte bir gösterge penceresi var.

Market'te bir exp.ex5 uzman dosyası yayınlıyoruz (aslında win.ex5 gösterge dosyasını siliyoruz)

Expert Advisor'ı başlatıyoruz, grafikte gösterge penceresi yok.

Silinen win.ex5 dosyasını geri yükleme.

Expert Advisor'ı başlatıyoruz, grafikte bir gösterge penceresi var.


Sonuç: Gösterge kodu, Uzman Danışman koduna dahil değildir. Kaynak Göstergesi olan bir Uzman Danışmanın normal çalışması için, kaynakta belirtilen Göstergenin yürütülebilir dosyası gereklidir.


Sorumu tekrar edeceğim:

Özel Gösterge, kitaplık, ör. Expert'in düzgün çalışması için birden fazla dosyaya mı ihtiyacınız var?

Size kaç kez belgelere bağlantı verildi? Annem okumama izin vermiyor mu?

      handle= iCustom ( _Symbol , _Period , "win.ex5" ); // Это делается не так!!!!

Sonunda oku...

 
Alexey Viktorov # :

Size kaç kez belgelere bağlantı verildi? Annem okumama izin vermiyor mu?

Sonunda oku...

Alexey, hatayı doğrudan belirttiğin için teşekkür ederim.

Belgeleri okudum ama "gözlerimde değildi".

Her şeyden önce özür dilerim - adım attı.

Şimdi anlaşıldı.

 

Lütfen bana söyle.

Çubuk sayısı hesaplamasını sınıfa ekledim (:RatesTotal(void)), yapıya nasıl doğru bir şekilde sığdıracağımı çözemiyorum. Bunun gibi bir şey çıktı. Lütfen bana nasıl daha iyi hale getireceğimi söyle.

 #include <Arrays\ArrayObj.mqh>
/********************************************************************\
|   Класс Новый бар                                                  |
\********************************************************************/
class CNewBar : public CObject
  {
private :
   string             m_symbol;
   ENUM_TIMEFRAMES    m_timeframe;
   datetime           m_time;
   long               m_rt;
   datetime           Time( void );  
   long               RatesTotal( void );   
   string              Symbol ( void )         { return this .m_symbol;    }
public :
   ENUM_TIMEFRAMES    Timeframe( void )      { return this .m_timeframe; }
   datetime           GetTime( void )        { return this .m_time;      } //  Возвращает время последнего обращения
   long               GetRatesTotal( void )     { return this .m_rt; }
   bool               IsNewBar( void );                                   //  Основная функция класса
                     CNewBar( const string symbol, const ENUM_TIMEFRAMES timeframe);
                    ~CNewBar( void ) {;}
  };
//+------------------------------------------------------------------+
//|    Конструктор                                                   |
//+------------------------------------------------------------------+
CNewBar::CNewBar( const string symbol, const ENUM_TIMEFRAMES timeframe) : m_time( 0 )
  {
   this .m_symbol = symbol;
   this .m_timeframe = (timeframe == PERIOD_CURRENT ? Period () : timeframe);
  }

//+------------------------------------------------------------------+
//|  Возвращает количество баров в истории                           |
//+------------------------------------------------------------------+
long CNewBar::RatesTotal( void )
  {
//---- получим количество баров
   long rt= SeriesInfoInteger ( this .m_symbol, this .m_timeframe, SERIES_BARS_COUNT );
//---- Проверка количества
   if (rt< 1 )
       Print ( "Error " + __FUNCTION__ + " Не определенно кол-во баров " , this .m_symbol, " " , this .m_timeframe);
//----
   return (rt);
  };
 //+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar( void )
  {
   m_rt= this .RatesTotal();
   datetime tm= this .Time();
   if (tm== 0 || m_rt< 1 )
       return false ;
   if (tm!= this .m_time)
     {
       this .m_time = tm;
       return true ;
     }
   return false ;
  }
 
Dmitriy VC # :

Şimdi anlaşıldı.

Adım atmadı, ama bilmiyordu. Hiç sorun değil :)

 

Nasıl olduğunu çözemediğim prev_calculated hesaplamasının bir analogunun nasıl organize edileceğini önerebilir misiniz?


 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CNewBar:: PrevCalculated ( void )
  {
   int pc= this .m_rt
   return (pc)
  }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar( void )
  {
   datetime tm= this .Time();

   if (tm== 0 || m_rt< 1 )
       return false ;
   if (tm!= this .m_time)
     {
       //--- определяем время
       this .m_time = tm;
       //--- определяем кол-во
       this .m_rt= this .RatesTotal();
       return true ;
     }
   return false ;
  }