Criando um robô - página 5

 

Acrescentei mais dois botões - para definir as Linhas Horizontais.

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


Arquivos anexados:
ioia3x_0004.PNG  96 kb
0004.mq5  44 kb
 

Comandos adicionais para linhas Horizontais ou de Tendência

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

Comandos adicionais para linhas Horizontais ou de Tendência

Tenha um bom dia e boa disposição para todos!

O que Roman pediu? Aqui está uma citação de seu primeiro post: "Programar completamente, para abrir um negócio quando ele começar e, por favor, explique o que é o quê. Ajudar muito".

Basta acrescentar códigos sem explicar para que servem é inútil!

Roman, sua solução para esta situação é exatamente a mesma que a minha. Pegue qualquer simples Expert Advisor da CodeBase, bem, pelo menos este https://www.mql5.com/ru/code/138

Abra seu código no MetaEditor e comece a estudar os comentários que estão em cada linha do código. Há EAs onde todos os comentários são escritos em inglês. Se você não conhece bem o idioma, o Google Translator o ajudará. Se em algum Expert Advisor, o comentário às linhas estiver faltando, então procure sequencialmente todas as palavras coloridas no código do programa, coloque o cursor sobre elas, pressione a tecla F1 e as seções apropriadas do manual MQL5 se abrirão para você. Leia estas seções, comente estas linhas em suas próprias palavras, e se algo não estiver claro, então faça perguntas aqui. Desta forma, você se moverá mais rapidamente no aprendizado da linguagem de programação.

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

Bom dia e bom humor para todos!

O que Roman pediu? Aqui está uma citação de seu primeiro post: "Programe completamente, ao abrir uma profissão quando ela começar e, por favor, explique o que é o quê. Ajudar muito".

A simples adição de códigos sem explicação é inútil para ele!

Roman, sua solução nesta situação é exatamente a mesma que a minha. Pegue qualquer simples Expert Advisor da CodeBase, bem, pelo menos este https://www.mql5.com/ru/code/138

Abra seu código no MetaEditor e comece a estudar os comentários que estão em cada linha do código. Há EAs onde todos os comentários são escritos em inglês. Se você não conhece bem o idioma, o Google Translator o ajudará. Se em algum Expert Advisor, o comentário às linhas estiver faltando, então procure sequencialmente todas as palavras coloridas no código do programa, coloque o cursor sobre elas, pressione a tecla F1 e as seções apropriadas do manual MQL5 se abrirão para você. Leia estas seções, comente estas linhas em suas próprias palavras, e se algo não estiver claro, então faça perguntas aqui. Desta forma, você se moverá mais rapidamente no aprendizado da linguagem de programação.

Cumprimentos, Vladimir.

Eu não entendo - é melhor apagar o que eu traí? - Que ele mesmo, como aprender?

 
SanAlex:

Eu não entendo - é melhor apagar o que fiz? - para que ele possa aprender por conta própria?

Não excluir, mas explicar o que está escrito nos códigos e por que é feito!

Atenciosamente, Vladimir.

 
MrBrooklin:

Não excluir, mas explicar o que está escrito nos códigos e por que é feito!

Com todo o respeito, Vladimir.

Eu mesmo sou autodidata - e eu mesmo copio dos códigos disponíveis, - O problema é que eu não sei como explicar como esculpir!? - algo dentro me diz como esculpir.

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

Eu sei o que eu moldei, o que está faltando ali é um Thrall para a linha.

 
SanAlex:

Eu mesmo sou autodidata - e eu mesmo copio dos códigos disponíveis, - O problema é que eu não sei como explicar como esculpir!? - algo dentro me diz como esculpir.

Esse é exatamente o problema! Quando comecei a estudar a linguagem MQL5, li muitos artigos sobre a criação de Expert Advisors. ARRANQUE Eu ainda não o encontrei. É claro que há alguns artigos com links para o romano, mas não são suficientes, pelo menos para mim.

Eu mesmo, por exemplo, vejo muitos códigos EA, mas não tenho como entender por que esta ou aquela linha foi escrita. Até agora, já tive cérebro suficiente para reescrever o código para mim usando um dos Expert Advisors já prontos.

Cumprimentos, Vladimir.

 
MrBrooklin:

Esse é o problema! Li muitos artigos sobre a criação de Expert Advisors quando comecei a estudar a linguagem MQL5. INICIADORES Eu ainda não o encontrei. É claro que há alguns artigos com links para o romano, mas não são suficientes, pelo menos para mim.

Por exemplo, eu mesmo vejo muitos códigos de Expert Advisor, mas não consigo entender por que esta ou aquela linha foi escrita. Até agora, já tive cérebro suficiente para reescrever o código para mim mesmo de um Expert Advisor pronto.

Atenciosamente, Vladimir.

Estou procurando funções para minhas tarefas - desmonto uma função quando começo a entender como ela funciona, então tudo é mais fácil de aprender.

 
SanAlex:

Procuro funções para minhas tarefas - desmonto a função quando começo a entender como ela funciona, então tudo é mais fácil de aprender.

Aqui está um exemplo vivo de um problema com o qual eu tenho lutado há mais de uma hora. Eu preciso dele para criar e exibir o indicador ZigZagColor no gráfico no início da EA. Foi feito no OnInit:

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

O indicador foi criado e exibido. Agora eu preciso que o indicador seja apagado depois que o Expert Advisor for removido. Estou escrevendo-o:

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

Mas o indicador não é removido. Já resolvi tudo. Eu limpei o cabo e apliquei a função de apagar. Qual será a razão pela qual não se está desinstalando?

Cumprimentos, Vladimir.

 
MrBrooklin:

Aqui está um exemplo vivo de um problema com o qual eu tenho lutado há mais de uma hora. Eu queria que o indicador ZigZagColor fosse criado e exibido no gráfico ao iniciar a EA. Foi feito no OnInit:

O indicador foi criado e exibido. Agora eu preciso que o indicador seja apagado depois que o Expert Advisor for removido. Estou escrevendo-o:

Mas o indicador não é removido. Já resolvi tudo. Eu limpei o cabo e apliquei a função de apagar. Qual será a razão pela qual não se está desinstalando?

Cumprimentos, Vladimir.

Há uma função mais complicada para apagar

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);
  }
//+------------------------------------------------------------------+