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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник - помошник

А можно сделать советник-помошник, который бы ввёл общий подсчёт лотов на валюте которой его поставить или если можно, то пусть контролирует все валюты. То есть у нас есть 5 лотов в бай и 15 лотов в сел, итого разница 10 лотов в сел. В советнике есть параметр в котором мы ставим, когда советник при скольки лотах должен выставить отложенный ордер в противоположную сторону. В советнике есть параметр где мы указывает процент выставления отложенного ордера. То есть если у нас разница 10 лотов в сел, и в параметре указано что при 10 лотах выставить ордер и процент стоит 50%, то он выставляет через расстояние которое мы указываем, бай стоп в 5 лотов. Да и чтобы советник не трогал чужой магик, а только свои.

Нужны параметры:

— Лот //при скольки лотах должен выставится отложенный ордер в противоположную сторону
— Процент выставления отложенного ордера
— Расстояние на которое ставится отложенный ордер
— extern int BULevel = 0; // уровень БУ
— extern int BUPoint = 0; // пункты БУ
— extern int TrailingStop = 0; // трал
— extern int TrailingStep = 0; // шаг трала
— extern int Slip = 5; // Проскальзывание цены
— extern int Magic = 123; // магик
  • +3
  • Просмотров: 4332
  • 21 мая 2016, 12:26
  • cashyra
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Можно, но в следующем месяце.
avatar

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

  • 21 мая 2016, 13:11
+
0
Спасибо… *bravo* 
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 21 мая 2016, 13:13
+
0
Чуть поправил описание, если не сработает отложка

А можно сделать советник-помошник, который бы ввёл общий подсчёт лотов на валюте которой его поставить или если можно, то пусть контролирует все валюты. То есть у нас есть 5 лотов в бай и 15 лотов в сел, итого разница 10 лотов в сел. В советнике есть параметр в котором мы ставим, когда советник при скольки лотах должен выставить отложенный ордер в противоположную сторону. В советнике есть параметр где мы указывает процент выставления отложенного ордера. То есть если у нас разница 10 лотов в сел, и в параметре указано что при 10 лотах выставить ордер и процент стоит 50%, то он выставляет через расстояние, которое мы указываем, бай стоп в 5 лотов. И если не сработала отложка бай стоп в 5 лотов и набролось уже разница в сел 20 лотов, то есть было 10 и набралось ещё 10, то советник снова должен выставить отложку, так как он должен срабатывать при увеличении 10+10 (если бы лот был 5, то сработал 5+5) и советник опять выставляет отложку в 5 лотов. Да и чтобы советник не трогал чужой магик, а только свои.

Нужны параметры:

— extern int Lot = 10; //Лот при скольки лотах должен выставится отложенный ордер в противоположную сторону.
— Процент выставления отложенного ордера
— Расстояние на которое ставится отложенный ордер
— extern int BULevel = 0; // уровень БУ
— extern int BUPoint = 0; // пункты БУ
— extern int TrailingStop = 0; // трал
— extern int TrailingStep = 0; // шаг трала
— extern int Profit = 250; // общий профит в валюте депозита
— extern int Slip = 5; // Проскальзывание цены
— extern int Magic = 123; // магик
Редактирован: 6 июня 2016, 15:01
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 21 мая 2016, 13:59
+
0
Вы бы не смогли сделать такой помощник. Вы говорили что сможете. Может попробуете. Спасибо.
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 6 июня 2016, 15:02
+
0
когда будет свободное время.
avatar

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

  • 7 июня 2016, 09:41
+
0
Спасибо. Буду ждать. *bravo* 
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 7 июня 2016, 09:45
+
0
Здесь мне придется тоже делать все на ощупь, это в разы сложнее. То что будет как в ТЗ не гарантирую.
avatar

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

  • 7 июня 2016, 09:53
+
0
Будем надеяться что всё получится.
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 7 июня 2016, 09:55
+
0
Вот набросок в тесетере погонять:




//+------------------------------------------------------------------+
//|                                                         Lots.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lots       = 0.1;      // лот
extern double DeltaLots  = 0.3;      // разница в лотах
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 0;        // трал
extern int Procent       = 100;      // процент
extern int Delta         = 300;      // расстояние от цены
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

bool one=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price, double lot)
  {
   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,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==type) count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Подсчет лота ордеров по типу                                     |
//+------------------------------------------------------------------+
double CountLots(int type)
  {
   double count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==type) count+=OrderLots();
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting() && (CountOrders(0)<1 || CountOrders(1)<1))
     {
      if(CountOrders(4)<1) for(int i=1;i<=5;i++) PutOrder(4,Bid+200*Point*i,0.1);
      if(CountOrders(5)<1) for(int k=1;k<=5;k++) PutOrder(5,Bid-200*Point*k,0.1);
     }

   double delta=MathAbs(CountLots(0)-CountLots(1));
   
   if(delta>=DeltaLots && CountLots(0)>CountLots(1)) if(CountOrders(4)<6) PutOrder(5,Bid-Delta*Point,delta*Procent*0.01);
   if(delta>=DeltaLots && CountLots(1)>CountLots(0)) if(CountOrders(4)<6) PutOrder(4,Bid+Delta*Point,delta*Procent*0.01);

   Comment("\n Buy Lots: ",CountLots(0),
           "\n Sell Lots: ",CountLots(1),
           "\n Delta Lots: ",MathAbs(CountLots(0)-CountLots(1)));
  }
//+------------------------------------------------------------------+

avatar

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

  • 7 июня 2016, 10:40
+
0
Там растояние от цены и между ордерами ставится 200 пунктов, хотя я ставлю 30 и лоты не меняются, стоят по умолчанию 0,1.
Проветрить не могу так как нет двух разных ордеров и с разницей в лотах, так как растояние большое и не срабатывают ордера. И у Вас сеткак сразу ставиться, а она зачем?
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 7 июня 2016, 11:56
+
0
Там растояние от цены и между ордерами ставится 200 пунктов, хотя я ставлю 30 и лоты не меняются, стоят по умолчанию 0,1.

Это для тестера. Мне же нужно смоделировать ситуацию в рынке чтобы проверить работу советника.

Проветрить не могу так как нет двух разных ордеров и с разницей в лотах, так как растояние большое и не срабатывают ордера.


проверить можно. Для этого на скрине и показал разницу в лоте ордеров и выставление противоположной отложки.
Редактирован: 7 июня 2016, 17:13
avatar

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

  • 7 июня 2016, 17:12
+
0
Ну тогда всё в порядке, можно делать советник
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 7 июня 2016, 19:33
+
0
avatar

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

  • 7 июня 2016, 21:53
+
0
Всё работает. А нельзя ли добавить параметр, чтобы можно было выбирать, контроль за всеми валютами или на той котором стоит советник.
И можно описать, что и как. А то в тестере не понятно, что будет когда ещё наберётся разница в лотах, он там не ставит ничего.
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 8 июня 2016, 06:41
+
0
Мультивалютный не ко мне.

extern double Lots       = 0.1;      // лот
extern double DeltaLots  = 0.3;      // разница в лотах
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 0;        // трал
extern int TrailingStep  = 20;       // шаг трала
extern int Procent       = 100;      // процент
extern int Delta         = 300;      // расстояние от цены
extern int Slip          = 30;       // реквот
extern int Magic         = 0;        // магик


На экране сумма лотов BuyLots и SellLots, когда разница между ними достигнет величины DeltaLots, советник выставит отложку на расстоянии Delta от цены, лотом DeltaLots*Procent.
avatar

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

  • 8 июня 2016, 06:55
+
0
Спасибо понял.
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 8 июня 2016, 07:05
+
0
Я посмотрел как он работает, всё отлично, только надо доработать, он ставит только первый раз и всё. Когда он выставляет первый раз отложку, допустим было 10 в бай и 5 в сел у нас разница 5 лотов и 50 процентов. Он выставляет отложку селстоп 5 лотов и рынок идет дальше в бай и у нас отложка не сработала, а 5 лотов бай закрылись по ТП и выставились 5 лотов в сел. Плучается уже 5 лотов разница в сел и советник должен выставить отложку 5 лотов байстоп в бай и удалить отложку 5 лотов селстоп.
Он этого ничего не делает, а только первый раз выставил и всё. Я пробовал удалить отложку руками, думал поможет, но нет.
Посмотрите, что можно сделать, было бы отлично.
Редактирован: 9 июня 2016, 00:49
avatar

  15  cashyra Автор Сообщений: 392 - Юра

  • 9 июня 2016, 00:46
+
0
Советник непростой, сделал в упрощенном виде.
avatar

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

  • 9 июня 2016, 05:33
+
0
После установки отложки, советник можно перезапустить и он выставит заново.
avatar

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

  • 9 июня 2016, 09:51

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