Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1432

 

Hallo, alle zusammen,

Ich bin neu hier, also hoffe ich, dass ich hier richtig bin: Ich versuche, einen EA zu codieren, der mir helfen könnte, mein Money Management einzuhalten, wie z.B. :

"alle Trades schließen, wenn vergangene Verluste+aktueller Drawdown unter x % liegen" + "sofortige Schließung aller Trades bis zum Ende der Sitzung/des Tages".

Wenn jemand weiß, wie das geht oder mir helfen kann, wäre es super nett, wenn Sie sich bei mir melden würden.

Danke, traden Sie gut ;)

 
jeremy10p100 # :

Hallo, alle zusammen,

Ich bin neu hier und hoffe, dass ich hier richtig bin: Ich versuche, einen EA zu codieren, der mir helfen könnte, mein Geld zu verwalten, z.B. :

"alle Trades schließen, wenn vergangene Verluste+aktueller Drawdown unter x % liegen" + "sofortige Schließung aller Trades bis zum Ende der Sitzung/des Tages".

Wenn jemand weiß, wie das geht oder mir helfen kann, wäre es super nett, wenn Sie mich kontaktieren würden.

Danke, traden Sie gut ;)

Hallo,

Versuchen Sie, den Markt nach fertigen Lösungen zu durchsuchen - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market.

Sie können auch eine individuelle Lösung bei Freelance bestellen - https://www.mql5.com/fr/job

 
Hallo zusammen!!! Bitte sagen Sie mir, wie ich Werte aus einem Array in die Datenbank kopieren kann? Hier ist der Code aus dem Beispiel für die Arbeit mit der Datenbank und wenn ich versuche, Daten aus dem Array in die Datenbank in das Feld GEHALT einzufügen, erhalte ich eine Fehlermeldung, wenn ich das Skript ausführe. Und noch eine Frage, und wenn ich zum Beispiel ein Array mit den Daten von Bestellungen habe und es gibt eine ganze Menge davon, wie kann ich dieses ganze Array in eine Tabelle in der Datenbank verschieben?
 VALUES (1,'Paul',a,'California',29000.00)  -->  VALUES (1,'Paul',a,'California',Mass[0])

