Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



помогите подправить советник

Delta.mq4 (4 Kb)

Здравствуйте могли бы подправить условия
1 ордера выставляются при достижении определенного тикового обьема
2 возможность выбора устанавливаемого ордера ,( бай стоп или сел стоп)
вывести эти параметры в окно настроек
к примеру заранее выставляю в советнике бай или сел стоп с определенным значением обьема тп и стопом — при появлении нового бара появился обьем равный указанному в настройках и ордер выставлен.
  • 0
  • Просмотров: 3866
  • 18 марта 2016, 13:22
  • Walerii
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник по системе color bar forex
Следующая запись в группе  
советник гридер
18 марта 2016
18 марта 2016

Брокер для ваших роботов, 15 лет на рынке

Комментарии (27)

+
0
Гляну сегодня.
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 18 марта 2016, 17:13
+
0
Сейчас если на предыдущем баре тиковый объем больше чем в настройках ставит ордер:




//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    StopLoss      = 333;  // лось
extern int    TakeProfit    = 333;  // язь
extern int    Delta         = 33;   // расстояние от цены до ордера 
extern int    BuySell       = 0;    // 0-оба 1-бай 2-селл
extern int    Slip          = 3;    // проскальзывание ордера
extern int    TickVolume    = 3333; // тиковый объем
extern double Lots          = 0.3;  // объем позиции
extern int    Magic         = 333;  // магик
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()>3) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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)
  {
   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) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   long v = iVolume(NULL,0,1);
   
   if(CountTrades()<1 && v>TickVolume)
     {
      if((BuySell==0 || BuySell==1) && CountOrders(4)<1) PutOrder(4,Ask+Delta*Point);
      if((BuySell==0 || BuySell==2) && CountOrders(5)<1) PutOrder(5,Ask-Delta*Point);
     }

   if(CountTrades()>0) DelOrders();
   
   Comment("\n Volume: ",v);
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 18 марта 2016, 19:50
+
0
прошу учесть одно пожелание, ордер должен выставляться при условии если на следующем баре появляется обьем равный или на 1 больше чем в настройках. Допустим я включил советник в 15:29, а ордер должен быть выставлен при появлении обьема на баре открытом в 15 30
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 20 марта 2016, 20:03
+
0
Сейчас ордер ставится на открытии свечи и добавил время истечения ордера.


//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    StopLoss      = 333;  // лось
extern int    TakeProfit    = 333;  // язь
extern int    Delta         = 33;   // расстояние от цены до ордера 
extern int    BuySell       = 0;    // 0-оба 1-бай 2-селл
extern int    Slip          = 3;    // проскальзывание ордера
extern int    Expiration    = 60;   // истечение ордера
extern int    TickVolume    = 3333; // тиковый объем
extern double Lots          = 0.3;  // объем позиции
extern int    Magic         = 333;  // магик

datetime t=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*60,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()>3) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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)
  {
   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) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   long v = iVolume(NULL,0,1);
   
   if(CountTrades()<1 && v>TickVolume && t!=Time[0])
     {
      if((BuySell==0 || BuySell==1) && CountOrders(4)<1) PutOrder(4,Ask+Delta*Point);
      if((BuySell==0 || BuySell==2) && CountOrders(5)<1) PutOrder(5,Ask-Delta*Point);
      t=Time[0];
     }

   if(CountTrades()>0) DelOrders();
   
   Comment("\n Volume: ",v);
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 20 марта 2016, 20:35
+
0
благодарю завтра уторм проверю
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 20 марта 2016, 20:45
+
0
Протестировал, получилось не совсем то, там при наборе на текущем баре нужного обьема на открытии следующего выставляется отложка, типа включил я в 11 59 советник он определил что на баре в 11 59 есть нужный обьем и в 12 00 выставил ордер, а необходимо, чтобы ордер ставился только при наборе нужного обьема на новом баре.
Желаемое выглядит так--- врубаю я советник перед нонфармом в 16 29, ничего не происходит, затем в 16 30 открывается новый бар на нем вырастает обьем до указанного в настройках ( 410 к примеру) и сразу выставляется стоп ордер ну и крутая штука там есть срок его экспирации 60 сек *za* 
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 12:24
+
0
чтобы ордер ставился только при наборе нужного обьема на новом баре.

Для меня это не новый бар, а текущий :) 

Экспирация сейчас в секундах.
Сделал как только набрал на текущем нужный объем, сразу выставил:


//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    StopLoss      = 333;  // лось
extern int    TakeProfit    = 333;  // язь
extern int    Delta         = 33;   // расстояние от цены до ордера 
extern int    BuySell       = 0;    // 0-оба 1-бай 2-селл
extern int    Slip          = 3;    // проскальзывание ордера
extern int    Expiration    = 60;   // истечение ордера в секундах
extern int    TickVolume    = 3333; // тиковый объем
extern double Lots          = 0.3;  // объем позиции
extern int    Magic         = 333;  // магик

datetime t=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()>3) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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)
  {
   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) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   long v = iVolume(NULL,0,0);
   
   if(CountTrades()<1 && v>TickVolume)
     {
      if((BuySell==0 || BuySell==1) && CountOrders(4)<1) PutOrder(4,Ask+Delta*Point);
      if((BuySell==0 || BuySell==2) && CountOrders(5)<1) PutOrder(5,Ask-Delta*Point);
     }

   if(CountTrades()>0) DelOrders();
   
   Comment("\n Volume: ",v);
  }
//+------------------------------------------------------------------+


avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 13:36
+
0
такс сщяс протещщу
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 13:54
+
0
выдает ошибки order send erros 3 order send erro 4111
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 14:16
+
0
протестил, получается, что включил советник и он может поставить в эту же секунду ордер — если там есть искомый обьем, может есть какой либо таймер, к примеру поставил в настройках время начала расчета 15 30, включил в 15 28 и он до 15 30 ничего не считает
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 14:29
+
0
это параметр expiration барахлит что ли, я 900 ставлю тогда ошибки не выдает
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 14:45
+
0
order send erro 4111


ошибка 4111 — Короткие позиции не разрешены
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 14:45
+
0
Можно поставить время начала работы в 15.30 например
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 14:47
+
0
ошибки это не самое страшное, помогите довести до ума идею))), чтобы подсчеты начинались не на текущем баре, а на следующем, *help* 
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 14:50
+
0
Давайте тогда с катринками а то я уже 3 варианта сделал и не пойму никак что нужно.
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 14:56
+
0
отличная идея и вывести в настройки время начала работы, я за!
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 14:53
+
0
а лучше по скайпу чтобы на пальцах все объяснить а то так бесконечно будет продолжаться. andrew.am2
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 14:57
+
0
TimeCurrent( ) +N; это не аналог функции expiration?
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 14:56
+
0
я в скайпе сейчас
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 14:58
+
0
последний вариант самый успешный, просто необходимо поставить время начала работы например с 15 30 и вывести параметр в настройках а истечение ордера в секундах убрать т. к. пока 900 там не ставлю выдает ошибку 3 и 4111
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 15:00
+
0
Давайте все по скайпу обсудим чтобы мне время больше не терять
avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 15:02
+
0
включаю
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 15:05
+
0
я в скайпе
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 21 марта 2016, 15:10
+
0
Только истечение нужно побольше ставить :)  www.opentraders.ru/downloads/1112/

avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 16:10
+
0
Параметр «extern int BuySell = 0; // 0-оба 1-бай 2-селл» при выставке на 0 работает только на бай
avatar

  19  lorik Сообщений: 357 - Лариса

  • 21 марта 2016, 19:13
+
0
Сейчас сделал чтобы работал как в настройках прописано и время начала работы можно вводить в одну строку:

extern string StartTime = "03:30:30";



//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    StopLoss      = 333;  // лось
extern int    TakeProfit    = 333;  // язь
extern int    Delta         = 33;   // расстояние от цены до ордера 
extern int    BuySell       = 0;    // 0-оба 1-бай 2-селл
extern int    Slip          = 3;    // проскальзывание ордера
extern int    Expiration    = 60;   // истечение ордера в минутах
extern int    TickVolume    = 33;   // тиковый объем
extern double Lots          = 0.3;  // объем позиции
extern int    Magic         = 333;  // магик
extern string StartTime     = "03:30:30";

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*60,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()>3) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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)
  {
   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) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   long v=iVolume(NULL,0,0);

   if(CountTrades()<1 && v>TickVolume)
     {
      if(TimeCurrent()>=StringToTime(StartTime))
        {
         if((BuySell==1 || BuySell==0) && CountOrders(4)<1)PutOrder(4,Ask+Delta*Point);
         if((BuySell==2 || BuySell==0) && CountOrders(5)<1) PutOrder(5,Ask-Delta*Point);
        }
     }

   if(CountTrades()>0) DelOrders();

   Comment("\n Volume: ", v,
           "\n Time: ", TimeToString(TimeCurrent(),TIME_SECONDS));
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16277 - Андрей

  • 21 марта 2016, 20:30
+
0
А у вас нет такой версии советника «Delta» только чтобы она включала в себя функцию «трейлинг стоп»?
avatar

  2  offer Сообщений: 4

  • 1 апреля 2016, 15:06

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий