Доработка ботов (советников, индикаторов) vol. 2

GeorgichFX

Новичок форума
Поздравляю всех присутствующих С Новым годом!
Скажите пожалуйста, возможно ли в готового советника добавить время торговли?
TradeScheduler v2.3 - хороший советник для установки времени работы других советников :)
 

Вложения

  • TradeScheduler v2.3.ex4
    31,2 КБ · Просмотры: 32
  • 2020-01-05_195501.jpg
    2020-01-05_195501.jpg
    67,4 КБ · Просмотры: 77

AlexeNP

Гуру форума
А как? Рисовалку как фильтр???? Поделитесь методикой!!! Это внепланетная методика наверное.
а что такого-то? практически все индикаторы рисовалки либо будущего, либо прошлого... по другому никак они не реализуются
 

AlexeNP

Гуру форума
так как? поясните рисовалку как фильтр нерисовалкам?
не бывает нерисовалок в принципе... ну вот возьмем любой индикатор - он все равно рисует... возьми к примеру скользящую среднюю и смести ее на пол-периода назад... а потом честно ответь рисует этот индикатор или нет
 

Anna89

Новичок форума
Добрый вечер. Уважаемые программисты, помогите исправить ошибку в советнике. Нужно, чтобы выставлялись лимитные (отложенные) ордера , ставятся сразу рыночные. То есть при сигнале индикатора ставится Limit, а сделка по этому ордеру открывается только при пересечении цены выставленного лимитника.

Код:
//+------------------------------------------------------------------+
//|                                            22.12.2019 ZZ+WPR.mq4 |
//|                                                       trader.ua. |
//|                                             [email protected] |
//+------------------------------------------------------------------+
#property copyright "trader.ua."
#property link      "[email protected]"
#property version   "1.00"
#property strict

extern int     Magic          = 1;
extern double  Lots           = 0.01;
extern int     Slippage       = 3;
extern int Delta          = 50;
extern int StopLoss       = 300;
extern int TakeProfit     = 600;

double Price;
int ticket=0,err;
double zz;
double sl=0,tp=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits == 3 || Digits == 5)
     {
      Slippage*=10;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
double ZZPrice(int ne=0)
  {
   int    i,k=iBars(NULL,0),ke=0;

   for(i=1; i<k; i++)
     {
      zz=iCustom(NULL,0,"ZigZag",5,5,3,0,i);
      if(zz!=0)
        {
         ke++;
         if(ke>ne)
            return(zz);
        }
     }
   Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
   return(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double zz0 = ZZPrice(0);
   double zz1 = ZZPrice(1);
   double zz2 = ZZPrice(2);
   double delta = MathAbs(zz0-zz1)/Point;

   if(CountTrades()<1)
     {
      if(delta>Delta)
        {
         if(CountOrders(5)<1 && zz0<zz1)
           {
            RefreshRates();

            if(StopLoss>0)
               sl=NormalizeDouble(Price+StopLoss*Point,Digits);
            else
               sl=0;
            if(TakeProfit>0)
               tp=NormalizeDouble(Price-TakeProfit*Point,Digits);
            else
               tp=0;

            Price = NormalizeDouble(iHigh(NULL,0,0),Digits);
            ticket = OrderSend(Symbol(),OP_SELLLIMIT,Lots,Price,Slippage,sl,tp,"",Magic,0,Red);
            Alert("Открылась сделка на Sell");
            if(ticket<0)
              {
               Print("Позиция Sell не открылась, ошибка: ",GetLastError());
               return;
              }
           }
         if(CountOrders(4)<1 && zz0>zz1)
           {
            RefreshRates();

            if(StopLoss>0)
               sl=NormalizeDouble(Price-StopLoss*Point,Digits);
            else
               sl=0;
            if(TakeProfit>0)
               tp=NormalizeDouble(Price+TakeProfit*Point,Digits);
            else
               tp=0;

            Price = NormalizeDouble(iLow(NULL,0,0),Digits);
            ticket = OrderSend(Symbol(),OP_BUYLIMIT,Lots,Price,Slippage,sl,tp,"",Magic,0,Blue);
            Alert("Открылась сделка на Buy");
            if(ticket<0)
              {
               Print("Позиция Buy не открылась, ошибка: ",GetLastError());
               return;
              }
           }
        }
     }

   return;
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || (OrderType()>=0 && type==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowERROR()
  {
   err=GetLastError();
   switch(err)
     {
      case 1:
         return;
      case 2:
         Alert("Нет связи с торговым сервером ",Symbol());
         return;
      case 3:
         Alert("Error неправильные параметры ",Symbol());
         return;
      case 130:
         Alert("Error близкие стопы   Ticket ",Symbol());
         return;
      case 134:
         Alert("Недостаточно денег   ",Symbol());
         return;
      case 146:
         Alert("Error Подсистема торговли занята ",Symbol());
         return;
      case 129:
         Alert("Error Неправильная цена ",Symbol());
         return;
      case 131:
         Alert("Error Неправильный объем ",Symbol());
         return;
      case 4200:
         Alert("Error Объект уже существует ",Symbol());
         return;
      default:
         Alert("Error  ",ticket," ",Symbol());
         return;
     }
  }
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
 

MrGreen86

Гуру форума
Добрый вечер. Уважаемые программисты, помогите исправить ошибку в советнике. Нужно, чтобы выставлялись лимитные (отложенные) ордера , ставятся сразу рыночные. То есть при сигнале индикатора ставится Limit, а сделка по этому ордеру открывается только при пересечении цены выставленного лимитника.
Код вставляйте пожалуйста файлом.
вы по какой цене хотите лимитку поставить? в коде у вас прописано хай и лоу текущей свечи. т.е. очень близко к текущей цене или прямо по ней.
я думаю что вы хотите ставить лимитку по 1 точке зигзага? так и делайте:
Price = NormalizeDouble(zz1,_Digits);
и не забудьте переставить Price выше того места где вы считаете sl и tp, так как они завися от цены
 

Вложения

  • 123.mq4
    12,4 КБ · Просмотры: 32

mobidik

-----
Добрый вечер. Уважаемые программисты, помогите исправить ошибку в советнике. Нужно, чтобы выставлялись лимитные (отложенные) ордера , ставятся сразу рыночные. То есть при сигнале индикатора ставится Limit, а сделка по этому ордеру открывается только при пересечении цены выставленного лимитника.

Код:
//+------------------------------------------------------------------+
//|                                            22.12.2019 ZZ+WPR.mq4 |
//|                                                       trader.ua. |
//|                                             [email protected] |
//+------------------------------------------------------------------+
#property copyright "trader.ua."
#property link      "[email protected]"
#property version   "1.00"
#property strict

extern int     Magic          = 1;
extern double  Lots           = 0.01;
extern int     Slippage       = 3;
extern int Delta          = 50;
extern int StopLoss       = 300;
extern int TakeProfit     = 600;

double Price;
int ticket=0,err;
double zz;
double sl=0,tp=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits == 3 || Digits == 5)
     {
      Slippage*=10;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
double ZZPrice(int ne=0)
  {
   int    i,k=iBars(NULL,0),ke=0;

   for(i=1; i<k; i++)
     {
      zz=iCustom(NULL,0,"ZigZag",5,5,3,0,i);
      if(zz!=0)
        {
         ke++;
         if(ke>ne)
            return(zz);
        }
     }
   Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
   return(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double zz0 = ZZPrice(0);
   double zz1 = ZZPrice(1);
   double zz2 = ZZPrice(2);
   double delta = MathAbs(zz0-zz1)/Point;

   if(CountTrades()<1)
     {
      if(delta>Delta)
        {
         if(CountOrders(5)<1 && zz0<zz1)
           {
            RefreshRates();

            if(StopLoss>0)
               sl=NormalizeDouble(Price+StopLoss*Point,Digits);
            else
               sl=0;
            if(TakeProfit>0)
               tp=NormalizeDouble(Price-TakeProfit*Point,Digits);
            else
               tp=0;

            Price = NormalizeDouble(iHigh(NULL,0,0),Digits);
            ticket = OrderSend(Symbol(),OP_SELLLIMIT,Lots,Price,Slippage,sl,tp,"",Magic,0,Red);
            Alert("Открылась сделка на Sell");
            if(ticket<0)
              {
               Print("Позиция Sell не открылась, ошибка: ",GetLastError());
               return;
              }
           }
         if(CountOrders(4)<1 && zz0>zz1)
           {
            RefreshRates();

            if(StopLoss>0)
               sl=NormalizeDouble(Price-StopLoss*Point,Digits);
            else
               sl=0;
            if(TakeProfit>0)
               tp=NormalizeDouble(Price+TakeProfit*Point,Digits);
            else
               tp=0;

            Price = NormalizeDouble(iLow(NULL,0,0),Digits);
            ticket = OrderSend(Symbol(),OP_BUYLIMIT,Lots,Price,Slippage,sl,tp,"",Magic,0,Blue);
            Alert("Открылась сделка на Buy");
            if(ticket<0)
              {
               Print("Позиция Buy не открылась, ошибка: ",GetLastError());
               return;
              }
           }
        }
     }

   return;
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || (OrderType()>=0 && type==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowERROR()
  {
   err=GetLastError();
   switch(err)
     {
      case 1:
         return;
      case 2:
         Alert("Нет связи с торговым сервером ",Symbol());
         return;
      case 3:
         Alert("Error неправильные параметры ",Symbol());
         return;
      case 130:
         Alert("Error близкие стопы   Ticket ",Symbol());
         return;
      case 134:
         Alert("Недостаточно денег   ",Symbol());
         return;
      case 146:
         Alert("Error Подсистема торговли занята ",Symbol());
         return;
      case 129:
         Alert("Error Неправильная цена ",Symbol());
         return;
      case 131:
         Alert("Error Неправильный объем ",Symbol());
         return;
      case 4200:
         Alert("Error Объект уже существует ",Symbol());
         return;
      default:
         Alert("Error  ",ticket," ",Symbol());
         return;
     }
  }
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
У Вас, как только выполнилось условие, идет определение ценовых значений для SL и TP, относительно значения в переменной Price, вопрос: а какое там реальное значение? На следующем шаге, Вы присваиваете новое значение для этой же переменной, как текущие значение цены текущего бара по High или Low, которое и будет ценовым значением для установки позиции. Да, новый пик Zig-Zagа на n-баре может быть как в процессе построения текущей свечи, так и в момент открытия нового бара. Если это отложка, то должен быть отступ от цены, отложка, то, устанавливается и тут же срабатывает. Но, это как повезет. И еще одно: устанавливаете лимитки, а считаете стоповые позиции.
 

Laser300

Активный участник
не бывает нерисовалок в принципе... ну вот возьмем любой индикатор - он все равно рисует... возьми к примеру скользящую среднюю и смести ее на пол-периода назад... а потом честно ответь рисует этот индикатор или нет
Вы не много заблуждаетесь. Включите визуализацию объема вашего брокера на своей платформе. Вы хоть на голове стойте а значения на его истории не изменятся.
Способов анализа рынка не так много на самом то деле. Вот один из них (не рисующий) и пытаюсь отфильтровать. К великому сожалению я не программист.
 

Laser300

Активный участник
Уважаемые программисты возможно ли этому индикатору сделать запрет на рисование (перерасчет уже нарисованных значений)?
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    57,4 КБ · Просмотры: 258
  • 88_filter.ex4
    18 КБ · Просмотры: 18
  • 88_filter.mq4
    7,4 КБ · Просмотры: 29

RoninGT

Активный участник
Доброе утро или вечер! Не подскажите, почему обычный NB-channel перестал отображаться на 5-минутке? Везде есть, а там как и не было... Пробовал разные версии и ничего.
 

Вложения

  • NB-channel.ex4
    14,6 КБ · Просмотры: 27
  • NB-channel.mq4
    5,6 КБ · Просмотры: 46

блондинка

Элитный участник
Доброе утро или вечер! Не подскажите, почему обычный NB-channel перестал отображаться на 5-минутке? Везде есть, а там как и не было... Пробовал разные версии и ничего.
У меня работает.Предположу, что если на чарте на цене (паре в моменте) нет условий для канала-он не строиться.
 

railwayman

Активный участник
Здравствуйте!
добавьте пожалуйста в индикатор учет по магику.
спасибо.
 

Вложения

  • i-IBProfit_v01.mq4
    51,4 КБ · Просмотры: 52
Верх