void OnStart()
  {
  double Mass[4]={1,2,5,6};
  int a =222;
  Alert(Mass[3]);
   string filename="company.sqlite";
//--- создадим или откроем базу данных в общей папке терминалов
   int db=DatabaseOpen(filename, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
   if(db==INVALID_HANDLE)
     {
      Print("DB: ", filename, " open failed with code ", GetLastError());
      return;
     }
//--- если таблица COMPANY существует, то удалим её
   if(DatabaseTableExists(db, "COMPANY_2"))
     {
      //--- удаляем таблицу
      if(!DatabaseExecute(db, "DROP TABLE COMPANY_2"))
        {
         Print("Failed to drop table COMPANY with code ", GetLastError());
         DatabaseClose(db);
         return;
        }
     }
//--- создаем таблицу COMPANY
   if(!DatabaseExecute(db, "CREATE TABLE COMPANY_2("
                       "ID INT PRIMARY KEY     NOT NULL,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: ", filename, " create table failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- вставляем данные в таблицу
   if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))
     {
      Print("DB: ", filename, " insert failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- создадим запрос и получим хендл на него
   int request=DatabasePrepare(db, "SELECT * FROM COMPANY_2");
   if(request==INVALID_HANDLE)
     {
      Print("DB: ", filename, " request failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

   DatabasePrint(
      db,          // хендл базы данных, полученный в DatabaseOpen
      "COMPANY_2",      // таблица или SQL-запрос
      0              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

Versuchen Sie es zum Beispiel auf diese Weise.

Anstatt

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

schreiben Sie

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California'," + DoubleToString(Mass[0]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas'," + DoubleToString(Mass[1]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway'," + DoubleToString(Mass[2]) + ");"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

Dies ist nicht die einzige Möglichkeit.

 
Yuriy Bykov #:

Versuchen Sie es zum Beispiel so zu machen.

Anstelle von

schreiben Sie

Das ist nicht die einzige Möglichkeit.

Danke! Es funktioniert. Wo kann ich darüber lesen? Und andere Wege?

 
lego9955 einen benutzerdefinierten Charakter erstellt.

Ich muss es so ändern, dass es nicht nur ein Zeichen erstellt, sondern mehrere Zeichen, die im Skript geschrieben werden.

Zum Beispiel, drei AB AC AD, in der Zukunft eine beliebige Anzahl von diesem Prinzip.

Zyklus mit Ersetzung des nächsten Symbolnamens aus der Liste jedes Mal.

Etwa so:

string sNames = "AB,AC,AD";
string aNames[];

void OnStart()

  {
   int i;
   bool ch=true;

   if(StringSplit(sNames,StringGetCharacter(",",0),aNames) <= 0)return;

   ResetLastError();
   for(i=0; i<ArraySize(aNames); i++)
      {
       ch=ch && CustomSymbolCreate(aNames[i]);
       if(!ch)
         {
          PrintFormat("Symbol '%s' : error %d",aNames[i],GetLastError());
          break; // При первой ошибке выходим
         }
      }
   if(!ch)return;
   ...
  } 
 

Ich habe das schon einmal getan, dachte, ich hätte es getan und habe meinen Beitrag gelöscht.

void OnStart()
{
string arr[]= { "AB", "AC", "AD" };

  for(int i=0; i<ArraySize(arr); i++)

  {
   bool ch =CustomSymbolCreate(arr[i]);
   SymbolSelect(arr[i],true); 
  }  
}

Als ich die Seite aktualisierte, sah ich, dass Sie geantwortet hatten. Ja, die Fehlerbehandlung ist korrekter. Danke!

 
lego9955 Fehlerbehandlung ist korrekter. Vielen Dank!
ArraySize(arr)

Es wäre korrekter, in ushort außerhalb der Schleife zu definieren

 
lynxntech #:

es wäre korrekter, in uint außerhalb der Schleife zu definieren

Ich mache das oft, aber ich möchte immer noch daran glauben, dass der Compiler solche Standardsachen optimieren kann.

 

Der Roboter verfügt über zwei Filter: Stochastik und RSI, jeweils mit einer Reihe von Parametern. Es sollte nur ein Filter verwendet werden. D.h. wenn Stochastic eingeschaltet ist, sollte RSI ausgeschaltet sein und umgekehrt.

Dies habe ich nun getan:

  • Ich habe Eingabevariablen für Stochastic und RSI erstellt, die ihre Arbeit aktivieren und deaktivieren.
  • Im OnInit-Block prüfe ich, ob Stochastic und RSI gleichzeitig eingeschaltet sind, und erhalte den Fehler INIT_PARAMETERS_INCORRECT.
  • Im OnInit-Block prüfe ich, ob Stochastic ausgeschaltet ist, dann müssen alle seine Parameter Null sein, andernfalls wird der Fehler INIT_PARAMETERS_INCORRECT/ Ähnliches gilt für RSI.

Zielsetzung:

  • Keine Zeit zu verschwenden, wenn die Optimierung für inkompatible Entscheidungen durchgeführt wird. Wenn zum Beispiel RSI ausgewählt wird, werden die Parameter der Stochastik (Größe der überkauften/überverkauften Zonen, K- und D-Perioden, Verlangsamung, Glättungsmethode, Preis) nicht durchsucht.
  • Es stellt sich heraus, dass meine Option nicht funktioniert. Während der Optimierung scheinen diese Varianten ohnehin überoptimiert zu sein, was sich auf das Endergebnis der Optimierung auswirkt.

Bitte teilen Sie mir mit, wie ich den Optimierer dazu bringen kann, bei aktiviertem RSI nicht nach stochastischen Parametern zu suchen und umgekehrt.

Grund der Beschwerde: