Создание робота - страница 5

 

Добавил ещё две кнопки - для установки Горизонтальных линии.

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


Файлы:
ioia3x_0004.PNG  96 kb
0004.mq5  44 kb
 

Добавил команды для Горизонтальных или Трендовых линии 

//+------------------------------------------------------------------+
//|                                                         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; //
//+------------------------------------------------------------------+
Файлы:
0005.mq5  101 kb
 
SanAlex:

Добавил команды для Горизонтальных или Трендовых линии 

Всем доброго дня и хорошего настроения!

О чем просил Роман? Вот цитата из его первого поста: "Полностью программа, на открытие сделки при её запуске и прошу пояснить, что к чему. Выручите очень сильно."

Просто добавлять коды без объяснения для ЧЕГО ОНИ НУЖНЫ бесполезно!

Роман, у Вас выход в данной ситуации точно такой же, как и у меня. Возмите из CodeBase любой простой советник, ну, хотя бы вот этот https://www.mql5.com/ru/code/138

Откройте его код в MetaEditor и начните изучать комментарии, которые идут в каждой строчке кода. Бывают такие советники, где все комментарии написаны на английском языке. При плохом знании языка Гугл Переводчик Вам в помощь. Если в каком-то советнике комментариев к строкам нет, тогда последовательно ищите в программном коде все слова выделенное цветом, устанавливайте на них курсор, нажимайте клавишу F1 и Вам откроется соответствующие разделы справочника MQL5. Читайте эти разделы, своими словами комментируйте эти строчки и если что-то будет не понятно то, тогда задавайте здесь вопросы. Так Вы быстрее продвинетесь в изучении языка программирования.

С уважением, Владимир.

Советник "Метод Пуриа"
Советник "Метод Пуриа"
  • 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:

Всем доброго дня и хорошего настроения!

О чем просил Роман? Вот цитата из его первого поста: "Полностью программа, на открытие сделки при её запуске и прошу пояснить, что к чему. Выручите очень сильно."

Просто добавлять коды без объяснения для него бесполезно!

Роман, у Вас выход в данной ситуации точно такой же, как и у меня. Возмите из CodeBase любой простой советник, ну, хотя бы вот этот https://www.mql5.com/ru/code/138

Откройте его код в MetaEditor и начните изучать комментарии, которые идут в каждой строчке кода. Бывают такие советники, где все комментарии написаны на английском языке. При плохом знании языка Гугл Пероводчик Вам в помощь. Если в каком-то советнике комментариев к строкам нет, тогда последовательно ищите в программном коде все слова выделенное цветом, устанавливайте на них курсор, нажимайте клавишу F1 и Вам откроется соответствующие разделы справочника MQL5. Читайте эти разделы, своими словами комментируйте эти строчки и если что-то будет не понятно то, тогда задавайте здесь вопросы. Так Вы быстрее продвинетесь в изучении языка программирования.

С уважением, Владимир.

Так я не понял - лучше удалить, то что я нахимичил ? - что бы он сам, как то учился ?

 
SanAlex:

Так я не понял - лучше удалить, то что я нахимичил ? - что бы он сам, как то учился ?

Не удалить, а объяснить то, что написано в кодах и для чего это сделано!

С уважением, Владимир.

 
MrBrooklin:

Не удалить, а объяснить то, что написано в кодах и для чего это сделано!

С уважением, Владимир.

Я сам самоучка - и сам копирую из доступных кодов, - Проблема в том, что я не умею объяснять, как леплю!? - что то внутри подсказывает, как нужно слепить. 

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

Знаю то что слепил, не хватает туда, еще Трала для линии.   

 
SanAlex:

Я сам самоучка - и сам копирую из доступных кодов, - Проблема в том, что я не умею объяснять, как леплю!? - что то внутри подсказывает, как нужно слепить.   

Вот в этом-то вся проблема! Когда начал изучать язык MQL5, то прочитал много статей по поводу создания советников, но такой статьи, где всё по полочкам разложено, расписано и разжёвано для НАЧИНАЮЩИХ пока не нашёл. Есть, конечно, отдельные статьи, ссылки на которые уже Роману подсказал, но этого очень мало, по крайней мере для меня.

Сам, например, вижу много кодов советников, но никак не могу понять почему была написана та или иная строчка. Пока ума хватило на то, чтобы из одного готового советников переписать код под себя.

С уважением, Владимир.

 
MrBrooklin:

Вот в этом-то вся проблема! Когда начал изучать язык MQL5, то прочитал много статей по поводу создания советников, но такой статьи, где всё по полочкам разложено, расписано и разжёвано для НАЧИНАЮЩИХ пока не нашёл. Есть, конечно, отдельные статьи, ссылки на которые уже Роману подсказал, но этого очень мало, по крайней мере для меня.

Сам, например, вижу много кодов советников, но никак не могу понять почему была написана та или иная строчка. Пока ума хватило на то, чтобы из одного готового советников переписать код под себя.

С уважением, Владимир.

Я ищу функции для своих задач - разбираю функцию по полочкам, как начинаю понимать как она работает, тогда всё проще учить.  

 
SanAlex:

Я ищу функции для своих задач - разбираю функцию по полочкам, как начинаю понимать как она работает, тогда всё проще учить.  

Вот живой пример одной проблемы с которой бьюсь уже больше часа. Мне нужно было, чтобы при запуске советника создавался и на графике отображался индикатор ZigZagColor. Сделано в 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);

Индикатор создался и отобразился. Теперь после удаления советника нужно, чтобы индикатор удалился. Пишу:

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

а индикатор не удаляется. Вроде бы тоже всё по полочкам разложил. И хэндл очистил и функцию удаления применил. Вот в чем причина, почему не удаляется?

С уважением, Владимир.

 
MrBrooklin:

Вот живой пример одной проблемы с которой бьюсь уже больше часа. Мне нужно было, чтобы при запуске советника создавался и на графике отображался индикатор ZigZagColor. Сделано в int OnInit:

Индикатор создался и отобразился. Теперь после удаления советника нужно, чтобы индикатор удалился. Пишу:

а индикатор не удаляется. Вроде бы тоже всё по полочкам разложил. И хэндл очистил и функцию удаления применил. Вот в чем причина, почему не удаляется?

С уважением, Владимир.

для удаления - там функция посложней 

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);
  }
//+------------------------------------------------------------------+
Причина обращения: