Créer un robot - page 5

 

Ajout de deux boutons supplémentaires - pour le réglage des lignes horizontales.

-------------------------------------------------


Dossiers :
ioia3x_0004.PNG  96 kb
0004.mq5  44 kb
 

Ajout de commandes pour les lignes horizontales ou de tendance

//+------------------------------------------------------------------+
//|                                                         0005.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
//+------------------------------------------------------------------+
//| ENUM_TRADE_COMMAND                                               |
//+------------------------------------------------------------------+
enum ENUM_TRADE_COMMAND
  {
   Turn_Off=0,       // TURN  OFF
   UpName=1,         // Line UpName
   DownName=2,       // Line DownName
   UpName_s=3,       // Line UpName + Open Sell
   UpName_b=4,       // Line UpName + Open Buy
   DownName_b=5,     // Line DownName + Open Buy
   DownName_s=6,     // Line DownName + Open Sell
   close_buys=7,     // Close All Buy's
   close_sells=8,    // Close All Sell's
   close_all=9,      // Close All Buy's and Sell's
   open_buy=10,      // Open  Buy
   open_sell=11,     // Open  Sell
   close_open_b=12,  // Close Sell + Open Buy
   close_open_s=13,  // Close Buy + Open Sell
   open_buy_sell=14, // Open  Buy and Sell
  };
//+------------------------------------------------------------------+
input string   t="----- Lots                -----";              //
input double   InpLots                      = 0.01;              // Lots
input string   t0="---- Line Name           -----";              //
input string   InpObjUpName                 = "Имя Линии Up";    // Obj: Up (Trailing Horizontal Line) or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommand    = UpName_s;          // Obj:  command: UP
input string   InpObjDownName               = "Имя Линии Down";  // Obj: Down (Trailing Horizontal Line) or Trend Line)
input ENUM_TRADE_COMMAND InTradeCommand     = DownName_b;        // Obj:  command: DOWN
input ushort   InpObjStep                   = 15;                // Obj: Step (distance from price to object, in pips)
input string   t1="---- Indicators: UP      -----";              //
input bool     InpIndicatorsUp              = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY1  = open_buy;          // Trade command: ( Buy )
input ENUM_TRADE_COMMAND InpTradeCommandU1  = open_sell;         // Trade command: ( Sell )
input string   t2="---- Indicators:         -----";              //
input bool     InpIndicators                = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY   = close_sells;       // Trade command: ( Buy )
input ENUM_TRADE_COMMAND InpTradeCommandU   = close_buys;        // Trade command: ( Sell )
//---
double   m_adjusted_point;                // point value adjusted for 3 or 5 points
int      handle_iCustomUp;                // variable for storing the handle of the iStochastic indicator
int      handle_iCustom;                  // variable for storing the handle of the iStochastic indicator
datetime ExtPrevBarsUp           = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBars             = 0;     // "0" -> D'1970.01.01 00:00';
double   m_obj_step              = 0.0;   // Obj: Trailing Stop   -> double
uint     SLEEPTIME               = 1;     // Время паузы между повторами в секундах
ushort   InpSignalsFrequency     = 1;     // Search signals, in seconds (min value "1")
datetime ExtLastSignalsRx        = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBarsRx           = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtLastSignalsSx        = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBarsSx           = 0;     // "0" -> D'1970.01.01 00:00';
bool     ExtTurnOff              = false; //
bool     ExtUpName               = false; //
bool     ExtDownName             = false; //
bool     ExtNeedCloseBuy         = false; //
bool     ExtNeedCloseSell        = false; //
bool     ExtNeedCloseAll         = false; //
bool     ExtNeedOpenBuy          = false; //
bool     ExtNeedOpenSell         = false; //
bool     ExtNeedOpenBuySell      = false; //
//+------------------------------------------------------------------+
Dossiers :
0005.mq5  101 kb
 
SanAlex:

Ajout de commandes pour les lignes horizontales ou de tendance

Bonne journée et bonne humeur à tous !

Qu'est-ce que Roman a demandé ? Voici une citation de son premier message : "Programme complet, pour ouvrir une transaction quand elle commence et s'il vous plaît expliquer ce qui est quoi. Ils nous aident beaucoup."

Ajouter des codes sans expliquer à quoi ils servent est inutile !

Roman, ta solution à cette situation est exactement la même que la mienne. Prenez n'importe quel conseiller expert simple de CodeBase, du moins celui-ci https://www.mql5.com/ru/code/138.

