Fragen zu OOP in MQL5 - Seite 76

 
awsomdino:

Das Beispiel sollte von Saber genommen werden, ich weiß nicht, den wahren Zweck der es, aber ich sah seine, wenn sonst) Bäume dort zu bekommen, was Sie brauchen. Als ich hierher kam, hatte ich eine Frage, wie man es gleich machen kann, und suchte, wie man es umsetzen kann, las alles nach - verlor wirklich nur Zeit, es gibt keine richtige Umsetzung, haufenweise Artikel und überall seine eigenen. Ich bin wirklich enttäuscht, wenn man nicht viel vom Code versteht und an der Kreuzung von 5 Wegen steht und sich überlegt, welchen Weg man gehen soll. Es ist nicht einmal die Frage, ob man hier ein profitables Handelssystem findet, die Frage ist, ob man hier den richtigen optimalen Weg findet) - Das ist unser lieber MQL5.

Nun, er sagt offen, dass die Suche nach einem profitablen TS, die Suche nach Instrumenten, bei denen man den TS anwenden kann, ständig erfolgen muss, und man muss schnell suchen.

Und in seinen Signalen zeigte sein TS Ergebnisse an, dann hörte es auf zu funktionieren, dann schaltete er das TS wieder ein (ich vermute, dass er es mit neuen Parametern erneut öffnete), das TS stieg wieder an und hörte dann wieder auf zu funktionieren

Wenn diese Funktionalität flexibel ist und es Ihnen erlaubt, schnell zu optimieren und die richtigen Werkzeuge zu finden, dann haben Sie alles, was Sie brauchen

sondern suchen Sie nach einem einzigen EA, der mit allen verfügbaren Historien auf einem bestimmten Tool getestet wird.... Nun, das habe ich bereits getan, ich glaube nicht, dass es da etwas gibt.

 

Igor, wir reden hier über Code)

und ich mag seine Systeme auch nicht, sie sind halb betrügerisch

Ich sollte mich mit Fechten oder Kendo beschäftigen.

 
awsomdino:

Igor, wir reden hier über Code)

Ich mag seine Systeme auch nicht, sie sind Betrug.

Ich lese hier gerade ein Buch))) ("Programming Without Fools")

ich kenne seine Systeme nicht, aber ich verwende Codes von QB - er ist ein echter Zeitsparer, das kann ich sogar sagen - er hat eine robuste Infrastruktur geschaffen, die ich übernehmen und nutzen kann, zumal er seine Codes ständig pflegt

 
awsomdino:

Klassen, Vererbung, Virtualisierung, Templates, es war sehr schwierig für mich als Autodidakt, das zu verstehen, ich habe ein wenig verstanden und OOP aufgegeben, ich kann mir gar nicht vorstellen, wie sich die Leute in ihren Robotern die Mühe machen - dass sie das alles benutzen müssen, das ist doch nur Angeberei. Höchstens Strukturen.

Semka ging mit seiner Zeichnung weg, wer braucht schon diese Zeichnung, hier kamen sie her, um Geld für sich und ihre Lieben zu verdienen, natürlich hatten die Entwickler kein Mitleid mit ihm. Peter, alles andere als Handel). Die Programmierer sind verblüfft über die unnötigen Funktionen.

#define  LOG(dText) CLog::Get().Log((string)__LINE__,__FUNCSIG__,dText)

class CLog{
   CLog() {}
public:
   static CLog* Get() {static CLog _log; return &_log;}
   void Log(string line,string sig,string text) {PrintFormat("Line: %s. Signature: %s. %s",line,sig,text);}
};
//+------------------------------------------------------------------+
void OnStart()
{
   LOG("Example 1");
   Test();
}
//+------------------------------------------------------------------+
void Test(){
   string t="Example 2";
   LOG(t);
}

Hier gibt es OOP und Makrosubstitution und sogar einen zweifelhaften Einzelgänger (für diejenigen, die Geschwindigkeit schätzen). Dies wurde als Beispiel geschrieben, aber natürlich können Sie eine Datei für die Protokollierung im Konstruktor erstellen, in diese mit Log(...) schreiben und sie im Destruktor schließen. Dies ist ein Beispiel dafür, worum es hier geht. Natürlich können Sie mit Funktionen arbeiten, aber im Falle Ihrer eigenen Datei haben Sie mehr Code und Sie erhalten globale Variablen, und das ist nicht sehr orthodox))))

 
Vladimir Simakov:

Hier haben Sie OOP und Makro-Substitution und sogar ein einfaches Singleton (für Geschwindigkeitsliebhaber). Es ist als Beispiel geschrieben, aber natürlich können Sie eine Datei für die Protokollierung im Konstruktor erstellen, in sie mit Log(...) schreiben und sie im Destruktor schließen. Dies ist ein Beispiel dafür, worum es hier geht. Natürlich können Sie mit Funktionen arbeiten, aber im Falle Ihrer eigenen Datei haben Sie mehr Code und mehr globale Variablen, und das ist nicht sehr orthodox))))

Danke, ich werde das Beispiel speichern.

 
awsomdino:

Danke, ich werde das Beispiel speichern.

Das Lustige daran ist, dass man es nicht speichern muss, sondern nur verstehen muss. Ein Mensch, der das versteht, wird sofort schreiben, dass ein Einzelgänger hier nicht gebraucht wird, und dass sich alles reduzieren lässt auf

#define  LOG(dText) CLog::Log((string)__LINE__,__FUNCSIG__,dText)

class CLog{
public:
   static void Log(string line,string sig,string text) {PrintFormat("Line: %s. Signature: %s. %s",line,sig,text);}
};
//+------------------------------------------------------------------+
void OnStart()
{
   LOG("Example 1");
   Test();
}
//+------------------------------------------------------------------+
void Test(){
   string t="Example 2";
   LOG(t);
}
 
Vladimir Simakov:

Das Lustige daran ist, dass man es nicht speichern, sondern nur verstehen muss. Ein verständnisvoller Mensch wird sofort schreiben, dass der Einzelgänger hier nicht gebraucht wird, und dass sich alles darauf reduzieren lässt

danke, diesen Code habe ich schon lange verstanden)

übrigens, schreiben Sie den Code besser im Standardformat, es ist auf solche Nuancen, die ich stecken geblieben

_Symbol
Symbol();

symbolinfo und andere einseitige Dinge, die meine Aufmerksamkeit und meine Zeit in Anspruch genommen haben.

Was soll ich sagen, ich habe immer noch keine 100%igen Informationen und habe Fragen dazu, was ich davon verwenden soll.

 
Vladimir Simakov:

Das Lustige daran ist, dass man es nicht speichern, sondern nur verstehen muss. Jeder, der es versteht, wird schreiben, dass wir das Singleton hier nicht brauchen und alles auf

ein Missverstandener wird schreiben, dass wir hier kein OOP brauchen, wir können es durch einen Funktionsaufruf ersetzen

und fallen dann wieder in zwei Lager und geraten in ein seitenlanges Durcheinander )))

 
Igor Makanu:

ein verständiger Mensch wird schreiben, dass OOP hier unnötig ist, man kann es durch einen Funktionsaufruf ersetzen

und dann wieder in zwei Lager und ein seitenlanges Durcheinander)))

Gut gemacht! Das ist richtig! Und das?

#define  LOG(dText) CLog::Ptr().Log((string)__LINE__,__FUNCSIG__,dText)

class CLog{
   int cHndl;
   CLog():cHndl(FileOpen(MQLInfoString(MQL_PROGRAM_NAME)+_Symbol+(string)(int)TimeCurrent()+".log",FILE_TXT|FILE_WRITE)){}
  ~CLog() {FileClose(cHndl);}
public:
   static CLog* Ptr() {static CLog _log; return &_log;}
   void Log(string line,string sig,string text){
      string _text=StringFormat("Line: %s. Signature: %s. %s",line,sig,text);
      PrintFormat(_text);
      FileWrite(cHndl,_text);}
};

Sie werden zustimmen, dass es komplizierter ist)))

 
Vladimir Simakov:

Gut gemacht! Das ist richtig! Und das?

Sie müssen zugeben, dass es ein bisschen komplizierter ist)))

Wo es Klassen gibt, gibt es überall Buggys)

* und & kann Sie überraschen.

Nicht komplizierter Code, die einzige bequeme Klasse, Konstruktor mit einem Destruktor, ich sehe noch keine anderen Pluspunkte,

Strukturen sind bequemer und weniger kompliziert zu erlernen).

Viele kennen oder verstehen die Möglichkeiten von Strukturen gar nicht. Es ist noch gar nicht so lange her, dass er öffentlich begann, sie in seinem Code zu verwenden.