Creación de un robot - página 5

 

Se han añadido dos botones más para ajustar las líneas horizontales.

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


Archivos adjuntos:
ioia3x_0004.PNG  96 kb
0004.mq5  44 kb
 

Se han añadido comandos para las líneas horizontales o de tendencia

//+------------------------------------------------------------------+
//|                                                         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; //
//+------------------------------------------------------------------+
Archivos adjuntos:
0005.mq5  101 kb
 
SanAlex:

Se han añadido comandos para las líneas horizontales o de tendencia

¡Que tengan un buen día y buen humor todos!

¿Qué pidió Roman? Aquí está una cita de su primer puesto: "Completamente programa, para abrir un comercio cuando se inicia y por favor, explique qué es qué. Ayuda mucho".

Añadir códigos sin explicar para qué sirven no sirve de nada.

Roman, tu solución a esta situación es exactamente la misma que la mía. Tome cualquier Asesor Experto simple de CodeBase, bueno, al menos este https://www.mql5.com/ru/code/138

Abra su código en el MetaEditor y comience a estudiar los comentarios que hay en cada línea del código. Hay EAs en las que todos los comentarios están escritos en inglés. Si no conoces bien el idioma, el traductor de Google te ayudará. Si en algún Asesor Experto falta el comentario de las líneas, entonces busque secuencialmente todas las palabras coloreadas en el código del programa, ponga el cursor sobre ellas, pulse la tecla F1 y se le abrirán las secciones correspondientes del manual de MQL5. Lea estas secciones, comente estas líneas con sus propias palabras y, si algo no está claro, pregunte aquí. De esta manera, avanzarás más rápido en el aprendizaje del lenguaje de programación.

Saludos, 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:

¡Buen día y buen humor a todos!

¿Qué pidió Roman? Aquí está una cita de su primer puesto: "Completamente programa, en la apertura de un comercio cuando se inicia y por favor, explique qué es qué. Ayuda mucho".

El simple hecho de añadir códigos sin explicación es inútil para él.

Roman, tu solución en esta situación es exactamente la misma que la mía. Tome cualquier Asesor Experto simple de CodeBase, bueno, al menos este https://www.mql5.com/ru/code/138

Abra su código en el MetaEditor y comience a estudiar los comentarios que hay en cada línea del código. Hay EAs en las que todos los comentarios están escritos en inglés. Si no conoces bien el idioma, el traductor de Google te ayudará. Si en algún Asesor Experto falta el comentario de las líneas, entonces busque secuencialmente todas las palabras coloreadas en el código del programa, ponga el cursor sobre ellas, pulse la tecla F1 y se le abrirán las secciones correspondientes del manual de MQL5. Lea estas secciones, comente estas líneas con sus propias palabras y, si algo no está claro, pregunte aquí. De esta manera, avanzarás más rápido en el aprendizaje del lenguaje de programación.

Saludos, Vladimir.

No entiendo - ¿es mejor borrar lo que he engañado? - Que él mismo, ¿cómo aprender?

 
SanAlex:

No lo entiendo, ¿es mejor borrar lo que hice? - para que pueda aprender por sí mismo?

No borrar, sino explicar lo que está escrito en los códigos y por qué se hace.

Sinceramente, Vladimir.

 
MrBrooklin:

No borrar, sino explicar lo que está escrito en los códigos y por qué se hace.

Respetuosamente, Vladimir.

Soy autodidacta - y yo mismo copio de los códigos disponibles, - El problema es que no sé explicar cómo esculpir!? - algo en mi interior me dice cómo esculpir.

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

Ya sé lo que he moldeado, lo que falta ahí es un Thrall para la línea.

 
SanAlex:

Soy autodidacta - y yo mismo copio de los códigos disponibles, - El problema es que no sé explicar cómo esculpir!? - algo en mi interior me dice cómo esculpir.

¡Ese es exactamente el problema! Cuando empecé a estudiar el lenguaje MQL5, leí muchos artículos sobre la creación de Asesores Expertos. INICIO Todavía no lo he encontrado. Por supuesto, hay algunos artículos con enlaces a Roman, pero no son suficientes, al menos para mí.

Yo mismo, por ejemplo, veo muchos códigos de EA, pero no hay manera de entender por qué se escribió tal o cual línea. Hasta ahora, he logrado reescribir el código para mí de un Asesor Experto ya hecho.

Saludos, Vladimir.

 
MrBrooklin:

¡Ese es el problema! He leído muchos artículos sobre la creación de Asesores Expertos cuando empecé a estudiar el lenguaje MQL5. BEGINNERS Todavía no lo he encontrado. Por supuesto, hay algunos artículos con enlaces a Roman, pero no son suficientes, al menos para mí.

Por ejemplo, yo mismo veo muchos códigos de Asesores Expertos, pero no puedo entender por qué se escribió tal o cual línea. Hasta ahora, he tenido suficiente cerebro para reescribir el código por mí mismo de un Asesor Experto ya hecho.

Sinceramente, Vladimir.

Busco funciones para mis tareas: voy desmontando una función a medida que empiezo a entender cómo funciona, entonces todo es más fácil de aprender.

 
SanAlex:

Busco funciones para mis tareas: voy desmontando la función a medida que empiezo a entender cómo funciona, entonces todo es más fácil de aprender.

Aquí hay un ejemplo en vivo de un problema con el que he estado luchando durante más de una hora. Lo necesito para crear y mostrar el indicador ZigZagColor en el gráfico al inicio del EA. Se hizo en 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);

El indicador fue creado y mostrado. Ahora necesito que el indicador se elimine después de que se elimine el Asesor Experto. Lo estoy escribiendo:

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

Pero el indicador no se elimina. Lo he solucionado todo. He limpiado el mango y he aplicado la función de borrado. Me pregunto cuál es la razón por la que no se desinstala.

Saludos, Vladimir.

 
MrBrooklin:

Aquí hay un ejemplo en vivo de un problema con el que he estado luchando durante más de una hora. Quería que el indicador ZigZagColor se creara y se mostrara en el gráfico al iniciar el EA. Se hizo en int OnInit:

El indicador fue creado y mostrado. Ahora necesito que el indicador se elimine después de que se elimine el Asesor Experto. Lo estoy escribiendo:

Pero el indicador no se elimina. Lo he solucionado todo. He limpiado el mango y he aplicado la función de borrado. Me pregunto cuál es la razón por la que no se desinstala.

Saludos, Vladimir.

Hay una función más complicada para borrar

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);
  }
//+------------------------------------------------------------------+
Razón de la queja: