Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 864

 
Taras Slobodyanik:

Então, você precisa definir um feriado ou uma proibição de comercialização?
O comércio foi permitido no dia 27.

se for um fim de semana, então você precisa de um analisador de notícias - para identificar feriados/fins-de-semana.

Não importa qual seja a razão para não negociar em um determinado símbolo, você só precisa ver que não se trata de comércio. E desculpe, ainda não estou maduro o suficiente para entender o parser. O que é isso, e como está escrito no código?

 
novichok2018:

Olá!

Mais uma vez obrigado aAlexey Viktorov pela dica sobre as citações - tudo funciona. Nesta segunda-feira temos uma situação - os alemães negociaram, enquanto os ingleses têm um dia de folga. Acontece que em condições para a abertura da posição do euro foram utilizados valores antigos de libra esterlina. Daí o pedido: aconselhe como estabelecer a verificação no código de que ambos os símbolos são negociados neste dia?

Obrigado.

#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()
  {
//---

  }

Fontehttps://www.mql5.com/ru/articles/481

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

Fontehttps://www.mql5.com/ru/articles/481

Eu não sei o que dizer aqui. Obrigado, mas acho que isto é completamente fora de tópico. E por que"se a pontuação se revelar real, termine a EA imediatamente!"... Suponho que me está faltando algo.

 
novichok2018:

Eu não sei o que dizer aqui. Obrigado, é claro, mas acho que isto é completamente fora de tópico. E por que"se a pontuação se revelar real, termine a EA imediatamente!"?

Este é um exemplo do código do artigo. O artigo cobre um código experimental, não para negociação, mas as funções são as mesmas. É um artigo antigo, mas é um bom artigo para iniciantes.

A saída que você está procurando não pode ser calculada pelo código. O comércio era aberto, mas os britânicos não negociavam e não tinham cotações normais. Tente definir "normalidade" para citações e verifique se elas estão lá. Por exemplo, o spread, a volatilidade do tick, a freqüência das atualizações de preços, ou o que não lhe convier. Um vôo de fantasia.

 
novichok2018:

Eu não sei o que dizer aqui. Obrigado, é claro, mas acho que isso não tem nada a ver com a questão.

A maneira mais fácil de descobrir a saída é a partir das propriedades da conta, haverá restrições na conta, IMHO, é claro. É por isso que dei o bloco de código acima como um exemplo

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

E nas saídas nacionais pode haver restrições ao símbolo. Na verdade, veja o artigo, há um lá também:

#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:

Não importa qual seja a razão para não negociar em um determinado símbolo, você só precisa ver que não se trata de comércio. E desculpe, ainda não estou maduro o suficiente para entender o parser. O que é isso, e como está escrito no código?

O que significa "não há negociação"? ?
é permitido negociar - negociar o quanto você quiser)

Parser significa que você tem que baixar um arquivo com notícias, depois analisá-lo - e determinar o final de semana de férias.

 
Taras Slobodyanik:

O comércio é permitido - negocie o quanto você quiser)

O comércio é permitido, mas não há comércio - é um feriado.

Mas eu acho que encontrei uma solução:

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

e então a posição não foi aberta no dia 27.

Parece-me uma boa solução. Se alguém vir alguma armadilha, eu ficaria grato em saber. Obrigado a todos vocês.

 
novichok2018:

O comércio é permitido, mas não há comércio - eles estão de férias.

não sei como é se a comercialização é permitida
(mesmo em um feriado e um fim de semana).

olhou para as notícias nos corretores - não viu ninguém restringindo a libra no dia 27

 
Taras Slobodyanik:

Não vejo como, se a comercialização é permitida
(mesmo em um feriado e um fim de semana)

olhou para as notícias nos corretores - não viu ninguém restringindo a libra no dia 27

Na verdade eu não estava interessado na libra, mas no índice FTSE100. Simplifiquei desta forma: desde que seja o euro, que seja a libra esterlina)))) Portanto, não há dados de índice no dia 27.

 
Confuso. Como obter o lucro real (perda) de uma ordem em aberto (não uma ordem pendente) no MT4, incluindo todas as comissões, swaps, etc.? (OrderProfit() + OrderSwap() + OrderComission() ou apenasOrderProfit() ou algo mais? Eu gostaria de ganhar algo depois que o pedido for fechado.
Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...