Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1432

 

Salve a tutti,

Sono nuovo quindi spero di scrivere nel posto giusto: sto cercando di codificare un EA che possa aiutarmi nella gestione del denaro, tipo :

"chiudi tutti i trade quando le perdite passate+il drawdown attuale sono sotto l'x%" + "chiudi tutti i trade immediatamente fino alla fine della sessione/giorno".

Se qualcuno sa come fare o può aiutarmi sarebbe fantastico se si mettesse in contatto con me.

Grazie, buon trading ;)

 
jeremy10p100 # :

Ciao a tutti,

Sono nuovo quindi spero di scrivere nel posto giusto: sto cercando di codificare un EA che possa aiutarmi nella gestione del denaro, tipo :

"chiudi tutti i trade quando le perdite passate+il drawdown attuale sono sotto l'x%" + "chiudi tutti i trade immediatamente fino alla fine della sessione/giorno".

Se qualcuno sa come fare o può aiutarmi, sarebbe fantastico se si mettesse in contatto con me.

Grazie, buon trading ;)

Ciao,

Prova a cercare sul mercato soluzioni già pronte - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Puoi anche ordinare una soluzione personalizzata da Freelance - https://www.mql5.com/fr/job

 
Ciao a tutti!!! Per favore ditemi come posso copiare i valori da un array nel database? Ecco il codice dell'esempio di lavoro con il database e quando cerco di inserire i dati dall'array nel database nel campo SALARIO, ottengo un errore durante l'esecuzione dello script. E un'altra domanda, e se per esempio ho un array con i dati degli ordini e ce ne sono parecchi, come posso spostare tutto questo array in una tabella del database?
 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              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

Provate a farlo in questo modo, ad esempio.

Invece di

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);"))

scrivere

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);"))

Questo non è l'unico modo.

 
Yuriy Bykov #:

Provate a fare così, ad esempio.

Invece di

scrivere

Non è l'unico modo.

Grazie! Funziona. Dove posso leggere qualcosa al riguardo? E altri modi?

 
lego9955 crei semplicemente un personaggio personalizzato.

Devo cambiarlo in modo che non crei un solo personaggio, ma diversi personaggi che sono scritti nello script.

Ad esempio, tre AB AC AD, in futuro qualsiasi numero di questo principio.

Ciclo con sostituzione del nome del simbolo successivo dall'elenco ogni volta.

Qualcosa come:

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;
   ...
  } 
 

L'ho già fatto in passato, pensavo di averlo fatto e ho cancellato il mio post.

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

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

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

Quando ho aggiornato la pagina ho visto che avevi risposto. Sì, la gestione degli errori è più corretta. Grazie!

 
lego9955 gestione degli errori è più corretta. Grazie!
ArraySize(arr)

Sarebbe più corretto definire in ushort al di fuori del ciclo

 
lynxntech #:

sarebbe più corretto definire in uint al di fuori del ciclo

Lo faccio spesso, ma voglio ancora credere che il compilatore possa ottimizzare queste cose standard.

 

Il robot dispone di due filtri: Stocastico e RSI, ciascuno con una serie di parametri. È necessario utilizzare un solo filtro. Ad esempio, se lo Stocastico è attivo, l'RSI deve essere disattivato e viceversa.

Ora ho fatto questo:

  • Ho creato delle variabili di input per Stochastic e RSI, abilitando e disabilitando il loro lavoro.
  • Nel blocco OnInit verifico, se Stochastic e RSI sono attivi contemporaneamente, l'errore INIT_PARAMETERS_INCORRECT.
  • Nel blocco OnInit verifico se Stochastic è disattivato, allora tutti i suoi parametri devono essere a zero, altrimenti l'errore INIT_PARAMETERS_INCORRECT/ Analogamente per RSI.

Obiettivo:

  • Non perdere tempo quando si ottimizza per scelte incompatibili. Ad esempio, se si seleziona RSI, i parametri dello Stocastico (dimensione delle zone di ipercomprato/ipervenduto, periodi K, D, decelerazione, metodo di smoothing, prezzo) non vengono ricercati.
  • Risulta che la mia opzione non funziona. Durante l'ottimizzazione queste varianti sembrano essere comunque sovra-ottimizzate, il che influisce sul risultato finale dell 'ottimizzazione.

Vi prego di consigliarmi come fare in modo che l'ottimizzatore non cerchi i parametri stocastici quando è abilitato l'RSI e viceversa.