Ouvrez son code dans MetaEditor et commencez à étudier les commentaires qui se trouvent dans chaque ligne du code. Il existe des EE où tous les commentaires sont rédigés en anglais. Si vous ne connaissez pas bien la langue, le traducteur Google vous aidera. Si dans un Expert Advisor, le commentaire des lignes est absent, alors recherchez séquentiellement tous les mots colorés dans le code du programme, placez le curseur dessus, appuyez sur la touche F1 et les sections appropriées du manuel MQL5 s'ouvriront pour vous. Lisez ces sections, commentez ces lignes dans vos propres mots, et si quelque chose n'est pas clair, posez des questions ici. De cette façon, vous progresserez plus rapidement dans l'apprentissage du langage de programmation.

Salutations, Vladimir.

Советник "Метод Пуриа"
Советник "Метод Пуриа"
  • www.mql5.com
Предлагается использовать следующие валютные пары в торговой стратегии форекс "Метод Пуриа" : AUDJPY - M30 - 15 пунктов (т.е. закрываем сделку при 15 пипсов тейк-профита) NZDUSD - 1H - 25 пунктов USDCAD - H1 - 20 пунктов EURGBP - H1 - 10 пунктов USDJPY - M30 - 15 пунктов GBPUSD - М30 - 20 пунктов USDCHF - M30 - 10 пунктов EURCHF - H1 - 15...
 
MrBrooklin:

Bonne journée et bonne humeur à tous !

Qu'est-ce que Roman a demandé ? Voici une citation de son premier post : "Programme complet, sur l'ouverture d'un trade quand il commence et s'il vous plaît expliquer ce qui est quoi. Ils nous aident beaucoup."

Le simple ajout de codes sans explication est inutile pour lui !

Roman, ta solution dans cette situation est exactement la même que la mienne. Prenez n'importe quel conseiller expert simple de CodeBase, du moins celui-ci https://www.mql5.com/ru/code/138.

Ouvrez son code dans MetaEditor et commencez à étudier les commentaires qui se trouvent dans chaque ligne du code. Il existe des EE où tous les commentaires sont rédigés en anglais. Si vous ne connaissez pas bien la langue, le traducteur Google vous aidera. Si dans un Expert Advisor, le commentaire des lignes est absent, alors recherchez séquentiellement tous les mots colorés dans le code du programme, placez le curseur dessus, appuyez sur la touche F1 et les sections appropriées du manuel MQL5 s'ouvriront pour vous. Lisez ces sections, commentez ces lignes dans vos propres mots, et si quelque chose n'est pas clair, posez des questions ici. De cette façon, vous progresserez plus rapidement dans l'apprentissage du langage de programmation.

Salutations, Vladimir.

Je ne comprends pas - est-il préférable de supprimer ce que j'ai triché ? - Que lui-même, comment apprendre ?

 
SanAlex:

Je ne comprends pas - est-il préférable de supprimer ce que j'ai fait ? - pour qu'il puisse apprendre par lui-même ?

Ne pas supprimer, mais expliquer ce qui est écrit dans les codes et pourquoi c'est fait !

Sincèrement, Vladimir.

 
MrBrooklin:

Ne pas supprimer, mais expliquer ce qui est écrit dans les codes et pourquoi c'est fait !

Respectueusement, Vladimir.

Je suis moi-même autodidacte - et je copie moi-même les codes disponibles, - Le problème est que je ne sais pas comment expliquer comment sculpter ! ? - quelque chose en moi me dit comment sculpter.

----------------------------------

Je sais ce que j'ai moulé, ce qui manque c'est un Thrall pour la ligne.

 
SanAlex:

Je suis moi-même autodidacte - et je copie moi-même les codes disponibles, - Le problème est que je ne sais pas comment expliquer comment sculpter !? - quelque chose en moi me dit comment sculpter.

C'est exactement le problème ! Lorsque j'ai commencé à étudier le langage MQL5, j'ai lu beaucoup d'articles sur la création d'Expert Advisors. DÉMARRAGE Je ne l'ai pas encore trouvé. Bien sûr, il y a quelques articles avec des liens vers Roman, mais ils ne sont pas suffisants, du moins pour moi.

Moi-même, par exemple, je vois beaucoup de codes EA, mais aucun moyen de comprendre pourquoi telle ou telle ligne a été écrite. Jusqu'à présent, j'ai eu assez de cervelle pour réécrire le code moi-même en utilisant l'un des Expert Advisors prêts à l'emploi.

Salutations, Vladimir.

 
MrBrooklin:

C'est ça le problème ! J'ai lu beaucoup d'articles sur la création d'Expert Advisors lorsque j'ai commencé à étudier le langage MQL5. DEBUTANTS Je ne l'ai pas encore trouvé. Bien sûr, il y a quelques articles avec des liens vers Roman, mais ils ne sont pas suffisants, du moins pour moi.

