Скачать MetaTrader 5

Можно ли прервать работу функции и при определённом условии возобновить её работу?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Mike Kharkov
848
Mike Kharkov  
Здравствуйте.
В MQL не силен.(знаком около недели с этим делом.)
Читаю доку и нигде не могу найти как можно привалить функцию void OnTick()
Это реально как то сделать?
(а потом допустим при каком то условии возобновить её работу.)
P.S. Где вообще можно почитать о чем то подобном?
(как, в деталях, можно(и нужно) работать с функциями и событиями в этом языке.
Допустим обязательно ли нужен тип Void для функции OnTick() )
Dmitry Fedoseev
47445
Dmitry Fedoseev  
Как? Где-то на середине ее работы прервать, а потом с этого же места при тех же значениях всех переменных продолжить?
Mike Kharkov
848
Mike Kharkov  
Integer:
Как? Где-то на середине ее работы прервать, а потом с этого же места при тех же значениях всех переменных продолжить?
   мне без разницы. Главное что бы при определенных условиях функция не работала.
   и при определённых условиях - она начала работать как ни в чем не бывало..
   P.S. Вообще я пытаюсь сделать проверку на то, что если у меня есть больше, чем определенное количество позиций - то я больше не должен докупаться.(к примеру.)
   Ничего другого как привалить ВСЮ функцию я пока что не придумал. )
   Хотел вложить ещё одну функцию и привалить уже её - но нельзя этого делать в mql5 как я понял.
Alexander Laur
8284
Alexander Laur  
Mike_Kharkov:
Здравствуйте.
В MQL не силен.(знаком около недели с этим делом.)
Читаю доку и нигде не могу найти как можно привалить функцию void OnTick()
Это реально как то сделать?
(а потом допустим при каком то условии возобновить её работу.)
P.S. Где вообще можно почитать о чем то подобном?
(как, в деталях, можно(и нужно) работать с функциями и событиями в этом языке.
Допустим обязательно ли нужен тип Void для функции OnTick() )

 Можно оператором return;

Тип функции void говорит о том, что функция при завершении своей работы не возвращает никакого значения.

Функция OnTick() активируется при приходе нового тика. Она активируется сама, без Вашего участия. Она предназначена для обработки события - поступление нового тика.

Alexandr Bryzgalov
42955
Alexandr Bryzgalov  
Mike_Kharkov:
 

скорее всего не так уж и нужно её прерывать, если опишите для чего Вам это нужно то может и найдутся другие решения.

Dmitry Fedoseev
47445
Dmitry Fedoseev  

Это основы. Операторы if, switch, функции. Можно писать функции и вызывать их когда надо, когда не надо не вызывать. Можно и без функций разруливать через if, switch. Желающие еще способы найдут. Это то самое, ради чего языки программирования и существуют.

Mike Kharkov
848
Mike Kharkov  
papaklass:

 Можно оператором return;

Тип функции void говорит о том, что функция при завершении своей работы не возвращает никакого значения.

Функция OnTick() активируется при приходе нового тика. Она активируется сама, без Вашего участия. Она предназначена для обработки события - поступление нового тика.

   //+------------------------------------------------------------------+
//|                                                  My_Practics.mq5 |
//|                                                     Mike_Kharkov |
//|                                https://www.fl.ru/users/Yamaradg/ |
//+------------------------------------------------------------------+
#property copyright "Mike_Kharkov"
#property link      "https://www.fl.ru/users/Yamaradg/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//---
  
//---
   return(INIT_SUCCEEDED);
  };
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  };
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  MqlTradeRequest request={0};
 
  request.action = TRADE_ACTION_DEAL;                                        // Тип выполняемого действия
  request.symbol = _Symbol;                                                  // Имя торгового инструмента
  request.volume = 0.01;                                                     // Запрашиваемый объем сделки в лотах
  request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);                     // Цена 
  request.type = ORDER_TYPE_BUY;                                             // Тип ордера
  request.tp = 0;                                                            // Цена, по которой сработает Take Profit ордер при движении цены в благоприятном направлении
  request.sl = 0;                                                            // Цена, по которой сработает Stop Loss ордер при движении цены в неблагоприятном направлении
  request.type_filling = ORDER_FILLING_FOK;                                  // Тип ордера по исполнению
  request.type_time = ORDER_TIME_GTC;
                                   
  MqlTradeResult result={0};
  bool send1 = OrderSend(request,result);
 
  Print(" Код возврата торгового сервера: ", result.retcode);
 
  int position_total_1 =  PositionsTotal();
  Print(" Количество открытых позиций: ", position_total_1);
 
  if(position_total_1>=0)
  {
   return;
  };


  
//---
  
  };
//+------------------------------------------------------------------+

Вот что в журнале отображается:

То есть видно что позиция продолжает с каждым тиком докупаться..
(до тех пор пока баланс не выходит за лимиты.)
Фрилансер Mike Кharkov [Yamaradg] - верстальщик удаленно, фриланс, FL.ru
Фрилансер Mike Кharkov [Yamaradg] - верстальщик удаленно, фриланс, FL.ru
  • www.fl.ru
Кроссбраузерно-попиксельная вёрсткаТолько последние версии браузеров: Мozilla, Google Chrome, Opera, Safari. IE-7++HTML+ CSSБлочная(div)Валидноcть, семантика, логичный и продуманный ручной кодВладение базовыми навыками SEO оптимизацииАккуратное...
Igor Konyashin
3180
Igor Konyashin  
Mike_Kharkov:


То есть видно что позиция продолжает с каждым тиком докупаться..
(до тех пор пока баланс не выходит за лимиты.)
Проверку наличия позиции вставьте перед отправкой ордера на открытие.
Mike Kharkov
848
Mike Kharkov  
i_logic:
Проверку наличия позиции вставьте перед отправкой ордера на открытие.
    Ok. Работает.
    А допустим включить это дело можно как то?
    Что бы при другом условии функция запустилась опять.
   (C типом Void.)
   C любым другим типом, насколько я понимаю достаточно будет return(0); или return true; return(INIT_SUCCEEDED);?
  
Mike Kharkov
848
Mike Kharkov  
sanyooooook:

скорее всего не так уж и нужно её прерывать, если опишите для чего Вам это нужно то может и найдутся другие решения.

   пока что для себя хотел написать какого то примитивного +- мартингейла.
Igor Konyashin
3180
Igor Konyashin  
Mike_Kharkov:
    Ok. Работает.
    А допустим включить это дело можно как то?
    Что бы при другом условии функция запустилась опять.
   (C типом Void.)
   C любым другим типом, насколько я понимаю достаточно будет return(0); или return true; ?
  

Посмотрите как включаются эти функции (при каких событиях)

https://www.mql5.com/ru/docs/basis/function/events

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий