Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 864

 
Taras Slobodyanik:

так вам нужно определять выходной или запрет торговли?
торговля-то была разрешена 27-го

если выходной, тогда вам нужен парсер новостей - чтобы определять праздники/выходные.

Не важно, по какой причине на конкретном символе не ведется торговля, просто нужно увидеть, что она не ведется. И простите, я еще не дорос до понимания парсера. Что это, и как прописывается в коде?

 
novichok2018:

Здравствуйте!

Еще раз спасибо Alexey Viktorov за подсказку по кавычкам - все работает. НО: в этот понедельник возникла ситуация - немцы торговали, а у англичан выходной. И получилось, что в условии для открытия позиции по евро использовались старые значения фунта. Отсюда просьба: подскажите, как задать в коде проверку, что по обоим символам в этот день ведется торговля?

Спасибо.

#include <Trade\AccountInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- объект для работы со счетом
CAccountInfo account;
//--- получим номер счета, на котором запущен советник
   long login=account.Login();
   Print("Login=",login);
//--- выясним тип счета
   ENUM_ACCOUNT_TRADE_MODE account_type=account.TradeMode();
//--- если счет оказался реальным, прекращаем работу эксперта немедленно!
   if(account_type==ACCOUNT_TRADE_MODE_REAL)
     {
      MessageBox("Работа на реальном счете запрещена, выходим","Эксперт запущен на реальном счете!");
      return(-1);
     }
//--- выведем тип счета    
   Print("Тип счета: ",EnumToString(account_type));
//--- выясним, можно ли вообще торговать на данном счете
   if(account.TradeAllowed())
      Print("Торговля на данном счете разрешена");
   else
      Print("Торговля на счете запрещена: возможно, вход был совершен по инвест-паролю");
//--- выясним, разрешено ли торговать на счете с помощью эксперта
   if(account.TradeExpert())
      Print("Автоматическая торговля на счете разрешена");
   else
      Print("Запрещена автоматическая торговля с помощью экспертов и скриптов");
//--- допустимое количество ордеров задано или нет
   int orders_limit=account.LimitOrders();
   if(orders_limit!=0)Print("Максимально допустимое количество действующих отложенных ордеров: ",orders_limit);
//--- выведем имя компании и сервера
   Print(account.Company(),": server ",account.Server());
//--- напоследок выведем баланс и текущую прибыль на счете
   Print("Balance=",account.Balance(),"  Profit=",account.Profit(),"   Equity=",account.Equity());
   Print(__FUNCTION__,"  completed"); //---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }

Источник https://www.mql5.com/ru/articles/481

Торговые операции на MQL5 - это просто
Торговые операции на MQL5 - это просто
  • www.mql5.com
Почти все трейдеры приходят на рынок для того, чтобы заработать денег, хотя есть и доля тех, кому важен не сам торговый результат, а участие в процессе, драйв. Впрочем, получить удовольствие от процесса можно не только торгуя вручную, но и занимаясь разработкой автоматических торговых систем. Ведь создание торгового робота может быть таким же...
 
Sergey Voytsekhovsky:

Источник https://www.mql5.com/ru/articles/481

Тут не знаю, что и сказать. Спасибо конечно, но по-моему абсолютно не в тему вопроса. И почему "если счет оказался реальным, прекращаем работу эксперта немедленно!"? Допускаю, что я что-то не понимаю.

 
novichok2018:

Тут не знаю, что и сказать. Спасибо конечно, но по-моему абсолютно не в тему вопроса. И почему "если счет оказался реальным, прекращаем работу эксперта немедленно!"?

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

А такие выходные, как те, о которых Вы ищете, кодом Вы не вычислите. Торговля то была открыта, просто англичане не торговоли, небыло нормальных котировок. Попробуйте задать признаки "нормальности" для котировок и проверяйте их наличие. Спред например, тиковая волатильность, периодичность обновления цен, ну или что там вас не устраивало. Полет для фантазии.

 
novichok2018:

Тут не знаю, что и сказать. Спасибо конечно, но по-моему абсолютно не в тему вопроса.

За выходной вообще проще всего узнавать из свойств счёта, будут ограничения по счету, ИМХО конечно. Потому я и привел в пример блок кода, что выше

//--- выясним, можно ли вообще торговать на данном счете
   if(account.TradeAllowed())
      Print("Торговля на данном счете разрешена");

