OOP, Vorlagen und Makros in mql5, Feinheiten und Anwendungen - Seite 15

 
Vict:

Ich habe die Dinge zu sehr verkompliziert )).

Lassen Sie also die erste Möglichkeit gelten, sie ist wahrscheinlich die beste.

Es ist kein Problem, TEST mehrmals zu schreiben.

Sie können dies auch tun, aber nur in umgekehrter Reihenfolge, in der alles aufgerufen wird.

#define  LINE(dId) EA.AddDealsSettings(InDealType_##dId,InVolType_##dId,InVolume_##dId,InPrice_##dId,InVolCoeff_##dId,InClosePips_##dId,Mirror)

#define  BLOCK1 LINE(01)
#define  BLOCK2 LINE(02); BLOCK1
#define  BLOCK3 LINE(03); BLOCK2
#define  BLOCK4 LINE(04); BLOCK3
#define  BLOCK5 LINE(05); BLOCK4
#define  BLOCK6 LINE(06); BLOCK5
#define  BLOCK7 LINE(07); BLOCK6
#define  BLOCK8 LINE(08); BLOCK7
#define  BLOCK9 LINE(09); BLOCK8
#define  BLOCK10 LINE(10); BLOCK9

#define  SEND(dCount) do {BLOCK##dCount;} while(false)

void OnStart()
  {
   SEND(10);
  }
 

Hmm, ich dachte, ich würde es mir leichter machen, weniger auf die Tastatur zu hämmern, aber jetzt muss ich mich mit all den Beispielen beschäftigen

@Vladimir Simakov cool!

@Vict danke!

ZS: Um ehrlich zu sein, verstehe ich nur das erste Beispiel von Makros, der Rest ist nicht einmal annähernd zu verstehen (((

 
Igor Makanu:

Hmm, ich dachte, ich würde es mir leichter machen, weniger auf die Tastatur zu hämmern, aber jetzt muss ich mich mit all den Beispielen beschäftigen

@Vladimir Simakov cool!

@Vict danke!

ZS: Um ehrlich zu sein, verstehe ich nur das erste Beispiel von Makros, der Rest ist nicht einmal annähernd zu verstehen (((

Die Magie des Präprozessors wird aufgerufen)))

 
Vladimir Simakov:

Die Magie des Präprozessors wird aufgerufen)))

Ich weiß, ich habe nie geübt, deshalb ist es so schwer zu lernen (((

Kann ich diesen Code in ein Makro umwandeln?


//--- input parameters
input ENUM_DEALTYPE        InDealType_01=BUY;            //1.------------------------------ Order ------------------------------
input int                  InPrice_01        =  000;     //Start price
input double               InVolume_01       =  0.01;    //Start Volume
input ENUM_VOLUMERATIO     InVolType_01=MultiplyAlways;  //Next operation with volume coefficient
input double               InVolCoeff_01     =  1.5;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_01     =  NotMove; //Next price type
input double               InDistCoeff_01    =  1.23;    //Coefficient next open price
input int                  InDistShift_01    =  150;     //Shift next open price
input int                  InClosePips_01    =  200;     //TakeProfit>0 or StopLoss<0

input ENUM_DEALTYPE        InDealType_02=BUY;            //2.------------------------------ Order ------------------------------
input int                  InPrice_02        =  000;     //Start price
input double               InVolume_02       =  0.01;    //Start Volume
input ENUM_VOLUMERATIO     InVolType_02=MultiplyAlways;  //Next operation with volume coefficient
input double               InVolCoeff_02     =  1.5;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_02     =  NotMove; //Next price type
input double               InDistCoeff_02    =  1.23;    //Coefficient next open price
input int                  InDistShift_02    =  150;     //Shift next open price
input int                  InClosePips_02    =  200;     //TakeProfit>0 or StopLoss<0

Und so 10 Mal?

Ich meine, es sind immer noch 8 Zeiten übrig... aber ich weiß nicht, wenn ich es im Optimierer laufen lasse, vielleicht füge ich Parameter hinzu oder entferne, ich habe den Code noch nicht fertiggestellt (Kommentare sind die gleichen, aber eine Ziffer ist anders - erste Zeile)

 
Igor Makanu:

Ich weiß, ich habe nie geübt, deshalb ist es so schwer zu lernen (((

Kann dieser Code in ein Makro verpackt werden?


Und so 10 Mal? und die Kommentare sind die gleichen, aber eine Ziffer ist anders

Ja, kein Problem, aber bitte keine Kommentare. Ja, und ersetzen Sie sie durch /* ... */ funktioniert nicht, da der Compiler sie in diesem Fall im Kontext der Textbeschreibung der externen Variablen für die Einstellungstabelle nicht mehr akzeptiert. Geprüft.

 
Vladimir Simakov:

Ja, kein Problem, aber bitte keine Kommentare. Ja, und ersetzen Sie sie durch /* ... */ funktioniert nicht, da der Compiler sie in diesem Fall im Kontext der Textbeschreibung der externen Variablen für die Einstellungstabelle nicht mehr akzeptiert. Geprüft.

dann ist das ein Problem, die Kommentare müssen von hand.... korrigiert werden. Für Tests ist es in Ordnung, es ist sowieso schneller, ich arbeite an meinem Code, es dauert lange, ihn zu bearbeiten, ich komme nicht an den Tester ran...

Wenn es Ihnen nichts ausmacht, machen Sie ein Beispiel ohne Kommentare



PS: vielleicht ist die Idee unsinnig, aber seit dem Morgen habe ich im Kopf, was ich gerne sehen würde.... Für jetzt ein Gitter von Aufträgen in den Optimierer, aber das endgültige Ziel ist anders (anstelle von einigen festen Raster Schritte, möchte ich ein Polynom anhängen, um den Optimierer laufen die Koeffizienten, dann vielleicht das gleiche, aber ich möchte Taylor's Zeilen zu sehen ;) ), aber das Gitter zuerst muss ich sehen, was der Optimierer zeigt, ein Test-Polygon im Allgemeinen bereite ich )))

 
Igor Makanu:

Ich weiß, ich habe nie geübt, deshalb ist es so schwer zu lernen (((

Kann ich diesen Code in ein Makro umwandeln?


Und so 10 Mal?

Ich meine, es sind immer noch 8 Zeiten übrig... aber ich weiß nicht, wenn ich es im Optimierer laufen lasse, füge ich vielleicht Parameter hinzu oder entferne sie, ich habe noch keinen Code geschrieben (Kommentare sind die gleichen, aber eine Ziffer ist anders - erste Zeile)

Sie können eine kleine Funktion schreiben, die diesen Code erzeugt (und in einer Datei oder in der Zwischenablage speichert).

 
Andrey Khatimlianskii:

Sie könnten eine kleine Funktion schreiben, die diesen Code erzeugt (und ihn in einer Datei oder in der Zwischenablage speichert).

Nun, damit zerstörst du jeden poetischen Geist, in Prosa ist das nicht schwer, einfach so:

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#include <Files\FileTxt.mqh>
CFileTxt FOut;

#define   COUNT 10


const string code0[]=
  {
   "input ENUM_DEALTYPE        InDealType_","=BUY;            //",".------------------------------ Order ------------------------------"
  };

const string code1[]=
  {
   "input int                  InPrice_","        =  000;     //Start price",
   "input double               InVolume_","       =  0.01;    //Start Volume",
   "input ENUM_VOLUMERATIO     InVolType_","=MultiplyAlways;  //Next operation with volume coefficient",
   "input double               InVolCoeff_","     =  1.5;     //Volume coefficient",
   "input ENUM_DISTANCERATIO   InDistType_","     =  NotMove; //Next price type",
   "input double               InDistCoeff_","    =  1.23;    //Coefficient next open price",
   "input int                  InDistShift_","    =  150;     //Shift next open price",
   "input int                  InClosePips_","    =  200;     //TakeProfit>0 or StopLoss<0"
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   if(FOut.Open(__FILE__+".txt",FILE_WRITE|FILE_COMMON)!=INVALID_HANDLE)
     {
      for(int i=0;i<COUNT;i++)
        {
         string N=IntegerToString(i,2,'0');
         FOut.WriteString(code0[0]+N+code0[1]+IntegerToString(i)+code0[2]+"\n");
         for(int j=0;j<8;j++)
           {
            FOut.WriteString(code1[j*2]+N+code1[j*2+1]+"\n");
           }
        }
      printf("Write to file %s",FOut.FileName());
     }
   else printf("Open file error № %i",GetLastError());
  }
//+------------------------------------------------------------------+

))))

Aber trotzdem danke für den Rat!

 
Vladimir Simakov:

Ja, kein Problem, aber bitte keine Kommentare. Ja, und ersetzen Sie sie durch /* ... */ funktioniert nicht, da der Compiler sie in diesem Fall im Kontext der Textbeschreibung der externen Variablen für die Einstellungstabelle nicht mehr akzeptiert. Geprüft.

Vielleicht haben Sie etwas falsch gemacht? Oder verhalten sich die Makros anders?

input double d1=1.02,/*Первая переменная double*/ d2=3;/*Вторая переменная double*/
input double d3=3.07;/*Третья переменная double*/
input int i1=5,/*Первая переменная int*/ i2=7;/*Вторая переменная int*/
 
Alexey Viktorov:

Haben Sie etwas falsch gemacht? Oder verhalten sich die Makros anders?

Ja, es ist anders. Es hat damit zu tun, dass der Präprozessor vor dem Parser beginnt und dummerweise den Text sammelt, wobei Kommentare innerhalb des Makros in der Phase des Präprozessors verworfen werden. Wenn Sie jedoch // in einem Makro belassen, kann es sein, dass Sie durch eigenes Verschulden einen heftigen Fehler bekommen.