Créer un robot - page 2

 
Renat Akhtyamov:
Vérifiez la base de code, il y a beaucoup d'experts là-bas. Examinez-en une attentivement et vous comprendrez. Que votre tâche puisse être programmée en 30 minutes maximum

en fonction de la tâche... il existe des modèles, mais ils sont tellement primitifs :(

 
VVT:

en fonction de la tâche... il existe des modèles, mais ils sont tellement primitifs :(

Et je ne digère pas les porta-potties 😂
 
VVT:

en fonction de la tâche... il existe des modèles, mais ils sont tellement primitifs :(

Ce que je sais, c'est que plus un programme est primitif, moins il y a de risque d'échec. Comme en mécanique, moins il y a de détails, plus le mécanisme est fiable. L'essentiel est donc de trouver un équilibre entre fonctionnalité et fiabilité.

 
Роман Жилин:

Ce que je sais, c'est que plus le programme est primitif, plus le risque d'échec est faible. Comme en mécanique, moins il y a de pièces, plus le mécanisme est fiable. L'essentiel est donc de trouver un équilibre entre fonctionnalité et fiabilité.

Je suis d'accord, je l'ai déjà dit quelque part ici, un Conseiller Expert devrait contenir les choses les plus importantes nécessaires pour résoudre le problème, et tout le reste n'est qu'un simple bruissement et prend les ressources de l'ordinateur.

 

Voici un aperçu rapide de l'ouverture des boutons

//+------------------------------------------------------------------+
//|                                                         0001.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#define    InpMagic  182979245
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position; // trade position object
CTrade         m_trade;    // trading object
CSymbolInfo    m_symbol;   // symbol info object
//---
input double InpLots          =0.01; // Lots
//---
double m_adjusted_point;   // point value adjusted for 3 or 5 points
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);;
//---
   m_trade.SetExpertMagicNumber(InpMagic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;
//---
   m_trade.SetDeviationInPoints(3*digits_adjust);
   if(!m_position.Select(Symbol()))
     {
      CheckObject();
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(ObjectFind(0,"BUY")==0)
     {
      ObjectDelete(0,"BUY");
     }
   if(ObjectFind(0,"SELL")==0)
     {
      ObjectDelete(0,"SELL");
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CheckButon();
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CheckButon(void)
  {
//---
   bool res=false;
     {
      if(ObjectGetInteger(0,"BUY",OBJPROP_STATE)!=0)
        {
         ObjectSetInteger(0,"BUY",OBJPROP_STATE,0);
         double price=m_symbol.Ask();
           {
            //--- open position
            if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_BUY,InpLots,price,0.0,0.0))
               printf("Position by %s to be opened",m_symbol.Name());
            else
              {
               printf("Error opening BUY position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
               printf("Open parameters : price=%f,TP=%f",price,0.0);
              }
            PlaySound("ok.wav");
           }
        }
      if(ObjectGetInteger(0,"SELL",OBJPROP_STATE)!=0)
        {
         ObjectSetInteger(0,"SELL",OBJPROP_STATE,0);
         double price0=m_symbol.Bid();
           {
            if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_SELL,InpLots,price0,0.0,0.0))
               printf("Position by %s to be opened",m_symbol.Name());
            else
              {
               printf("Error opening SELL position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
               printf("Open parameters : price=%f,TP=%f",price0,0.0);
              }
            PlaySound("ok.wav");
           }
        }
      res=true;
     }
//--- result
   return(res);
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CheckObject(void)
  {
//---
   bool res=false;
     {
      ObjectCreate(0,"BUY",OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,"BUY",OBJPROP_XDISTANCE,ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)-102);
      ObjectSetInteger(0,"BUY",OBJPROP_YDISTANCE,37);
      ObjectSetString(0,"BUY",OBJPROP_TEXT,"BUY");
      ObjectSetInteger(0,"BUY",OBJPROP_BGCOLOR,clrMediumSeaGreen);
      ObjectCreate(0,"SELL",OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,"SELL",OBJPROP_XDISTANCE,ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)-50);
      ObjectSetInteger(0,"SELL",OBJPROP_YDISTANCE,37);
      ObjectSetString(0,"SELL",OBJPROP_TEXT,"SELL");
      ObjectSetInteger(0,"SELL",OBJPROP_BGCOLOR,clrDarkOrange);
      res=true;
     }
//--- result
   return(res);
  }
//+------------------------------------------------------------------+
Dossiers :
0001.mq5  5 kb
 
SanAlex:

En voici un rapide que j'ai fait pour ouvrir avec des boutons.

Merci, je pense que je vais m'y intéresser, pour commencer.

 
Роман Жилин:

Merci, je pense que je vais d'abord l'étudier.

Je ne recommande pas d'adapter la stratégie à l'EA, il vaut mieux faire l'inverse. Vous pouvez également assembler les éléments nécessaires d'autres EA pour mettre en œuvre votre stratégie.

 
Роман Жилин:

Besoin de la bonne direction pour un débutant, j'ai l'impression de tourner en rond


Guide-Forum-Stories-Compiler-Errors (et ainsi de suite en cercle à chaque fois).

Je pense avoir appris quelque chose de nouveau, mais j'ai l'impression d'être gravement déprimé, je ne peux même pas ouvrir un ordre de base lors du lancement d'une EA. J'ai besoin de quelqu'un pour allumer une torche dans la partie la plus profonde de la nuit, sans chemin. J'ai perdu mon chemin et je suis toujours en train d'errer.


Programme complet, sur l'ouverture d'une transaction quand elle commence et s'il vous plaît clarifier ce qui est quoi. Ça m'aide beaucoup.

Bonjour Roman !

Il y a deux excellents articles pour les débutants qui m'ont beaucoup aidé :

https://www.mql5.com/ru/articles/481

https://www.mql5.com/ru/articles/496

Sincèrement, Vladimir.

Торговые операции на MQL5 - это просто
Торговые операции на MQL5 - это просто
  • www.mql5.com
Почти все трейдеры приходят на рынок для того, чтобы заработать денег, хотя есть и доля тех, кому важен не сам торговый результат, а участие в процессе, драйв. Впрочем, получить удовольствие от процесса можно не только торгуя вручную, но и занимаясь разработкой автоматических торговых систем. Ведь создание торгового робота может быть таким же...
 
MrBrooklin:

Bonjour Roman !

Il y a deux excellents articles pour les débutants qui m'ont beaucoup aidé :

https://www.mql5.com/ru/articles/481

https://www.mql5.com/ru/articles/496

Sincèrement, Vladimir.

Vladimir, merci. Je suis tombé sur le premier article mais le second est exactement ce dont j'ai besoin maintenant.


Salutations, Roman.

 
Роман Жилин:

Vladimir, merci. Je suis tombé sur le premier article, mais le second est exactement ce dont j'ai besoin maintenant.


Sincèrement vôtre, Roman.

J'utilise également la référence MQL5 (onglet Documentation MQL5 sur le site web de MQL5). Il contient presque toutes les informations. Le seul gros inconvénient de ce livre - il est écrit pour les personnes qui ont des connaissances de base d'autres langages de programmation, mais pas pour les débutants. Par exemple, je ne comprends toujours pas le sens de la phrase qui revient constamment et qui commence par"Returns" :

AccountInfoDouble

Retourne la valeur du type double de la propriété du compte correspondant.


Qui revient, qui revient, où revient-il, pourquoi revient-il? Je ne le comprends toujours pas.

Salutations, Vladimir.

Документация по MQL5: Информация о счете / AccountInfoDouble
Документация по MQL5: Информация о счете / AccountInfoDouble
  • www.mql5.com
AccountInfoDouble - Информация о счете - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5