А в национальные выходные возможны ограничения по символу. Собственно Вы просмотрите статью, там и такое есть:

#include<Trade\SymbolInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- объект для получения свойств символа
CSymbolInfo symbol_info;
//--- зададим имя символа, для которого будем получать информацию
   symbol_info.Name(_Symbol);
//--- получим текущие котировки и выведем
   symbol_info.RefreshRates();
   Print(symbol_info.Name()," (",symbol_info.Description(),")",
         "  Bid=",symbol_info.Bid(),"   Ask=",symbol_info.Ask());
//--- получим значения минимальных отступов для торговых операций
   Print("StopsLevel=",symbol_info.StopsLevel()," pips, FreezeLevel=",
         symbol_info.FreezeLevel()," pips");
//--- получим количество знаков после запятой и размер пункта
   Print("Digits=",symbol_info.Digits(),
         ", Point=",DoubleToString(symbol_info.Point(),symbol_info.Digits()));
//--- информация о спреде
   Print("SpreadFloat=",symbol_info.SpreadFloat(),", Spread(текущий)=",
         symbol_info.Spread()," pips");
//--- запросим тип исполнения ордеров, нет ли ограничений
   Print("Ограничения на торговые операции: ",EnumToString(symbol_info.TradeMode()),
         " (",symbol_info.TradeModeDescription(),")");
//--- выясним режим заключения сделок
   Print("Режим исполнения сделок: ",EnumToString(symbol_info.TradeExecution()),
         " (",symbol_info.TradeExecutionDescription(),")");
//--- выясним способ вычисления стоимости контрактов
   Print("Вычисление стоимости контракта: ",EnumToString(symbol_info.TradeCalcMode()),
         " (",symbol_info.TradeCalcModeDescription(),")");
//--- размер контрактов
   Print("Размер стандартного контракта: ",symbol_info.ContractSize(),
         " (",symbol_info.CurrencyBase(),")");
//--- минимальный, максимальный размеры объема в торговых операциях
   Print("Volume info: LotsMin=",symbol_info.LotsMin(),"  LotsMax=",symbol_info.LotsMax(),
         "  LotsStep=",symbol_info.LotsStep());
//--- 
   Print(__FUNCTION__,"  completed");
//---
   return(0);
  }
 
novichok2018:

Не важно, по какой причине на конкретном символе не ведется торговля, просто нужно увидеть, что она не ведется. И простите, я еще не дорос до понимания парсера. Что это, и как прописывается в коде?

что значит "не ведется торговля" ?
торговля разрешена - торгуй сколько влезет)

Парсер - это значит что нужно скачивать файл с новостями, потом его разбирать (парсить) — и определять праздник-выходной.

 
Taras Slobodyanik:

торговля разрешена - торгуй сколько влезет)

Торговля-то разрешена, только торги не проводятся - праздник у них. 

Но я кажется нашел решение:

if(SeriesInfoInteger("EURUSD",PERIOD_H1,SERIES_LASTBAR_DATE)==SeriesInfoInteger("GBPUSD",PERIOD_H1,SERIES_LASTBAR_DATE))

и тогда 27-го позиция не открылась.

По-моему, нормальное решение. Если кто-то видит подводные камни, буду благодарен узнать. Спасибо всем.

 
novichok2018:

Торговля-то разрешена, только торги не проводятся - праздник у них. 

не представляю как это, если торговля разрешена то и торги проводятся
(даже в праздник и в выходной)

посмотрел новости у брокеров — не увидел чтобы кто-то ограничивал фунт 27-го

 
Taras Slobodyanik:

не представляю как это, если торговля разрешена то и торги проводятся
(даже в праздник и в выходной)

посмотрел новости у брокеров — не увидел чтобы кто-то ограничивал фунт 27-го

В действительности меня интересовал не фунт, а индекс FTSE100. Это я упростил так: раз уж евро, то пусть фунт))). Так вот 27-го данных по индексу нет.

 
Запутался. Как получить реальный профит (убыток) по открытому ордеру (не отложке) на MT4 с учетом всех комиссий, свопов и т.п. (т.е. то что получим после закрытия позиции) ? OrderProfit() + OrderSwap() + OrderCommission() или просто OrderProfit() или что-то другое ? Хотелось бы хоть что-то заработать после закрытия ордера.
Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Причина обращения: