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

Рейтинг 2153



РЕКОМЕНДУЮ




Лучшее от div15



может все просто Комментариев 7
2012-03-22 17:38:38Рейтинг 0

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

здравствуйте поправте пожалуйста советник
1 не всегда удаляет отложенные ордера после закрытия рыночного, сделать проверку на удаление ордеров.
2 не всегда выставляет отложку. сделать проверку на выставление ордеров.
3 сделать функцию закрытия ордеров по магик номеру (пример если 1 ордер с магиком 1 закрылся то отложенный ордер с магиком 2 тоже закрывается)
сделать чтобы работал на всех парах 3х 4х 5 знаках.
для реальной торговли.
возможно ли такое сделать.
Заранее, благодарен!
//+------------------------------------------------------------------+
//|                                                      Poshnik.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Delta         = 100;      //
extern int BuySell       = 0;        // 1-buy 2-sell 0-off
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
 
{
//---

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{
//---

 
}
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+
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;
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
 
{
   
int count=0;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderType()<2) count++;
       
}
     
}
   
return(count);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MarketOOP()
 
{
   
double oop=0;

   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) oop=OrderOpenPrice();
     
}

   
return(oop);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastType()
 
{
   
int type=8;

   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()<2) type=OrderType();
     
}

   
return(type);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double StopOOP()
 
{
   
double oop=0;

   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderType()>1) oop=OrderOpenPrice();
     
}

   
return(oop);
 
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
 
{
   
bool del;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderType()>1) del=OrderDelete(OrderTicket());
       
}
     
}
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
if(CountTrades()<1)
     
{
     
DelOrder();
     
if(BuySell==1) PutOrder(0,Ask);
     
if(BuySell==2) PutOrder(1,Bid);
     
}

   
if(MarketOOP()>0 && StopOOP()!=NormalizeDouble(MarketOOP()-Delta*Point,Digits) && LastType()==0) PutOrder(5,MarketOOP()-Delta*Point);
   
if(MarketOOP()>0 && StopOOP()!=NormalizeDouble(MarketOOP()+Delta*Point,Digits) && LastType()==1) PutOrder(4,MarketOOP()+Delta*Point);
 
}
//+------------------------------------------------------------------+
  • 0
  • Просмотров: 2836
  • 20 марта 2017, 15:51
  • div15
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник по стратегии spring(эволюция вабанка)
Следующая запись в группе  
добавить алерт к индикатору
20 марта 2017
21 марта 2017

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

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

+1
Посмотрю сегодня.
avatar

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

  • 20 марта 2017, 17:59
0
дайте ссылку на исходное тз?
avatar

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

  • 20 марта 2017, 19:42
0
http://zakaz.opentraders.ru/33947.html

пожалуйста
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 20 марта 2017, 19:44
0
avatar

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

  • 20 марта 2017, 20:41
комментарий был удален 2017-03-27 15:45:04 div15

комментарий был удален 2017-03-27 15:45:07 div15

0
Вот рабочий упрощенный вариант, отсюда и начнем плясать :) 


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

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Delta         = 100;      // расстояние от цены
extern int BuySell       = 0;        // 1-buy 2-sell 0-off
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
 
{
//---

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{
//---

 
}
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+
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;
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
 
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
 
{
   
bool del;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           
{
           
if(OrderType()>1) del=OrderDelete(OrderTicket());
           
}
       
}
     
}
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
if(CountTrades()<1)
     
{
     
DelOrder();
     
if(BuySell==1)
       
{
         
PutOrder(0,Ask);
         
PutOrder(5,Ask-Delta*Point);
       
}

     
if(BuySell==2)
       
{
         
PutOrder(1,Bid);
         
PutOrder(4,Bid+Delta*Point);
       
}
     
}
 
}
//+------------------------------------------------------------------+


Редактирован: 21 марта 2017, 05:07
avatar

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

  • 21 марта 2017, 04:22
0
Сейчас есть отлога и ордер в первоначальном варианте:



Удалил вручную позу и отлога удалилась, затем ордера выставились по новой:



Вот отлаженный первоначальный вариант:


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

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Delta         = 100;      //
extern int BuySell       = 0;        // 1-buy 2-sell 0-off
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
 
{
//---

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{
//---

 
}
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+
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;
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MarketOOP()
 
{
   
double oop=0;

   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
       
{
         
if(OrderType()<2) oop=OrderOpenPrice();
       
}
     
}

   
return(oop);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastType()
 
{
   
int type=8;

   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
       
{
         
if(OrderType()<2) type=OrderType();
       
}
     
}

   
return(type);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double StopOOP()
 
{
   
double oop=0;

   
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     
{
     
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
       
{
         
if(OrderType()>1) oop=OrderOpenPrice();
       
}
     
}

   
return(oop);
 
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
 
{
   
bool del;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           
{
           
if(OrderType()>1) del=OrderDelete(OrderTicket());
           
}
       
}
     
}
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
if(CountTrades()<1)
     
{
     
DelOrder();
     
if(BuySell==1) PutOrder(0,Ask);
     
if(BuySell==2) PutOrder(1,Bid);
     
}

   
if(MarketOOP()>0 && StopOOP()!=NormalizeDouble(MarketOOP()-Delta*Point,Digits) && LastType()==0) PutOrder(5,MarketOOP()-Delta*Point);
   
if(MarketOOP()>0 && StopOOP()!=NormalizeDouble(MarketOOP()+Delta*Point,Digits) && LastType()==1) PutOrder(4,MarketOOP()+Delta*Point);
 
}
//+------------------------------------------------------------------+

avatar

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

  • 21 марта 2017, 05:18
комментарий был удален 2017-03-27 15:46:02 div15

комментарий был удален 2017-03-27 15:46:07 div15

комментарий был удален 2017-03-27 15:46:11 div15

комментарий был удален 2017-03-22 09:52:51 div15

+
0
спасибо большое за проделанную работу. я со всем разобрался, скажите можно ли сделать такую функцию если закрываеся ордер с магиком 1 то советник помошник закрывает ордер с магиком 2
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 22 марта 2017, 09:59
0
Да можно. Добавить к последнему варианту?
avatar

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

  • 22 марта 2017, 17:16
0
добавте пожалуйста.и еще как сделать чтобы после открытия рыночного ордера выставлялся только 1 отложенный.
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 22 марта 2017, 17:24
комментарий был удален 2017-03-27 15:46:21 div15

комментарий был удален 2017-03-27 15:46:30 div15

комментарий был удален 2017-03-27 15:46:31 div15

комментарий был удален 2017-03-27 15:46:34 div15

0
Все есть: www.opentraders.ru/downloads/1521/ дорабатываем этот вариант для реальной торговли.
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 22 марта 2017, 19:56
0
Сделал так как вы просили. только не пойму для чего это и как будет использоваться?
www.opentraders.ru/downloads/1521/
avatar

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

  • 22 марта 2017, 20:47
0
спасибо большое*hi* 
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 22 марта 2017, 21:01
комментарий был удален 2017-03-27 15:44:35 div15

комментарий был удален 2017-03-27 15:44:32 div15

комментарий был удален 2017-03-27 15:44:28 div15

комментарий был удален 2017-03-27 15:44:23 div15

комментарий был удален 2017-03-27 15:44:15 div15


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