Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 41

 
Sergey Dzyublik:

Toll! Interessante Vorgehensweise.

 
Ihor Herasko:

Toll! Interessante Vorgehensweise.

https://www.mql5.com/ru/search#!keyword=TOSTRING

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
fxsaber:

https://www.mql5.com/ru/search#!keyword=TOSTRING

Ja, ich erinnere mich, dass Sie ein Makro-Genie sind. Ich danke Ihnen. Außerdem wird die Arbeit fast nirgends beschrieben. Können Sie eine Quelle nennen, die diese Feinheiten beschreibt? Für C/C++, natürlich.

Ich verwende Makros sehr selten und auf einfacher Ebene. Offensichtlich vernachlässige ich sie unverdientermaßen.

 
Vielen Dank für Ihre schnelle und umfassende Antwort!
 
Ihor Herasko:

Können Sie eine Quelle nennen, die diese Feinheiten beschreibt?

Ich habe Makros anhand des einzigen Beispiels von MQ gelernt, das in der Ankündigung eines der MT5-Builds enthalten war. Sie haben # und ## eingegeben, und das war ein gutes Beispiel. Ich kann den Link nicht finden.

 
fxsaber:

Ich habe Makros anhand des einzigen Beispiels von MQ gelernt, das in der Ankündigung eines der MT5-Builds enthalten war. Dort wurden # und ## eingetragen und es gab ein gutes Beispiel. Ich kann den Link nicht finden.

Verstehe, nochmals vielen Dank.

 
Andrey Khatimlianskii:

Zufälle gibt es... Ich habe gerade eine Include-Datei zur Veröffentlichung an CodeBase geschickt, die ich auf der Grundlage dieser Diskussion im Jahr 2015 zusammengestellt habe:https://www.mql5.com/ru/forum/63951/page2#comment_1908129

Die Codes selbst in der Bibliotheksdatei, die ich für die Veröffentlichung vorbereitet habe, sind einfach. Gleichzeitig ist die Bedeutung so, wie Sie gefragt haben und ungefähr so, wieSergey Dzyublik sie gebracht hat

P./S.: Wie sich mit der Zeit herausstellte, war es das einfachste, das für mich am meisten anwendbar wurde. Mit der Zeit habe ich mich dabei ertappt, dass ohne diese eingebundene Datei etwas fehlt / *bei der Ausgabe einiger Ergebnisse: beim Konstruieren von Codes, Funktionen funktionieren*/.

 
fxsaber:

Ich habe Makros aus dem einzigen Beispiel von MQ gelernt, das in der Ankündigung eines der MT5-Builds enthalten war. Dort wurden # und ## eingetragen und es gab ein gutes Beispiel. Ich kann den Link nicht finden.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Änderungen in MetaTrader 5 Client Terminal Builds

MetaQuotes Software Corp., 2014.10.30 06:25

MetaTrader 5 Build 1010 Plattform-Update: Neue Signale, Märkte und Optionen

Ein Update für die MetaTrader 5-Plattform wird am Freitag, den 31. Oktober, veröffentlicht. Das Update wird die folgenden Änderungen enthalten:

MetaTrader 5 Kunden-Terminal Build 1010
  1. MQL5: Makro-Parameter-Konvertierung in String und Makro-Parameter-Verkettung hinzugefügt. Nachfolgend ein Beispiel, bei dem die Makroverkettung die automatische Löschung von Klasseninstanzen organisiert.
  2. //+------------------------------------------------------------------+
    //|                                                     MacroExample |
    //|                        Copyright 2014, MetaQuotes Software Corp. |
    //|                                       http://www.metaquotes.net  |
    //+------------------------------------------------------------------+
    #property  script_show_inputs
    input bool InpSecond=true;
    
    #define  DEFCLASS(class_name) class class_name:public CBase{public:class_name(string name):CBase(name){}};
    #define  TOSTR(x) #x
    #define  AUTODEL(obj) CAutoDelete auto_##obj(obj)
    #define  NEWOBJ(type,ptr) do { ptr=new type(TOSTR(ptr)); \
                             Print("Create object '",TOSTR(type)," ",TOSTR(ptr),"' by macro NEWOBJ"); } \
                             while(0)
    //+------------------------------------------------------------------+
    //| Базовый класс, необходим для автоудаления объектов               |
    //+------------------------------------------------------------------+
    class CBase
      {
    protected:
       string            m_name;
    
    public:
                         CBase(string name):m_name(name) { }
       string            Name(void) const{ return(m_name); }
    
      };
    //+------------------------------------------------------------------+
    //| Класс автоудаления объектов позволяет не следить за созданными   |
    //| объектами. Он удаляет их в своем деструкторе                     |
    //+------------------------------------------------------------------+
    class CAutoDelete
      {
       CBase            *m_obj;
    
    public:
                         CAutoDelete(CBase *obj):m_obj(obj) { }
                        ~CAutoDelete()
         {
          if(CheckPointer(m_obj)==POINTER_DYNAMIC)
            {
             Print("Delete object '",m_obj.Name(),"' by CAutoDelete class");
             delete m_obj;
            }
         }
      };
    //+------------------------------------------------------------------+
    //| Объявим два новых класса CFoo и CBar                             |
    //+------------------------------------------------------------------+
    DEFCLASS(CFoo);
    DEFCLASS(CBar);
    //+------------------------------------------------------------------+
    //| Основная функция скрипта                                         |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       CFoo *foo;
    //--- создадим объект класса CFoo
       NEWOBJ(CFoo,foo);
    //--- создадим экземпляр класса автоудаления объекта CFoo foo
       AUTODEL(foo);
    //---
       if(InpSecond)
         {
          CBar *bar;
          //---
          NEWOBJ(CBar,bar);
          AUTODEL(bar);
         }
    //--- Удалять foo не нужно, он будет удален автоматически
      }
    //+------------------------------------------------------------------+
 
fxsaber:

Ich danke Ihnen. Ich werde den gleichen Weg gehen.

Nach dem Zeitpunkt der Veröffentlichung (06:25) zu urteilen, habe ich die Nachrichten dummerweise verschlafen)))

 

Hallo, ich habe einen MA-Indikator mit allen benötigten Stufen erhalten. Das Problem ist, dass, wenn ich mit der Maus über den Indikator (jeden MA) fahre, der Zeitraum dieses MA nicht angezeigt wird. Wie kann man das beheben? Ständig Syntaxfehler beim Ändern vonIndicatorShortName("MASHKI =)"); Bitte helfen.

//+------------------------------------------------------------------+
//|                                                       ManyMA.mq4 |
//|                                                              VVM |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "VVM"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Gold
#property indicator_color2 Aqua
#property indicator_color3 Blue
#property indicator_color4 Magenta
#property indicator_color5 Red
#property indicator_color6 Green
#property indicator_color7 BurlyWood
#property indicator_color8 DarkViolet

extern int MA1_Period=8;
extern int MA1_Shift=0;
extern int MA1_Method=1;

extern int MA2_Period=13;
extern int MA2_Shift=0;
extern int MA2_Method=0;

extern int MA3_Period=21;
extern int MA3_Shift=0;
extern int MA3_Method=1;

extern int MA4_Period=50;
extern int MA4_Shift=0;
extern int MA4_Method=1;

extern int MA5_Period=50;
extern int MA5_Shift=0;
extern int MA5_Method=0;

extern int MA6_Period=100;
extern int MA6_Shift=0;
extern int MA6_Method=0;

extern int MA7_Period=200;
extern int MA7_Shift=0;
extern int MA7_Method=0;

extern int MA8_Period=350;
extern int MA8_Shift=0;
extern int MA8_Method=1;

extern int MA9_Period=1000;
extern int MA9_Shift=0;
extern int MA9_Method=0;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
double ExtMapBuffer9[];

int ExtCountedBars=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   int    draw_begin1;
   int    draw_begin2;
   int    draw_begin3;
   int    draw_begin4;
   int    draw_begin5;
   int    draw_begin6;
   int    draw_begin7;
   int    draw_begin8;
   int    draw_begin9;
   
   string short_name;
   SetIndexStyle(0, DRAW_LINE, 0, 2);
   SetIndexStyle(1, DRAW_LINE, 0, 2);   
   SetIndexStyle(2, DRAW_LINE, 0, 2);   
   SetIndexStyle(3, DRAW_LINE, 0, 2);   
   SetIndexStyle(4, DRAW_LINE, 0, 2);   
   SetIndexStyle(5, DRAW_LINE, 0, 3);   
   SetIndexStyle(6, DRAW_LINE, 0, 3);   
   SetIndexStyle(7, DRAW_LINE, 0, 3);   
   SetIndexStyle(8, DRAW_LINE, 0, 4);   
   
   SetIndexShift(0, MA1_Shift);
   SetIndexShift(1, MA2_Shift);
   SetIndexShift(2, MA3_Shift);
   SetIndexShift(3, MA4_Shift);
   SetIndexShift(4, MA5_Shift);
   SetIndexShift(5, MA6_Shift);
   SetIndexShift(6, MA7_Shift);
   SetIndexShift(7, MA8_Shift);
   SetIndexShift(8, MA9_Shift);
   
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   
   draw_begin1=MA1_Period-1;
   draw_begin2=MA2_Period-1;
   draw_begin3=MA3_Period-1;
   draw_begin4=MA4_Period-1;
   draw_begin5=MA5_Period-1;
   draw_begin6=MA6_Period-1;
   draw_begin7=MA7_Period-1;
   draw_begin8=MA8_Period-1;
   draw_begin9=MA9_Period-1;
   
   IndicatorShortName("MASHKI =)");
   
   SetIndexDrawBegin(0,draw_begin1);
   SetIndexDrawBegin(1,draw_begin2);
   SetIndexDrawBegin(2,draw_begin3);
   SetIndexDrawBegin(3,draw_begin4);
   SetIndexDrawBegin(4,draw_begin5);
   SetIndexDrawBegin(5,draw_begin6);
   SetIndexDrawBegin(6,draw_begin7);   
   SetIndexDrawBegin(7,draw_begin8);
   SetIndexDrawBegin(8,draw_begin9);
   
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexBuffer(7,ExtMapBuffer8);
   SetIndexBuffer(8,ExtMapBuffer9);
   
   
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   ExtCountedBars=IndicatorCounted();
   if (ExtCountedBars<0) return(-1);
   if (ExtCountedBars>0) ExtCountedBars--;
   switch(MA1_Method)
     {
      case 0 : sma(1, MA1_Period);  break;
      case 1 : ema(1, MA1_Period);  
     }
   switch(MA2_Method)
     {
      case 0 : sma(2, MA2_Period);  break;
      case 1 : ema(2, MA2_Period); 
     }
   switch(MA3_Method)
     {
      case 0 : sma(3, MA3_Period);  break;
      case 1 : ema(3, MA3_Period); 
     }
   switch(MA4_Method)
     {
      case 0 : sma(4, MA4_Period);  break;
      case 1 : ema(4, MA4_Period); 
     }
   switch(MA5_Method)
     {
      case 0 : sma(5, MA5_Period);  break;
      case 1 : ema(5, MA5_Period);
     }
   switch(MA6_Method)
     {
      case 0 : sma(6, MA6_Period);  break;
      case 1 : ema(6, MA6_Period);  
     }
   switch(MA7_Method)
     {
      case 0 : sma(7, MA7_Period);  break;
      case 1 : ema(7, MA7_Period);  
     }                  
   switch(MA8_Method)
     {
      case 0 : sma(8, MA8_Period);  break;
      case 1 : ema(8, MA8_Period);  
     }
   switch(MA9_Method)
     {
      case 0 : sma(9, MA9_Period);  
      case 1 : ema(9, MA9_Period);  
     }      

   return(0);
  }

void sma(int MAnum, int MA_period)
  {
   double sum=0;
   int    i,pos=Bars-ExtCountedBars-1;
//---- initial accumulation
   if(pos<MA_period) pos=MA_period;
   for(i=1;i<MA_period;i++,pos--)
      sum+=Close[pos];
//---- main calculation loop
   while(pos>=0)
     {
      sum+=Close[pos];
      switch(MAnum)
        {
          case 1 : ExtMapBuffer1[pos]=sum/MA_period; break;
          case 2 : ExtMapBuffer2[pos]=sum/MA_period; break;
          case 3 : ExtMapBuffer3[pos]=sum/MA_period; break;
          case 4 : ExtMapBuffer4[pos]=sum/MA_period; break;
          case 5 : ExtMapBuffer5[pos]=sum/MA_period; break;
          case 6 : ExtMapBuffer6[pos]=sum/MA_period; break;
          case 7 : ExtMapBuffer7[pos]=sum/MA_period; break;
          case 8 : ExtMapBuffer8[pos]=sum/MA_period; break;
          case 9 : ExtMapBuffer9[pos]=sum/MA_period;    
        }        
                       
           sum-=Close[pos+MA_period-1];
           pos--;
     }
//---- zero initial bars
      if(ExtCountedBars<1)
      switch(MAnum)
        {
          case 1 : for(i=1;i<MA_period;i++) ExtMapBuffer1[Bars-i]=0; break;
          case 2 : for(i=1;i<MA_period;i++) ExtMapBuffer2[Bars-i]=0; break;
          case 3 : for(i=1;i<MA_period;i++) ExtMapBuffer3[Bars-i]=0; break;
          case 4 : for(i=1;i<MA_period;i++) ExtMapBuffer4[Bars-i]=0; break;
          case 5 : for(i=1;i<MA_period;i++) ExtMapBuffer5[Bars-i]=0; break;
          case 6 : for(i=1;i<MA_period;i++) ExtMapBuffer6[Bars-i]=0; break;
          case 7 : for(i=1;i<MA_period;i++) ExtMapBuffer7[Bars-i]=0; break;
          case 8 : for(i=1;i<MA_period;i++) ExtMapBuffer8[Bars-i]=0; break;
          case 9 : for(i=1;i<MA_period;i++) ExtMapBuffer9[Bars-i]=0;
        }                 
  }
  
  void ema(int MAnum, int MA_Period)
  {
   double pr=2.0/(MA_Period+1);
   int    pos=Bars-2;
   if(ExtCountedBars>2) pos=Bars-ExtCountedBars-1;
//---- main calculation loop
   while(pos>=0)
     {
      switch(MAnum)
        {
          case 1 : if(pos==Bars-2) ExtMapBuffer1[pos+1]=Close[pos+1]; break;
          case 2 : if(pos==Bars-2) ExtMapBuffer2[pos+1]=Close[pos+1]; break;
          case 3 : if(pos==Bars-2) ExtMapBuffer3[pos+1]=Close[pos+1]; break;
          case 4 : if(pos==Bars-2) ExtMapBuffer4[pos+1]=Close[pos+1]; break;
          case 5 : if(pos==Bars-2) ExtMapBuffer5[pos+1]=Close[pos+1]; break;
          case 6 : if(pos==Bars-2) ExtMapBuffer6[pos+1]=Close[pos+1]; break;
          case 7 : if(pos==Bars-2) ExtMapBuffer7[pos+1]=Close[pos+1]; break;
          case 8 : if(pos==Bars-2) ExtMapBuffer8[pos+1]=Close[pos+1]; break;
          case 9 : if(pos==Bars-2) ExtMapBuffer9[pos+1]=Close[pos+1];
        }     
      switch(MAnum)
        {
          case 1 : ExtMapBuffer1[pos]=Close[pos]*pr+ExtMapBuffer1[pos+1]*(1-pr); break;
          case 2 : ExtMapBuffer2[pos]=Close[pos]*pr+ExtMapBuffer2[pos+1]*(1-pr); break;
          case 3 : ExtMapBuffer3[pos]=Close[pos]*pr+ExtMapBuffer3[pos+1]*(1-pr); break;
          case 4 : ExtMapBuffer4[pos]=Close[pos]*pr+ExtMapBuffer4[pos+1]*(1-pr); break;
          case 5 : ExtMapBuffer5[pos]=Close[pos]*pr+ExtMapBuffer5[pos+1]*(1-pr); break;
          case 6 : ExtMapBuffer6[pos]=Close[pos]*pr+ExtMapBuffer6[pos+1]*(1-pr); break;
          case 7 : ExtMapBuffer7[pos]=Close[pos]*pr+ExtMapBuffer7[pos+1]*(1-pr); break;
          case 8 : ExtMapBuffer8[pos]=Close[pos]*pr+ExtMapBuffer8[pos+1]*(1-pr); break;
          case 9 : ExtMapBuffer9[pos]=Close[pos]*pr+ExtMapBuffer9[pos+1]*(1-pr);
        }             
           pos--;
     }
  }

Zeigt nicht den Punkt, nur den Namen Mashki =))