Questions des débutants MQL5 MT5 MetaTrader 5 - page 1432

 

Bonjour tout le monde,

je suis nouveau alors j'espère écrire au bon endroit : je cherche à coder un EA qui pourrait m'aider dans le respect de mon money management, du style :

"clôturer tous les trades quand les pertes passées+le drawdown actuel sont en dessous de x %" + "clôture immédiate de tous trades jusqu'à la fin de la session/journée".

Si quelqu'un sait faire ou peut m'aider ce serait super sympa de me contacter.

Merci, tradez bien ;)

 
jeremy10p100 # :

Bonjour tout le monde,

je suis nouveau alors j'espère écrire au bon endroit : je cherche à coder un EA qui pourrait m'aider dans le respect de mon money management, du style :

"clôturer tous les trades quand les pertes passées+le drawdown actuel sont en dessous de x %" + "clôture immédiate de tous trades jusqu'à la fin de la session/journée".

Si quelqu'un sait faire ou peut m'aider ce serait super sympa de me contacter.

Merci, tradez bien ;)

Bonjour,

Essayez de rechercher sur le marché des solutions prêtes - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Vous pouvez également commander une solution personnalisée auprès de Freelance - https://www.mql5.com/fr/job

 
Bonjour à tous !!! S'il vous plaît, dites-moi comment copier des valeurs d'un tableau dans la base de données ? Voici le code de l'exemple de travail avec la base de données et lorsque j'essaie d'insérer des données du tableau dans la base de données dans le champ SALAIRE, j'obtiens une erreur lors de l'exécution du script. Et une autre question, et si par exemple j'ai un tableau avec les données des commandes et qu'il y en a beaucoup, comment puis-je déplacer tout ce tableau dans une table de la base de données ?
 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              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

Essayez de procéder de la manière suivante, par exemple.

Au lieu de

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

écrire

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

Ce n'est pas la seule façon de procéder.

 
Yuriy Bykov #:

Essayez de procéder comme suit, par exemple.

Au lieu de

écrire

Ce n'est pas la seule façon de procéder.

Merci, ça marche. Où puis-je trouver des informations à ce sujet ? Et d'autres méthodes ?

 
lego9955 crée simplement un personnage personnalisé.

J'ai besoin de le modifier pour qu'il crée non pas un seul personnage, mais plusieurs personnages qui sont écrits dans le script.

Par exemple, trois AB AC AD, à l'avenir n'importe quel nombre de ce principe.

Cycle avec substitution du nom du symbole suivant de la liste à chaque fois.

Quelque chose comme :

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

Je l'ai déjà fait, j'ai cru l'avoir fait et j'ai supprimé mon message.

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

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

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

Lorsque j'ai actualisé la page, j'ai vu que vous aviez répondu. Oui, la gestion des erreurs est plus correcte. Je vous remercie de votre attention.

 
lego9955 gestion des erreurs est plus correcte. Je vous remercie de votre attention.
ArraySize(arr)

Il serait plus correct de définir en ushort à l'extérieur de la boucle

 
lynxntech #:

il serait plus correct de définir en uint à l'extérieur de la boucle

C'est ce que je fais souvent, mais je veux encore croire que le compilateur peut optimiser des choses aussi standard.

 

Le robot dispose de deux filtres : Stochastique et RSI, chacun avec un ensemble de paramètres. Un seul filtre doit être utilisé. C'est-à-dire que si le filtre Stochastique est activé, le filtre RSI doit être désactivé et vice versa.

C'est ce que j'ai fait :

  • J'ai créé des variables d'entrée pour Stochastic et RSI, activant et désactivant leur travail.
  • Dans le bloc OnInit , je vérifie si Stochastic et RSI sont activés en même temps, l'erreur INIT_PARAMETERS_INCORRECT.
  • Dans le bloc OnInit, je vérifie que si Stochastic est désactivé, tous ses paramètres doivent être à zéro, sinon l'erreur INIT_PARAMETERS_INCORRECT/ De même pour RSI.

Objectif :

  • Ne pas perdre de temps en optimisant pour des choix incompatibles. Par exemple, pour que si le RSI est sélectionné, les paramètres du Stochastique (taille des zones de surachat/survente, périodes K, D, décélération, méthode de lissage, prix) ne soient pas recherchés.
  • Il s'avère que mon option ne fonctionne pas. Lors de l'optimisation, ces variantes semblent de toute façon sur-optimisées, ce qui affecte le résultat final de l'optimisation.

Merci de m'indiquer comment faire pour que l'optimiseur ne recherche pas les paramètres stochastiques lorsque le RSI est activé et vice versa.