Par exemple, je vois moi-même beaucoup de codes de conseillers experts, mais je ne peux pas comprendre pourquoi telle ou telle ligne a été écrite. Jusqu'à présent, j'ai eu assez de cervelle pour réécrire moi-même le code à partir d'un conseiller expert prêt à l'emploi.

Sincèrement, Vladimir.

Je recherche des fonctions pour mes tâches - je démonte une fonction au fur et à mesure que je commence à comprendre son fonctionnement, puis tout est plus facile à apprendre.

 
SanAlex:

Je recherche des fonctions pour mes tâches - je démonte la fonction au fur et à mesure que je commence à comprendre son fonctionnement, puis tout est plus facile à apprendre.

Voici un exemple concret d'un problème avec lequel je me débats depuis plus d'une heure. J'ai besoin qu'il crée et affiche l'indicateur ZigZagColor sur le graphique au début de l'EA. Cela a été fait dans int OnInit :

   handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
                          Inp_ZZ_Depth,
                          Inp_ZZ_Deviation,
                          Inp_ZZ_Backstep);
   ChartIndicatorAdd(ChartID(),0,handle_iCustom);

L'indicateur a été créé et affiché. J'ai maintenant besoin que l'indicateur soit supprimé après la suppression du conseiller expert. Je suis en train de l'écrire :

void OnDeinit(const int reason)
  {
//---
   IndicatorRelease(handle_iCustom);
   ObjectsDeleteAll(0,"Examples\\ZigzagColor");
  }

Mais l'indicateur n'est pas supprimé. J'ai tout réglé. J'ai nettoyé la poignée et appliqué la fonction de suppression. Je me demande quelle est la raison pour laquelle il ne se désinstalle pas.

Salutations, Vladimir.

 
MrBrooklin:

Voici un exemple concret d'un problème avec lequel je me débats depuis plus d'une heure. Je voulais que l'indicateur ZigZagColor soit créé et affiché sur le graphique au démarrage de l'EA. Cela a été fait dans int OnInit :

L'indicateur a été créé et affiché. J'ai maintenant besoin que l'indicateur soit supprimé après la suppression du conseiller expert. Je suis en train de l'écrire :

Mais l'indicateur n'est pas supprimé. J'ai tout réglé. J'ai nettoyé la poignée et appliqué la fonction de suppression. Je me demande quelle est la raison pour laquelle il ne se désinstalle pas.

Salutations, Vladimir.

Il existe une fonction plus compliquée pour effacer

input string   t12="--- Indicator Delete    -----";              //
input string   Inpshort_name                = "Имя Индикатора";  // Delete Indicator Name
input string   Inpshort_name_1              = "Имя Индикатора";  // Delete Indicator Name
input bool     Inpres                       = false;             // Delete All Indicators
//+------------------------------------------------------------------+
//| ChartIndicatorDelete                                             |
//+------------------------------------------------------------------+
bool IndicatorDelete(void)
  {
     {ActionsOnTheChart(0);}
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ActionsOnTheChart(const long chart_id)
  {
   int sub_windows_total =-1;
   int indicators_total  =0;
//---
   if(!ChartWindowsTotal(chart_id,sub_windows_total))
     {
      return(false);
     }
//---
   for(int i=sub_windows_total-1; i>=0; i--)
     {
      indicators_total=ChartIndicatorsTotal(chart_id,i);
      //---
      if(indicators_total>0)
        {
         ChIndicatorsDelete(chart_id,i,indicators_total);
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChartWindowsTotal(const long chart_ID,int &sub_windows_total)
  {
   long value=-1;
//---
   if(!ChartGetInteger(chart_ID,CHART_WINDOWS_TOTAL,0,value))
     {Print(__FUNCTION__," Error = ",GetLastError()); return(false);}
//---
   sub_windows_total=(int)value;
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChIndicatorsDelete(const long  chart_id,
                        const int   sub_window,
                        const int   indicators_total)
  {
   for(int i=indicators_total-1; i>=0; i--)
     {
      string indicator_name=ChartIndicatorName(chart_id,sub_window,i);
      //---
      ChIndicatorDelete(indicator_name,chart_id,sub_window);
      ChartRedraw();
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChIndicatorDelete(const string shortname,
                       const long   chartid=0,
                       const int    subwindow=0)
  {
   bool res=ChartIndicatorDelete(chartid,subwindow,Inpshort_name);
   bool res2=ChartIndicatorDelete(chartid,subwindow,Inpshort_name_1);
   if(Inpres)
      bool res0=ChartIndicatorDelete(chartid,subwindow,shortname);
//--- проанализируем результат вызова ChartIndicatorDelete()
   if(!res)
     {
      PrintFormat("%s",shortname,subwindow,GetLastError());
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+