Bibliotecas: MT4Orders - página 41

 
fxsaber :


Resultado

OrderTicketID () é inválido, acho que o MT4Orders.mqh não é a versão que eu baixei.


Fiz o download daqui https://www.mql5.com/pt/code/16006


Isso não está correto. Compilado com muitos erros

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

Não está certo. compilou muitos erros

 
fxsaber :

.


nenhum nome de função

seu computador tem russo, então pode funcionar bem, mas para quem não é russo ele tem um grande problema com unicode

 
noChangepromise:

Seu computador tem russo, portanto, pode funcionar bem. Mas para quem não é russo, ele tem um grande problema com unicode

Esta é a primeira vez que esse problema é relatado. Tente fazer o download do arquivo em si em vez de copiar e colar.

 
noChangepromise:

Você poderia dar um exemplo de como converter iMA () ou iCustom ()

Eu não faço conversão.

 
// Lista de modificações:
// 02.11.2019
// Correção: lote ajustado, comissão e preço de fechamento para posições CloseBy.


No MT4, é muito fácil calcular o valor médio dos lotes negociados e a comissão paga.

void OnStart()
{
  double AvgLots = 0;       // Lote médio de uma posição fechada.
  double AvgCommission = 0; // Comissão média por posição fechada.
  
  int AmountPositions = 0;  // Número de posições fechadas.
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) && OrderLots())
    {
      AvgLots += OrderLots();
      AvgCommission += OrderCommission();
      
      AmountPositions++;
    }
    
  if (AmountPositions)
  {
    AvgLots /= AmountPositions;
    AvgCommission /= AmountPositions;
  }
}

A parte destacada é responsável por ignorar as posições fechadas pelo CloseBy. Como elas não são negociadas e são, na verdade, falsas.

Descobriu-se que um código tão simples (não dou outros exemplos) não funcionava corretamente no MT5 com a versão antiga da biblioteca. Agora está tudo bem.


ZЫ A primeira vez que encontrei um uso para a propriedade ORDER_POSITION_BY_ID.

 
fxsaber:

O link destacado é um problema não resolvido. Se alguém tiver alguma ideia de uma solução alternativa, me avise.

Solução alternativa de muletas.

bool IsSynchronized( void )
{
  static ulong Orders[];
  
  bool Res = true;
  
  for (int i = ArraySize(Orders) - 1; (i >= 0) && Res; i--)
    if (Orders[i])
      Res = OrderSelect(Orders[i]) || HistoryOrderSelect(Orders[i]);
    
  if (Res)
    for (int i = ArrayResize(Orders, OrdersTotal()) - 1; i >= 0; i--)      
      Orders[i] = OrderGetTicket(i);
      
  return(Res);  
}

#include <MT4Orders.mqh>

void OnTick()
{
  if (!IsSynchronized())
  {
    Alert("Hello World!");
    
    return;
  }
  
  // ....
}
 

Seria muito desejável especificar, pelo menos no cabeçalho do comentário do código-fonte, que o MT4ORDERS_FASTHISTORY_OFF não apenas acelera o trabalho com as matrizes de histórico, mas também afeta a integridade do suporte funcional, em particular, sem essa opção, é impossível selecionar a ordem de mercado anteriormente aberta e fechada via OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY), porque o ticket transferido pertence à negociação de entrada (que é descartada no IsMT4Deal).O fato de o tíquete transferido pertencer à negociação de entrada (que é descartada em IsMT4Deal) e a busca pela saída correspondente serem apenas cobertos pela compilação condicional em MT4ORDERS_FASTHISTORY_OFF (em GetPositionDealOut).

 
Stanislav Korotky:

Seria muito desejável especificar, pelo menos no cabeçalho do comentário do código-fonte, que o MT4ORDERS_FASTHISTORY_OFF não apenas acelera o trabalho com as matrizes de histórico, mas também afeta a integridade do suporte funcional, em particular, sem essa opção, é impossível selecionar a ordem de mercado anteriormente aberta e fechada via OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY), porque o ticket transferido pertence à negociação de entrada (que é descartada no IsMT4Deal).O fato de o tíquete transferido pertencer à negociação de entrada (que é descartada em IsMT4Deal) e a busca pela saída correspondente serem apenas cobertos pela compilação condicional em MT4ORDERS_FASTHISTORY_OFF (em GetPositionDealOut).

Não me ocorreu que esse modo lento pudesse ser usado por outra pessoa. Já passou tanta água que não há como tentar mantê-la.