Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 996

 
As pessoas ajudam. Tentar obter o preço ao qual um comércio foi aberto. No início negociei através do CTrade mas o trade.result price era igual a zero. Comecei a negociar através da MqlTrade e o result.price estava a mostrar bons resultados no Strategy Tester, mas era igual a zero em Live. Tentei com a OnTradeTransaction, mas é demasiado lento no comércio ao vivo e mostra zero quando a auto-negociação é interrompida. Quais são algumas formas de obter o preço pelo qual o comércio de compra foi efectuado?
 
mikhail_shmakov:
As pessoas ajudam. Tentar obter o preço ao qual um comércio foi aberto. No início negociei através do CTrade mas o trade.result price era igual a zero. Comecei a negociar através da MqlTrade e o resultado.preço estava a mostrar bem no Testador de Estratégia, mas era igual a zero em directo. Tentei com a OnTradeTransaction, mas é demasiado lento no comércio ao vivo e mostra zero quando a auto-negociação é interrompida. Quais são algumas formas de obter o preço pelo qual o comércio de compra foi efectuado?
struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };
O que quer dizer com "em comércios muito rápidos"? A OnTradeTransaction trabalha para cada comércio. Basta separar o tipo de transacção e tomar o preço em TRADE_TRANSACTION_DEAL_ADD
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
 

//+------------------------------------------------------------------+ 
//| Получает текущее количество отложенных ордеров с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 
int GetOrdersTotalByMagic(long const magic_number) 
  { 
   ulong order_ticket; 
   int total=0; 
//--- пройдем по всем отложенным ордерам 
   for(int i=0;i<OrdersTotal();i++) 
      if((order_ticket=OrderGetTicket(i))>0) 
         if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++; 
//--- 
   return(total); 
  }
Olá colegas programadores. Por favor, ajude-me a modificar esta função. A função da Referência MQL5 acima. Como fazê-la calcular o número de todas as posições abertas para um determinado Magic?
 
Kolya32:
Olá colegas programadores. Por favor, ajude-me a modificar esta função. Já introduzi esta função na MQL5 Reference. O que devo fazer para calcular o número de posições em aberto para a Magic?
Devemos pelo menos alterar as ordens*** para Posições**** e depois verificar.
 
Alexey Viktorov:
Pelo menos mudar as ordens*** para Posições*** em todo o lado e depois verificar.

Parece estar a funcionar))) Podemos adicionar esta função à MQL5)) Embora provavelmente seja demasiado cedo, vou testá-la)

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 

int GetPositionsTotalByMagic(long const magic_number)  
  { 
   ulong position_ticket; 
   int total=0; 
//--- пройдем по всем открытым позициям 
   for(int i=0;i<PositionsTotal();i++) 
      if((position_ticket=PositionGetTicket(i))>0) 
         if(magic_number==PositionGetInteger(POSITION_MAGIC)) total++; 
//--- 
   return(total); 
  } 
 
Kolya32:

Parece estar a funcionar))) Pode adicionar esta função ao manual MQL5)) Embora provavelmente seja demasiado cedo, ainda estou a testar)

Se acrescentar tudo isto ao manual, o manual transformar-se-á numa lixeira. Desculpe, não se trata da qualidade das alterações que fez.
 
mikhail_shmakov:
As pessoas ajudam. Estou a tentar obter o preço a que um comércio abriu. No início utilizei o CTrade, mas o trade.result price era igual a zero. Comecei a negociar através da MqlTrade e o result.price estava a mostrar bons resultados no Strategy Tester, mas era igual a zero em Live. Tentei com a OnTradeTransaction, mas é demasiado lento no comércio ao vivo e mostra zero quando a auto-negociação é interrompida. Quais são algumas formas de obter o preço pelo qual o comércio de compra foi efectuado?

OrderSend envia uma encomenda. Depois temos de esperar pela sua execução e que o comércio correspondente apareça na história.

Para fazer tudo isto correctamente, é preciso ser bom na OnTradeTransaction ou escrever uma vez um código bastante pesado para OrderSend.

No segundo caso, o CTrade também funcionará como desejado.

 

Qual é o análogo para Dígitos que devolveria o número de casas decimais após o ponto decimal que determina a precisão da medição do preço do símbolo do gráfico seleccionado ?

 
Aleksey Vyazmikin:

Qual é o análogo para Dígitos que devolveria o número de casas decimais após o ponto decimal que determina a precisão da medição do preço do símbolo do gráfico seleccionado ?

SymbolInfoInteger("XXXYYY",SYMBOL_DIGITS);
 
Artyom Trishkin:

Obrigado!