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

Рейтинг 2156



РЕКОМЕНДУЮ



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

Delta.mq4 (4 Kb)

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

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

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

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

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

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

  • 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 Сообщений: 16537 - Андрей

  • 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 Сообщений: 16537 - Андрей

  • 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 Сообщений: 16537 - Андрей

  • 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 Сообщений: 16537 - Андрей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 Сообщений: 16537 - Андрей

  • 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 Сообщений: 16537 - Андрей

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

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

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

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