Как я собираю себе советника методом тыка - страница 50

 
Alexsandr San:

Добавил эту возможность в Утилиту ( Utility Command ) #property version     "1.004"

внизу, настройки для этой функции 

имя трендовой или горизонтальной линии - для установки Индикатора 

имя индикатора - который хотите установить на График

имя горизонтальных или трендовых линии Индикатора 

--------------------------принцип работы, должен быть такой

 

----------------------- Индикатор передвинул горизонтальную линию (синею) - если её пробьет, откроет ещё в SELL и удалит индикатор и выставит жёлтую линию, которая подхватится другим индикатором и передвинет линию к сиреневому уровню Индикатора  - после , Горизонтальная жёлтая, опять установит Индикатор 


Функция, работает отлично - Утилита, очень даже, не плохая получилась .

правда, надо в эту функцию, ещё добавить настройку, которая будет устанавливать Индикатор, через количество пунктов от открытой позиции  

Снимок

 
Alexsandr San:

Добавил эту возможность в Утилиту ( Utility Command ) #property version     "1.004"

внизу, настройки для этой функции 

имя трендовой или горизонтальной линии - для установки Индикатора 

имя индикатора - который хотите установить на График

имя горизонтальных или трендовых линии Индикатора 

--------------------------принцип работы, должен быть такой

 

----------------------- Индикатор передвинул горизонтальную линию (синею) - если её пробьет, откроет ещё в SELL и удалит индикатор и выставит жёлтую линию, которая подхватится другим индикатором и передвинет линию к сиреневому уровню Индикатора  - после , Горизонтальная жёлтая, опять установит Индикатор 


мелкие поправки в коде, в //| Функция проверки и добавления индикатора на график               |

#property version     "1.005"

//+------------------------------------------------------------------+
//| Функция проверки и добавления индикатора на график               |
//+------------------------------------------------------------------+
bool AddIndicator()
  {
//--- выводимое сообщение
   string message;
//--- проверим на совпадение символ индикатора и символ графика
   if(_Symbol!=_Symbol)
     {
      message="Демонстрация использования функции Demo_ChartIndicatorAdd():";
      message=message+"\r\n";
      message=message+"Нельзя на график добавить индикатор, рассчитанный на другом символе.";
      message=message+"\r\n";
      message=message+"Укажите в свойствах эксперта символ графика - "+_Symbol+".";
      Alert(message);
      //--- досрочный выход, не будем добавлять индикатор на график
      return false;
     }
//--- проверим на совпадение таймфрейм индикатора и таймфрейм графика
   if(_Period!=_Period)
     {
      message="Нельзя на график добавить индикатор, рассчитанный на другом таймфрейме.";
      message=message+"\r\n";
      message=message+"Укажите в свойствах эксперта таймфрейм графика - "+EnumToString(_Period)+".";
      Alert(message);
      //--- досрочный выход, не будем добавлять индикатор на график
      return false;
     }
//--- все проверки прошли, символ и период индикатора соответствуют графику
   if(indicator_handle==INVALID_HANDLE)
     {
      Print(__FUNCTION__,"  Создаем индикатор");
      indicator_handle=iCustom(_Symbol,_Period,Inpshort_name);
      if(indicator_handle==INVALID_HANDLE)
        {
         Print("Не удалось создать индикатор. Код ошибки ",GetLastError());
        }
     }
//--- сбросим код ошибки
   ResetLastError();
//--- накладываем индикатор на график
   Print(__FUNCTION__,"  Добавляем индикатор на график");
   Print("Индикатор построен на ",_Symbol,"/",EnumToString(_Period));
//--- получим номер нового подокна, в которое добавим индикатор
   int subwindow=(int)ChartGetInteger(0,-1);
   PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("Не удалось добавить индикатор на окно %d графика. Код ошибки  %d",
                  subwindow,GetLastError());
     }
//--- добавление индикатора на график прошло успешно
   return(true);
  }
//+------------------------------------------------------------------+
Файлы:
 
Alexsandr San:

мелкие поправки в коде, в //| Функция проверки и добавления индикатора на график               |

#property version     "1.005"

немного подправил код

#property version     "1.006"

input string   t1="----- Trailing Line: 2   -----";              //
input string   InpObjUpNameG                = "POT";             // Obj: TOP (Horizontal Line)
input int      InpStep3                     = 0;                 // Obj: Шаг сетки, пунктов("0" -> false)
input ENUM_TRADE_COMMAND InpTradeCommandG   = close_open_b;      // Obj:  command:
input string   InpObjDownNameG              = "REWOL";           // Obj: LOWER (Horizontal Line)
input int      InpStep4                     = 0;                 // Obj: Шаг сетки, пунктов("0" -> false)
input ENUM_TRADE_COMMAND InTradeCommandG    = close_open_s;      // Obj:  command:
input ushort   InpObjTrailingStopG          = 0;                 // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStepG          = 5;                 // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
input string   t9="------ ChartIndicatorAdd -----";              //
input bool     InpChartInd                  = false;             // Avto Line Chart Indicators
input string   InpIndiL                     = "AVERAGE 0";       // Line name (ChartIndicatorAdd)
input int      InpStep5                     = 15;                // Obj: Шаг сетки, пунктов("0" -> false)
input string   InpIndi_name                 = "Indicator";       // INDICATOR_SHORTNAME

от "AVERAGE 0";  выставит Горизонтальные линии "POT"; и "REWOL"; на заданном расстоянии = 0// Obj: Шаг сетки, пунктов("0" -> false)

если задать =true ( = false; // Avto Line Chart Indicators ) будет повторятся на заданном расстоянии от линии  "AVERAGE 0" 

Файлы:
 

весь день и всю ночь - но, добился чего хотел  Спасибо! Огромное !!!  Владимиру  Vladimir Karputov

по времени - один сигнал !!! Вот функция

input string   t="-----  Parameters         -----";              //
input datetime InpMonday_1                  = D'1980.07.19 10:00:00'; // Monday time 1 (use only HH::MM) (00::00 -> off)
//+------------------------------------------------------------------+
long     m_monday_1= 0;

 

int OnInit()
  {
//---
   MqlDateTime STime;
//--- Monday
   TimeToStruct(InpMonday_1,STime);
   m_monday_1=STime.hour*60*60+STime.min*60;
//---
   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
      TimeSession();

  }


//+------------------------------------------------------------------+
//| Search trading signals                                                                 |
//+------------------------------------------------------------------+
bool TimeSession()
  {
   bool res=false;
//---
   MqlDateTime STimeCurrent;
   TimeToStruct(TimeCurrent(),STimeCurrent);
   long time_current=STimeCurrent.hour*60*60+STimeCurrent.min*60+STimeCurrent.sec;
   if(m_monday_1==0)
      return(true);
//--- Monday time 1
   if(m_monday_1!=0 && (time_current>=m_monday_1 && time_current<m_monday_1+60))
     {
      datetime last_setup=0;
      MqlDateTime SLastSetup;
      TimeToStruct(last_setup,SLastSetup);
      long time_last_setup=SLastSetup.hour*60*60+SLastSetup.min*60+SLastSetup.sec;
      if(SLastSetup.day_of_week==1 && (time_last_setup>=m_monday_1 && time_last_setup<m_monday_1+60))
         return(true);
      if(1>0)
        {
         Sleep(59*1000);
         PlaySound("tick.wav");
        }
      res=true;
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Vladimir Karputov
  • www.mql5.com
Люди. Граждане! Огромная просьба - заполняйте свой профиль на сайте и пользуйтесь стандартными программами - устанавливайте Skype. У Skype есть очень полезная функция - показ рабочего стола. В таком случае можно оперативно подсказать по возникшей проблеме. Помните - время - деньги! Древняя народная мудрость гласит: если хочешь помочь...
 
Alexsandr San:

немного подправил код

#property version     "1.006"

от "AVERAGE 0";  выставит Горизонтальные линии "POT"; и "REWOL"; на заданном расстоянии = 0// Obj: Шаг сетки, пунктов("0" -> false)

если задать =true ( = false; // Avto Line Chart Indicators ) будет повторятся на заданном расстоянии от линии  "AVERAGE 0" 

#property version     "1.007"
 Добавил - по Времени, установить Индикатор ,Горизонтальные линии, которые задаются на каком расстоянии, от цены .

а также по Времени, закрыть все Позиции и удалить Эксперта и сменить графики или можно просто, не удаляя открытые позиции , удалить Эксперта и заменить шаблон Графика .

Вот его настройки 

//+------------------------------------------------------------------+
input string   t="-----  Parameters         -----";              //
input string   Template                     = "ADX";             // Имя шаблона(without '.tpl')
input bool     Inpwithout                   = false;             // Сменить только шаблон (true)
input datetime InpMonday_2                  = D'1970.01.01';     // Dell (00::00 -> off)
input double   TargetProfit                 = 999999.99;         // Цель Баланса(Ваш Баланс + сумма)
input uint     maxLimits                    = 1;                 // Кол-во Позиции Открыть в одну сторону
input double   InpLots                      = 0.01;              // Lots
input int      InpTakeProfit                = 90;                // Take Profit ("0"-No. 5<100)
input string   t0="----- Trailing Line: 1   -----";              //
input string   InpObjUpName                 = "ZTOP";            // Obj: TOP (Horizontal Line)
input int      InpStep1                     = 25;                // Obj: Шаг сетки, пунктов("0" -> false)
input ENUM_TRADE_COMMAND InpTradeCommand    = open_sell;         // Obj:  command:
input string   InpObjDownName               = "ZLOWER";          // Obj: LOWER (Horizontal Line)
input int      InpStep2                     = 25;                // Obj: Шаг сетки, пунктов("0" -> false)
input ENUM_TRADE_COMMAND InTradeCommand     = open_buy;          // Obj:  command:
input ushort   InpObjTrailingStop           = 0;                 // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStep           = 5;                 // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
input string   t2="----- Indicators: SELL   -----";              //
input string   short_name                   = "LeMan_BrainTrend1Sig";   // Name Indicators "SELL"
input bool     InpIndicators                = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY   = open_sell;         // Trade command: (BuyBuffer Indicators)
input ENUM_TRADE_COMMAND InpTradeCommandU   = close_sells;       // Trade command: (SellBuffer Indicators)
input string   t3="----- Indicators: BUY    -----";              //
input string   short_name1                  = "LeMan_BrainTrend1Sig";   // Name Indicators "BUY"
input bool     InpIndicators1               = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY1  = close_buys;        // Trade command: (BuyBuffer Indicators)
input ENUM_TRADE_COMMAND InpTradeCommandU1  = open_buy;          // Trade command: (SellBuffer Indicators)
input string   t4="----- Button:            -----";              //
input ENUM_TRADE_COMMAND InpTradeCommandBut = open_buy;          // Obj(BUY):  command:Button: BUY
input ENUM_TRADE_COMMAND InTradeCommandBut  = open_sell;         // Obj(SELL):  command:Button: SELL
input int      TrailingStop_STOP_LEVEL      = 36;                // Button: Trailing Stop LEVEL
input string   t5="----- Line name: 1       -----";              //
input string   InpNameR                     = "LineR";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandR   = open_buy;          // Trade command:
input string   t6="----- Line name: 2       -----";              //
input string   InpNameS                     = "LineS";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandS   = open_sell;         // Trade command:
input string   t7="----- Revers Buy><Sell   -----";              //
input bool     ObjRevers                    = false;             //  Revers
input string   t8="------ Indicator Delete  -----";              //
input string   Inpshort_name_1              = "Indicator 2";     // INDICATOR_SHORTNAME 2
input bool     Inpres                       = false;             // Delete All Indicators
input string   t1="----- Trailing Line: 2   -----";              //
input string   InpObjUpNameG                = "POT";             // Obj: TOP (Horizontal Line)
input int      InpStep3                     = 20;                // Obj: Шаг сетки, пунктов("0" -> false)
input ENUM_TRADE_COMMAND InpTradeCommandG   = close_open_b;      // Obj:  command:
input string   InpObjDownNameG              = "REWOL";           // Obj: LOWER (Horizontal Line)
input int      InpStep4                     = 20;                // Obj: Шаг сетки, пунктов("0" -> false)
input ENUM_TRADE_COMMAND InTradeCommandG    = close_open_s;      // Obj:  command:
input ushort   InpObjTrailingStopG          = 0;                 // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStepG          = 5;                 // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
input string   t9="------ ChartIndicatorAdd -----";              //
input bool     InpChartInd                  = false;             // Avto Line Chart Indicators
input string   InpIndiL                     = "AVERAGE 0";       // Line name (ChartIndicatorAdd)
input int      InpStep5                     = 15;                // Obj: Шаг сетки, пунктов("0" -> false)
input string   InpIndi_name                 = "Indicator";       // INDICATOR_SHORTNAME
input datetime InpMonday_1                  = D'1970.01.01';     // Indicators(use only HH::MM)(00::00->off)
//+------------------------------------------------------------------+
Файлы:
 

Индикатор выдаёт Алерт  - от Горизонтальной синей линии, рисуем одну верху, другую внизу и как синяя пересекает, срабатывает Алерт  и удаляет линию

- Буду добавлять, эту функцию в утилиту  Utility_Command.mq5 225 kb

Снимок 

Файлы:
macd_Line.mq5  21 kb
 

Не так просто, что бы Горизонтальные линии срабатывали в Окне Индикатора 

но я, вроде - кое что смастерил. Вот черновик . от нулевой линии макд  (SELL  нижнюю пробивает BUY  верхнею)

Снимок 

Снимок2

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

черновик Эксперта и Индикатора 

Файлы:
 
Alexsandr San:

Не так просто, что бы Горизонтальные линии срабатывали в Окне Индикатора 

но я, вроде - кое что смастерил. Вот черновик . от нулевой линии макд  (SELL  нижнюю пробивает BUY  верхнею)

 

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

черновик Эксперта и Индикатора 

Вообще-то, Эксперт срабатывает в Окне Индикатора - если LOW -Горизонтальная линия , между Линиями BUY и SELL то, не открывает позицию, а как передвинуть выше BUY откроет

позицию на покупку - и на оборот, ниже SELL откроет на продажу

AUDCADM1 

 

 
Alexsandr San:

Индикатор выдаёт Алерт  - от Горизонтальной синей линии, рисуем одну верху, другую внизу и как синяя пересекает, срабатывает Алерт  и удаляет линию

- Буду добавлять, эту функцию в утилиту  Utility_Command.mq5 225 kb

 

Добавил эту Функцию - оказывается всё просто, но я только до тюкался, как это реализовать 

#property version     "1.008"

AUDCADM1V      1

AUDCADM1B      2

Снимок       3


Индикатор для этой Функции, прикрепляю 

Файлы:
 

Да! ещё нужно и это добавить в Утилиту https://www.mql5.com/ru/code/23939


OBJ_HLINE follows price
OBJ_HLINE follows price
  • www.mql5.com
GannZIGZAG_Fibo_Grand_xN_Din Зигзаг Ганна с графическим объектом "Уровни Фибоначчи", построенными на двух, последних вершинах с расширенными настройками для отображения фибо-уровней. XKPrmSt_NRTR_HTF