Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1050

 

Как добавить в блок работы советника по часам минуты?

//input parametrs
input uchar                InpStartHour            = 1;           // Start hour
input uchar                InpEndHour              = 23;           // End hour

//---------------------------

void OnTick()
  { 
   MqlDateTime STimeCurrent;
   TimeToStruct(TimeCurrent(),STimeCurrent);
  
   if(STimeCurrent.hour<InpStartHour || STimeCurrent.hour>InpEndHour)
      return;
   }

 
Vladimir Baskakov:

Как добавить в блок работы советника по часам минуты?

High Low Strategy On Time 2:

bool TimeControl() - функция отвечающая за проверку времени. Может работать в двух состояниях: обе даты внутри дня или переход дат через день.

//--- input parameters
***
input bool     InpTimeControl       = true;        // Use time control
input uchar    InpStartHour         = 10;          // Start Hour 
input uchar    InpStartMinute       = 01;          // Start Minute 
input uchar    InpEndHour           = 15;          // End Hour 
input uchar    InpEndMinute         = 02;          // End Minute 
***
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TimeControl())
      return;
  }
//+------------------------------------------------------------------+
//| TimeControl                                                      |
//+------------------------------------------------------------------+
bool TimeControl(void)
  {
   if(!InpTimeControl)
      return(true);
   MqlDateTime STimeCurrent;
   datetime time_current=TimeCurrent();
   if(time_current==D'1970.01.01 00:00')
      return(false);
   TimeToStruct(time_current,STimeCurrent);
   if((InpStartHour*60*60+InpStartMinute*60)<(InpEndHour*60*60+InpEndMinute*60)) // intraday time interval
     {
/*
Example:
input uchar    InpStartHour      = 5;        // Start hour
input uchar    InpEndHour        = 10;       // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _
*/
      if((STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60) && 
         (STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60))
         return(true);
     }
   else if((InpStartHour*60*60+InpStartMinute*60)>(InpEndHour*60*60+InpEndMinute*60)) // time interval with the transition in a day
     {
/*
Example:
input uchar    InpStartHour      = 10;       // Start hour
input uchar    InpEndHour        = 5;        // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  _  _  _  _  _  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  _  _  _  _  _  +  +  +  +  +  +
*/
      if(STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60 || 
         STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60)
         return(true);
     }
   else
      return(false);
//---
   return(false);
  }
 

подскажите плиз,

в MQL5 надо закрыть половину позиции, но сделсть это с проверкой на случай если половина позиции окажется меньше минимального лота, тогда закрыть весь объем, так правильно?

double volume=MathMax(PositionGetDouble(POSITION_VOLUME)/2,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)/AccountInfoInteger(ACCOUNT_LEVERAGE));
   
 
Evgeny Dyuka:

подскажите плиз,

в MQL5 надо закрыть половину позиции, но сделсть это с проверкой на случай если половина позиции окажется меньше минимального лота, тогда закрыть весь объем, так правильно?

   

Может проще проверить перед делением, если лот меньше 2х минимальных, то и не надо мучить терминал?

 

не могу пройти тестированиесоветника для маркета, возвращает ошибку, а ошибки в отчете нет

как быть?


 
Evgeny Dyuka:

не могу пройти тестированиесоветника для маркета, возвращает ошибку, а ошибки в отчете нет

как быть?


Позже повторите попытку.
 

Как получить цену закрытия ордера (сделки, позиции - хоть чего-нибудь)?

У ордеров доступно только ORDER_PRICE_OPEN, а ORDER_PRICE_CLOSE нету.

У позиций тоже только POSITION_PRICE_OPEN.

У сделок вообще абстрактное не пойми что: DEAL_PRICE.

Гуглил по форуму, не нашел.

 
secret:

Как получить цену закрытия ордера (сделки, позиции - хоть чего-нибудь)?

У ордеров доступно только ORDER_PRICE_OPEN, а ORDER_PRICE_CLOSE нету.

У позиций тоже только POSITION_PRICE_OPEN.

У сделок вообще абстрактное не пойми что: DEAL_PRICE.

Гуглил по форуму, не нашел.

Чтобы легче было понимать и работать в MQL5:

1. ***

2. Если нужна цена закрытия, значит без обращения к торговой истории не обойтись. За запрос торговой истории отвечает HistorySelect

3. Пример работы с историей, с выводом информации или в файл или во вкладку "Эксперты" есть в коде History Deals and Orders

4. Также для понимания какая эта была сделка нужно знать

ENUM_DEAL_ENTRY - Направление сделки – вход в рынок, выход из рынка или разворот

ENUM_DEAL_ENTRY

Идентификатор

Описание

DEAL_ENTRY_IN

Вход в рынок

DEAL_ENTRY_OUT

Выход из рынка

DEAL_ENTRY_INOUT

Разворот

DEAL_ENTRY_OUT_BY

Закрытие встречной позицией


ENUM_DEAL_TYPE - Тип сделки

ENUM_DEAL_TYPE

Идентификатор

Описание

DEAL_TYPE_BUY

Покупка

 DEAL_TYPE_SELL Продажа

***



Это так, основы. 

 
Vladimir Karputov:

Спасибо за ответ, я смотрел и документацию, и ваш пример, но все равно не нашел, как получить параметр, аналогичный OrderClosePrice() в МТ4.

 
secret:

Спасибо за ответ, я смотрел и документацию, и ваш пример, но все равно не нашел, как получить параметр, аналогичный OrderClosePrice() в МТ4.

как вариант откройте https://www.mql5.com/ru/code/16006

и посмотрите реализацию у @fxsaber

или просто подключите указанную библиотеку и перенесите код советника из МТ4 в МТ5, в 99% случаев ничего подкручивать не придется, все будет работать как и в МТ4 

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
Причина обращения: