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

 
Alexey Viktorov #:

По ценам закрытия свечи\бара.

Привет, Алексей! Большое СПАСИБО.

С уважением, Владимир.

 
Aleksei Stepanenko #:
благодарю за помощь, гуглил как использовать GV, но чет не до конца понимал как оно работает, а теперь все супер





 
У меня есть динамическая магия, которая устанавливается с помощью m_trade.SetExpertMagicNumber() . Мне нужно ввести эту магию в комментарии к позиции. Как можно узнать, какая Магия установлена в среде?
 
Nauris Zukas #:
У меня есть динамическая магия, которая устанавливается с помощью m_trade.SetExpertMagicNumber() . Мне нужно ввести эту магию в комментарии к позиции. Как можно узнать, какая Магия установлена в среде?

Сначала нужно выбрать ту позицию, с которой собираетесь работать, при помощи одной из приведенных ниже функций:

PositionGetSymbol

Возвращает символ соответствующей открытой позиции

PositionSelect

Выбирает открытую позицию для дальнейшей работы с ней

PositionSelectByTicket

Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету

но только учтите, что функция PositionSelect() и PositionSelectByTicket() имеют особенность:

PositionSelect() и PositionSelectByTicket() копируют данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и 
PositionGetString() возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, 
направлению и т.д.), а данные этой позиции можно еще получать. 
Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect() и PositionSelectByTicket() непосредственно перед обращением за ними.

потом нужно получить её Magic:

ulong position_magic = PositionGetInteger(POSITION_MAGIC);

и дальше уже можете использовать position_magic там, где Вы хотели.

С уважением, Владимир.

 
MrBrooklin #:

Сначала нужно выбрать ту позицию, с которой собираетесь работать, при помощи одной из приведенных ниже функций:

PositionGetSymbol

Возвращает символ соответствующей открытой позиции

PositionSelect

Выбирает открытую позицию для дальнейшей работы с ней

PositionSelectByTicket

Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету

но только учтите, что функция PositionSelect() и PositionSelectByTicket() имеют особенность:

потом нужно получить её Magic:

и дальше уже можете использовать position_magic там, где Вы хотели.

С уважением, Владимир.

Вопрос был о другом
 

Даже интересно стало, тогда о чём был вопрос?

С уважением, Владимир.

 
MrBrooklin #:

Даже интересно стало, тогда о чём был вопрос?

С уважением, Владимир.

Какой магик установлен в торговом объекте. Я б ответил, но не у компа пока. 
 
Artyom Trishkin #:
Какой магик установлен в торговом объекте. Я б ответил, но не у компа пока. 

Что-то мне кажется из объекта не доступно. Магик в области protected:

 

Такой вопрос у меня.

Я использую код в советнике буквально из справки

//| Trade function                                                   | 
//+------------------------------------------------------------------+ 
void OnTrade() 
  { 
//--- получим тикет последней сделки из истории торговли за неделю 
   ulong last_deal=GetLastDealTicket(); 
   if(HistoryDealSelect(last_deal)) 
     { 
      //--- время совершения сделки в миллисекундах от 01.01.1970 
      long deal_time_msc=HistoryDealGetInteger(last_deal,DEAL_TIME_MSC); 
      PrintFormat("Deal #%d DEAL_TIME_MSC=%i64 => %s", 
                  last_deal,deal_time_msc,TimeToString(deal_time_msc/1000)); 
     } 
   else 
      PrintFormat("HistoryDealSelect() failed for #%d. Eror code=%d", 
                  last_deal,GetLastError()); 
//--- 
  } 
//+------------------------------------------------------------------+ 
//| Возвращает тикет последней сделки в истории или -1               | 
//+------------------------------------------------------------------+ 
ulong GetLastDealTicket() 
  { 
//--- запросим историю за последние 7 дней 
   if(!GetTradeHistory(7)) 
     { 
      //--- сообщим о неудачном вызове и вернем -1 
      Print(__FUNCTION__," HistorySelect() вернул false"); 
      return -1; 
     } 
//---  
   ulong first_deal,last_deal,deals=HistoryOrdersTotal(); 
//--- если ордера есть, начинаем работать с ними 
   if(deals>0) 
     { 
      Print("Deals = ",deals); 
      first_deal=HistoryDealGetTicket(0); 
      PrintFormat("first_deal = %d",first_deal); 
      if(deals>1) 
        { 
         last_deal=HistoryDealGetTicket((int)deals-1); 
         PrintFormat("last_deal = %d",last_deal); 
         return last_deal; 
        } 
      return first_deal; 
     } 
//--- не нашли ни одной сделки, вернем -1 
   return -1; 
  } 
//+------------------------------------------------------------------+ 
//| Запрашивает историю за последние дни и вернет false при неудаче  | 
//+------------------------------------------------------------------+ 
bool GetTradeHistory(int days) 
  { 
//--- зададим недельный период времени для запроса торговой истории 
   datetime to=TimeCurrent(); 
   datetime from=to-days*PeriodSeconds(PERIOD_D1); 
   ResetLastError(); 
//--- сделаем запрос и проверим результат 
   if(!HistorySelect(from,to)) 
     { 
      Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError()); 
      return false; 
     } 
//--- история получена успешно 
   return true; 
  }

В начале корректно работает в тестере, а потом получаю в логе ошибку. Почему?

2024.10.02 17:58:29.257 2008.01.16 07:15:00   Deals = 8
2024.10.02 17:58:29.257 2008.01.16 07:15:00   first_deal = 6
2024.10.02 17:58:29.257 2008.01.16 07:15:00   last_deal = 0
2024.10.02 17:58:29.257 2008.01.16 07:15:00   HistoryDealSelect() failed for #0. Eror code=4755

Вот пример, что он работает чуть раньше

2024.10.02 17:58:29.057 2008.01.15 23:15:00   Deals = 2
2024.10.02 17:58:29.057 2008.01.15 23:15:00   first_deal = 6
2024.10.02 17:58:29.057 2008.01.15 23:15:00   last_deal = 7
2024.10.02 17:58:29.057 2008.01.15 23:15:00   Deal #7 DEAL_TIME_MSC=213520441664 => 2008.01.15 21:04
 
Aleksey Vyazmikin #:

Такой вопрос у меня.

Я использую код в советнике буквально из справки

В начале корректно работает в тестере, а потом получаю в логе ошибку. Почему?

Вот пример, что он работает чуть раньше

Потому что 

last_deal = 0