Kaur
Руслан Каюмов

 
Уровень 47

  Торгую в компаниях:

  Моя торговля


График торгового счета Kaur


Группа "Программирование на MQL"

Рейтинг 270



Приемы MQL: открытие только одной сделки за один бар

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

Итак, первое, с чем я столкнулся — это необходимость открытия только одной сделки в текущем баре. Т.е. получили сигнал в текущем баре и после открытия сделки больше в этом баре новых сделок не открываем.

Есть разные способы решения задачи. От использования предопределенной переменной Bars в данном случае предостерегают, т.к. Bars может изменяться, например, при докачке истории.

Выбрал следующий способ.

1.Добавляем функцию IfOrderYetOpen

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт уже ордер на этой же свече        |
//+------------------------------------------------------------------+
bool IfOrderYetOpen(int magic = 0, int typ = -1,string symb = "",int per = 0){
   if(symb == ""){symb = Symbol();}
   if(per==0){per=Period();}
   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()!=symb){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magic||magic==0){
               if(OrderOpenTime()>iTime(symb,per,0)){return(true);}
            }
         }
      }
   }
   return(false);
   }


2. Затем в начале start делаем проверку

if(IfOrderYetOpen()) return;

Таким образом добиваемся поставленной цели — если ордер на текущем баре открыт, то терминируем start.
  • +3
  • Просмотров: 22510
  • 6 января 2012, 12:09
  • Kaur
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Программирование на MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
По просьбе wizzard... Инфосоветник. (Часть 2)
14 ноября 2011
02 мая 2012

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

+
+1
...Good!!!..
avatar

  15  kick Сообщений: 853

  • 6 января 2012, 12:21
+
+1
...Nice!!!...
avatar

  8  amyrgan145 Сообщений: 427 - Амыр

  • 6 января 2012, 15:31
+
0
Of course it is good and nice!!!
avatar

  1  uskov34 Сообщений: 7

  • 7 января 2012, 16:06
+
+1
Начал использовать на практике, ничего не получилось. так же открывает ордера как обычно по 3 или 4…
Входные параметры моего эксперта были такими:
extern double Lots       = 0.1;
extern double TakeProfit = 5;
extern double StopLoss   = 20;
extern int    Magic      = 0;

вот такое выдает в тестере:

avatar

  8  amyrgan145 Сообщений: 427 - Амыр

  • 12 января 2012, 14:55
+
0
Проверю, как предоставится возможность.
avatar

  47  Kaur Автор Сообщений: 1325 - Руслан Каюмов

  • 12 января 2012, 15:09
+
0
Теми же барами, которыми вы не советовали пользоваться, решил проблему…
...
//---- Глобальные переменные
datetime ВремяПоследнегоОрдера;
...
      if(Сигнал == OP_BUY && Time[0] != ВремяПоследнегоОрдера)
      {
         Open_Buy();
         ВремяПоследнегоОрдера = Time[0];
      }
      if(Сигнал == OP_SELL && Time[0] != ВремяПоследнегоОрдера)
      {
         Open_Sell();
         ВремяПоследнегоОрдера = Time[0];
      }
...

avatar

  8  amyrgan145 Сообщений: 427 - Амыр

  • 12 января 2012, 16:00
+
0
Заметьте в качестве имени переменных в языке MQL4 можно использовать русские буквы.
Так переменные:
int Lots = 0.1;
int Лоты = 0.1;

абсолютно равнозначные *улыбается*
Зато вспоминать какая переменная к чему относится гораздо легче
avatar

  8  amyrgan145 Сообщений: 427 - Амыр

  • 12 января 2012, 16:03
+
0
кто сможет помочь? нужно прописать код который позволит срабатывать советнику 1 раз за 1 бар
avatar

  1  vahe777 Сообщений: 2 - Ваэ

  • 9 апреля 2013, 17:21
+
0
А вариант от Амыра выше пробовали уже?
avatar

  11  pilot Сообщений: 410

  • 9 апреля 2013, 17:29
+
0
а какой код, самый первый наверху?
avatar

  1  vahe777 Сообщений: 2 - Ваэ

  • 9 апреля 2013, 19:14
+
0
Подскажите, пожалуйста, как сделать, чтобы советник открывал одну сделку в день? Вышел сигнал — открыл сделку. Сигнал отработал по стопу/тейку. Вышел следующий сигнал в этот же день — всё, советник сегодня больше не торгует.
avatar

  1  Forex-Viewer Сообщений: 1

  • 18 августа 2018, 10:43

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