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

 

Göstergeyi düzeltmeye yardımcı olun, MT5 terminalinde görüntülenmiyor, derleme sırasında hata veriyor.

 //--- descriзгo
#property description "Script cria objeto grбfico de \"Texto\"."
//--- janela de exibiзгo dos parвmetros de entrada durante inicializaзгo do script
#property script_show_inputs


//--- entrada de parвmetros do script
input int                IHistoryBars= 25 ;           // Check Historical Data
input string             InpFont= "Tahoma" ;       // Font Type
input int                InpFontSize= 7 ;           // Size of fonts
input color              UpColor= clrGold ;         // Cor Up
input color              DwColor= clrRoyalBlue ;         // Cor Dw
input color              HLColor= clrAqua ;         // Cor Center
input bool               InpBack= false ;           // Objeto de fundo
input bool               InpSelection= false ;       // Destaque para mover
input bool               InpHidden= true ;           // Ocultar na lista de objetos
input bool               WithDigit= true ;           // Ocultar na lista de objetos
input long               InpZOrder= 0 ;             // Prioridade para clique do mouse


int digits= 0 ,extradig= 0 ;

double             InpAngle= 0.0 ;           // Вngulo de inclinaзгo em graus
ENUM_ANCHOR_POINT InpAnchor= ANCHOR_CENTER ; // Tipo de ancoragem
double    gBars= 0 ;
double    gTotalRates= 0 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
  {
   digits= MathPow ( 10 , _Digits -extradig);
   if (WithDigit) extradig= 1 ;

  }
//+------------------------------------------------------------------+
//| Mover ponto de ancoragem                                         |
//+------------------------------------------------------------------+
bool TextMove( const long    chart_ID= 0 ,   // ID do grбfico
               const string name= "Text" , // nome do objeto
               datetime      time= 0 ,       // coordenada do ponto de ancoragem do tempo
               double        price= 0 )     // coordenada do ponto de ancoragem do preзo
  {
//--- se a posiзгo do ponto nгo estб definida, mover para a barra atual tendo o preзo Bid
   if (!time)
      time= TimeCurrent ();
   if (!price)
      price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- redefine o valor de erro
   ResetLastError ();
//--- mover o ponto de ancoragem
   if (! ObjectMove (chart_ID,name, 0 ,time,price))
     {
       Print ( __FUNCTION__ ,
             ": falha ao mover o ponto de ancoragem! Cуdigo de erro = " , GetLastError ());
       return ( false );
     }
//--- sucesso na execuзгo
   return ( true );
  }
//+------------------------------------------------------------------+
//| Verificar valores de ponto de ancoragem e definir valores padrгo |
//| para aqueles vazios                                              |
//+------------------------------------------------------------------+
void ChangeTextEmptyPoint( datetime &time, double &price)
  {
//--- se o tempo do ponto nгo estб definido, serб na barra atual
   if (!time)
      time= TimeCurrent ();
//--- se o preзo do ponto nгo estб definido, ele terб valor Bid
   if (!price)
      price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ClearMyObjects();
   Print ( "Deinit Value Chart, reason = " + IntegerToString (reason));
  }
//+------------------------------------------------------------------+
//| Value Chart                                                      | 
//+------------------------------------------------------------------+
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 &TickVolume[],
                 const long &Volume[],
                 const int &Spread[])
  {

//--- definir a forma como muitas vezes os textos serгo exibidos
   int scale=( int ) ChartGetInteger ( 0 , CHART_SCALE );
   int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS )+ 3 ;
   double value;
   digits= MathPow ( 10 , _Digits -extradig);

//--- definir o passo
   int step= 1 ;
   switch (scale)
     {
       case 0 :
         step= 12 ;
         break ;
       case 1 :
         step= 6 ;
         break ;
       case 2 :
         step= 4 ;
         break ;
       case 3 :
         step= 2 ;
         break ;
     }
   gTotalRates=rates_total;
   gBars=bars;
   for ( int i=rates_total- 1 ;i>rates_total-bars;i-=step) 
     {
       if (Close[i]>Open[i])
        {
         // bullish candle
         value=(Close[i]-Open[i])*digits;
         //Print(Close[i]-Open[i], "->", Close[i]-Open[i]*digits);

         TextCreate( 0 , "Text_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],(Close[i]+Open[i])/ 2 , DoubleToString (value,extradig),InpFont,InpFontSize,
                    UpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder);

         value=(Open[i]-Low[i]) *digits;
         if (!TextCreate( 0 , "TextL_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],Low[i], DoubleToString (value,extradig),InpFont,InpFontSize,
            HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) {       return 0 ;     }

         value=(High[i]-Close[i]) *digits;
         if (!TextCreate( ChartID (), "TextH_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],High[i], DoubleToString (value,extradig),InpFont,InpFontSize,
            HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) {       return 0 ;     }

           } else {

         value=(Open[i]-Close[i]) *digits;
         if (!TextCreate( ChartID (), "Text_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],(Close[i]+Open[i])/ 2 , DoubleToString (value,extradig),InpFont,InpFontSize,
            DwColor,-InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) {       return 0 ;      }

         value=(Close[i]-Low[i]) *digits;
         if (!TextCreate( ChartID (), "TextL_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],Low[i], DoubleToString (value,extradig),InpFont,InpFontSize,
            HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) {       return 0 ;     }

         value=(High[i]-Open[i]) *digits;
         if (!TextCreate( ChartID (), "TextH_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],High[i], DoubleToString (value,extradig),InpFont,InpFontSize,
            HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) {       return 0 ;     }
        }

     }
   ChartRedraw ();
   return 0 ;
  }
//+------------------------------------------------------------------+
//|  Trace Arrow Function                                            |
//+------------------------------------------------------------------+
void Trace( string name, int sens, double price, datetime time, color couleur)
  {
   ObjectCreate ( 0 ,name, OBJ_ARROW , 0 ,time,price);
   if (sens== 1 )
       ObjectSetInteger ( 0 ,name, OBJPROP_ARROWCODE , 233 );
   if (sens==- 1 )
       ObjectSetInteger ( 0 ,name, OBJPROP_ARROWCODE , 234 );
   ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,couleur);
   ObjectSetInteger ( 0 ,name, OBJPROP_WIDTH , 5 );
  }
//+------------------------------------------------------------------+
//|   Delete Arrow Function                                          |
//+------------------------------------------------------------------+  
void ClearMyObjects() 
  {
   string name;
   int scale=( int ) ChartGetInteger ( 0 , CHART_SCALE );
   int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS )+ 3 ;
   double value;
   digits= MathPow ( 10 , _Digits -extradig);
   int step= 1 ;
   switch (scale)
     {
       case 0 :
         step= 12 ;
         break ;
       case 1 :
         step= 6 ;
         break ;
       case 2 :
         step= 4 ;
         break ;
       case 3 :
         step= 2 ;
         break ;
     }
   for ( int i=gTotalRates- 1 ;i>gTotalRates-bars;i-=step) 
     {
       if (!TextDelete( ChartID (), "Text_" +( string )i+( string ) PERIOD_CURRENT )){}
       if (!TextDelete( ChartID (), "TextH_" +( string )i+( string ) PERIOD_CURRENT )){}
       if (!TextDelete( ChartID (), "TextL_" +( string )i+( string ) PERIOD_CURRENT )){}
       //--- redesenhar o grбfico
     }
   ChartRedraw ();

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

//+------------------------------------------------------------------+
//| Alterar o texto do objeto                                        |
//+------------------------------------------------------------------+
bool TextChange( const long    chart_ID= 0 ,   // ID do Grбfico
                 const string name= "Text" , // nome do objeto
                 const string text= "Text" ) // texto
  {
//--- redefine o valor de erro
   ResetLastError ();
//--- alterar texto do objeto
   if (! ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text))
     {
       Print ( __FUNCTION__ ,
             ": falha ao alterar texto! Cуdigo de erro = " , GetLastError ());
       return ( false );
     }
//--- sucesso na execuзгo
   return ( true );
  }
//+------------------------------------------------------------------+
//| Excluir objeto Texto                                             |
//+------------------------------------------------------------------+
bool TextDelete( const long    chart_ID= 0 ,   // Id do Grбfico
                 const string name= "Text" ) // nome do objeto
  {
//--- redefine o valor de erro
   ResetLastError ();
//--- excluir o objeto
   if (! ObjectDelete (chart_ID,name))
     {
       Print ( __FUNCTION__ ,
             ": falha ao excluir o objeto \"Texto\"! Cуdigo de erro = " , GetLastError ());
       return ( false );
     }
//--- sucesso na execuзгo
   return ( true );
  }
//+------------------------------------------------------------------+
//| Criando objeto Texto                                             |
//+------------------------------------------------------------------+
bool TextCreate( const long               chart_ID= 0 ,               // ID do grбfico
                 const string             name= "Text" ,               // nome do objeto
                 const int                sub_window= 0 ,             // нndice da sub-janela
                 datetime                 time= 0 ,                   // ponto de ancoragem do tempo
                 double                   price= 0 ,                   // ponto de ancoragem do preзo
                 const string             text= "Text" ,               // o prуprio texto
                 const string             font= "Arial" ,             // fonte
                 const int                font_size= 10 ,             // tamanho da fonte
                 const color              clr= clrRed ,               // cor
                 const double             angle= 0.0 ,                 // inclinaзгo do texto
                 const ENUM_ANCHOR_POINT anchor= ANCHOR_CENTER , // tipo de ancoragem
                 const bool               back= false ,               // no fundo
                 const bool               selection= false ,           // destaque para mover
                 const bool               hidden= true ,               // ocultar na lista de objetos
                 const long               z_order= 0 )                 // prioridade para clicar no mouse
  {

   if ( ObjectFind (chart_ID,name)==- 1 ) 
     {

       //--- definir as coordenadas de pontos de ancoragem, se eles nгo estгo definidos
       //--- redefine o valor de erro
       ResetLastError ();
       //--- criar objeto Texto
       if (! ObjectCreate (chart_ID,name, OBJ_TEXT ,sub_window,time,price)) 
        {
         Print ( __FUNCTION__ ,
               ": falha ao criar objeto \"Texto\"! Cуdigo de erro = " , GetLastError ());
         return ( false );
        }
       //--- definir o texto
       ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text);
       //--- definir o texto fonte
       ObjectSetString (chart_ID,name, OBJPROP_FONT ,font);
       //--- definir tamanho da fonte
       ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size);
       //--- definir o вngulo de inclinaзгo do texto
       ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle);
       //--- tipo de definiзгo de ancoragem
       ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
       ObjectSetInteger (chart_ID,name, OBJPROP_ALIGN , ALIGN_CENTER );

       //--- definir cor
       ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
       //--- exibir em primeiro plano (false) ou fundo (true)
       ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
       //--- habilitar (true) ou desabilitar (false) o modo de mover o objeto com o mouse
       ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
       ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
       //--- ocultar (true) ou exibir (false) o nome do objeto grбfico na lista de objeto 
       ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
       //--- definir a prioridade para receber o evento com um clique do mouse no grбfico
       ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
       ObjectSetDouble (chart_ID,name, OBJPROP_PRICE ,price);
       ObjectSetInteger (chart_ID,name, OBJPROP_TIME ,time);

       //--- sucesso na execuзгo
       return ( true );
        } else {
      ChangeTextEmptyPoint(time,price);

       ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text);
       ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
       ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
       ObjectSetInteger (chart_ID,name, OBJPROP_ALIGN , ALIGN_CENTER );
       ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle);
       ObjectSetDouble (chart_ID,name, OBJPROP_PRICE ,price);
       ObjectSetInteger (chart_ID,name, OBJPROP_TIME ,time);
       ObjectSetString (chart_ID,name, OBJPROP_FONT ,font);
       //--- definir tamanho da fonte
       ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size);
       ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE , 100 );

/*ObjectSetString(chart_ID,name,OBJPROP_FONT,Font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,Size);*/
       return ( true );
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,         // Event ID
                   const long & lparam,   // Parameter of type long event
                   const double & dparam, // Parameter of type double event
                   const string & sparam   // Parameter of type string events
                  )
  {
   if (id== CHARTEVENT_CHART_CHANGE )
     {
      ClearMyObjects();
     }

  }
//+------------------------------------------------------------------+
Dosyalar:
 
Green handsome :

Göstergeyi düzeltmeye yardımcı olun, MT5 terminalinde görüntülenmiyor, derleme sırasında hata veriyor.

en basit şey, tüm dizilerin en başında OnCalculate'de ArraySetAsSeries(Open,true) öğesini ayarlamaktır; ArraySetAsSeries(Close,true) ; vb.

bu birdenbire geleneksel bir sürprizdir: 5. yönde, varsayılan indeksleme yönü 4. yönden farklıdır.

arabellek göstergesi kullanmaz, sadece grafik nesneleri oluşturur - başlattıktan sonra Ctrl + B tuşlarına basın ve onları nereye koyduğunu görün

 

Belgeler ve forum aracılığıyla kazıldı ...
Aşağıdaki satırla OnInit() içinde oluşturulmuşlarsa, nesne işaretçi türünün genel değişkenleri [var örneğinde] nasıl yapılır:

CObj* var= new CObj(p1,p2,p3);

dahası, yapıcıların nesne ve parametrelerinin sayısı önceden bilinmez ve OnInit() ?

 
Mikhail Tkachev :

Belgeler ve forum aracılığıyla kazıldı ...
OnInit() içinde oluşturulmuşlarsa, nesne işaretçisi türündeki global değişkenler nasıl yapılır:

dahası, yapıcıların nesne ve parametrelerinin sayısı önceden bilinmez ve OnInit() ?

Hiçbir şey anlamadım, ancak OnInit() içinde oluşturulan nesnelere bir dizi CArrayObj işaretçisi ilettim .

Документация по MQL5: Стандартная библиотека / Коллекции данных / CArrayObj
Документация по MQL5: Стандартная библиотека / Коллекции данных / CArrayObj
  • www.mql5.com
CArrayObj - Коллекции данных - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin :

Hiçbir şey anlamadım, ancak OnInit() içinde oluşturulan nesnelere bir dizi CArrayObj işaretçisi ilettim .

Artem, cevabın için teşekkürler.
belirsiz soru için özür dilerim)
Expert Advisor, işaretçiden nesneye türünde üç global değişken kullanabilir: var1, var2, var3.

OnInit()'in yürütülmesinden önce, tüm bu değişkenlerin gerekli olup olmayacağı (bu zaman çerçeveleriyle ilgilidir) bilinmemektedir ve nesneleri başlatacak yapıcıların parametreleri de bilinmemektedir.
OnInit()'te aynı anda global olmaları için bu tür değişkenler nasıl oluşturulur?

 
Mikhail Tkachev :

Artem, cevabın için teşekkürler.
belirsiz soru için özür dilerim)
Expert Advisor, işaretçiden nesneye türünde üç global değişken kullanabilir: var1, var2, var3.

OnInit() yürütülmeden önce, tüm bu değişkenlerin gerekip gerekmediği bilinmemektedir (bu, zaman çerçeveleriyle ilgilidir) ve nesneleri başlatacak yapıcıların parametreleri de bilinmemektedir.
OnInit()'te aynı anda global olmaları için bu tür değişkenler nasıl oluşturulur?

Orada ne tür bir sihirli kurucunuz olduğunu bilmiyorum, içinde sadece bilinmeyenler var :)

Nesnelerin önceden örnek olarak bildirilmesi gerekmez.

Bir dizi CArrayObj bildirmeniz gerekir. Nesnelerinizin kendileri CObject öğesinin torunları olmalıdır.

Nesnenizi new ile oluşturursunuz ve listeye bir işaretçi eklersiniz.

Bir sonrakini oluşturup listeye eklersiniz, vb.

Zaten bu liste bir işaretçidir (ve liste global olarak bildirilir), onu yapıcılarınıza iletirsiniz.

Ama işte önceden bilinmeyen argümanlarla yapıcıları nasıl yapacaksınız - burada biraz anlamadım. açıklamaya çalış

 
Artyom Trishkin :


Ama işte önceden bilinmeyen argümanlarla yapıcıları nasıl yapacaksınız - burada biraz anlamadım. açıklamaya çalış

Her sembol için kullanılan her zaman çerçevesi için CIsNewBar türünde nesnelerin oluşturulması.
Karakterler giriş parametresinde tek bir sınırlandırılmış dize olarak verilir, bu nedenle tüm nesneleri OnInit()'ten önce oluşturamazsınız.
Onlar. yapıcının ilk bilinmeyen parametresi bir semboldür.
Yapıcının ikinci bilinmeyen parametresi zaman çerçevesidir, çünkü her sembolün, benzer şekilde giriş parametresinde sınırlayıcılar içeren bir dize olarak geçirilen kendi zaman dilimleri kümesi olacaktır.

ZY sınıf ile   CArrayObj'de bir sorun oluştu: CArrayObj* ArrayObj türündeki öğelere erişilirken. At(0) olan nesnenin sınıfının At(0) üyeleri, bu sınıf üyeleri kesinlikle genel, yani. ArrayObj türünde yapı. At(0).method(parametre) çalışmıyor.
Ayrıca bu kitaplıkları kullanmaktan da korkuyorum, ya terminali güncellerken içlerinde bir şeyler değişirse ve Uzman Danışmanım aniden çalışmayı durdurursa...
 
Mikhail Tkachev :

Her sembol için kullanılan her zaman çerçevesi için CIsNewBar türünde nesnelerin oluşturulması.
Karakterler giriş parametresinde tek bir sınırlandırılmış dize olarak verilir, bu nedenle tüm nesneleri OnInit()'ten önce oluşturamazsınız.
Onlar. ilk bilinmeyen yapıcı parametresi bir semboldür.
Yapıcının ikinci bilinmeyen parametresi zaman çerçevesidir, çünkü her sembolün, benzer şekilde giriş parametresinde sınırlayıcılar içeren bir dize olarak geçirilen kendi zaman dilimleri kümesi olacaktır.

ZY sınıf ile   CArrayObj'de bir sorun oluştu: CArrayObj* ArrayObj türündeki öğelere erişilirken. At(0) olan nesnenin sınıfının At(0) üyeleri, bu sınıf üyeleri kesinlikle genel, yani. ArrayObj türünde yapı. At(0).method(parametre) çalışmıyor.
Ayrıca bu kitaplıkları kullanmaktan da korkuyorum, ya terminali güncellerken içlerinde bir şeyler değişirse ve Uzman Danışmanım aniden çalışmayı durdurursa...

Her şey bir şekilde yanlış...

Ne yapmak istediğinizi basit kelimelerle yazın. Hepsini kodlama girişimlerinden bahsetmeden.

 
Artyom Trishkin :

Her şey bir şekilde yanlış...

Ne yapmak istediğinizi basit kelimelerle yazın. Hepsini kodlama girişimlerinden bahsetmeden.

Çok Para Birimli Uzman Danışman .
Karakter listesi, giriş parametresi aracılığıyla belirtilir, "AUDUSD,EURUSD,GBPUSD..." ayırıcılı dize, karakter sayısı önceden belirlenmemiştir.
Her sembol için "kendi" ticaret sisteminin çalıştığı iki zaman dilimi vardır.
Buna göre, iki giriş parametresi, ayırıcılı dizeler: karşılık gelen "M1,M30,M5..." sembolü için kısa zaman aralığı.
karşılık gelen "H1,D1,H4..." sembolü için uzun zaman dilimi
Onlar. AUDUSD zaman dilimleri M1 ve H1 için EURUSD M30 ve D1 için vb.
OnTick()'te, her sembol için, ticaret kararları vermek için her iki (kısa ve uzun) zaman diliminde yeni bir çubuğun görünümünü izlemeniz gerekir.
Olabildiğince sade yazmaya çalıştım

 
Mikhail Tkachev :

Çok Para Birimli Uzman Danışman .
Karakter listesi, giriş parametresi aracılığıyla belirtilir, "AUDUSD,EURUSD,GBPUSD..." ayırıcılı dize, karakter sayısı önceden belirlenmemiştir.
Her sembol için "kendi" ticaret sisteminin çalıştığı iki zaman dilimi vardır.
Buna göre, iki giriş parametresi, ayırıcılı dizeler: karşılık gelen "M1,M30,M5..." sembolü için kısa zaman aralığı.
karşılık gelen "H1,D1,H4..." sembolü için uzun zaman dilimi
Onlar. AUDUSD zaman dilimleri M1 ve H1 için EURUSD M30 ve D1 için vb.
OnTick()'te, her sembol için, ticaret kararları vermek için her iki (kısa ve uzun) zaman diliminde yeni bir çubuğun görünümünü izlemeniz gerekir.
Olabildiğince sade yazmaya çalıştım

Zaten yeni bir bar sınıfı var mı?

Ve giriş parametreleri tam olarak neye benziyor?

Neden: