Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

TradeTransactions - biblioteca para MetaTrader 5

Visualizações:
1394
Avaliação:
(30)
Publicado:
2018.12.10 10:52
\MQL5\Indicators\fxsaber\ \MQL5\Experts\fxsaber\ \MQL5\Include\fxsaber\TradeTransactions\ \MQL5\Include\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

As ordens de negociação assíncronas têm uma enorme vantagem - alta velocidade quando enviadas em massa. No entanto, existe um certo inconveniente que impede a divulgação destes tipos de ordens: você só pode ver os dados sobre os resultados da ordem exclusivamente no OnTradeTransaction, esta circunstância faz com que o usuário deva construir um modelo de evento de seu sistema de negociação, se ele quiser alcançar o efeito de assincronismo. Mas nem sempre é fácil fazer isso (Expert Advisors), às vezes, até mesmo impossível (scripts).

A biblioteca resolve esse problema. A qualquer momento, ele fornece acesso a todas as transações no terminal de negociação (dados completos apropriados do OnTradeTransaction), desde o lançamento do aplicativo, simplificando o processo de tornar seus programas assíncronos.

Exemplos

O exemplo abaixo exibe o princípio de operação da biblioteca:

// Imprima todas as transações sem o OnTradeTransaction

#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Acesse aos dados do OnTradeTransaction em qualquer lugar do programa

TRADETRANSACTIONS Transactions; // Transações de negociação

const bool Init = EventSetMillisecondTimer(100);

void OnTimer()
{
  static uint Total = 0;
  const uint NewTotal = Transactions.Total(); // Número de transações salvas
  
  for (uint i = Total; i < NewTotal; i++) // Executar através de novas transações
  {
    MqlTradeTransaction Trans;
    MqlTradeRequest Request;
    MqlTradeResult Result;
    
    // Obtenha todos os dados da respectiva transação e imprima-os.
    Print(TimeToString(Transactions[i].Get(Trans, Request, Result)) + "\n" + 
          ToString(Trans) + ToString(Request) + ToString(Result));        
  }
  Total = NewTotal;
}

Execute este EA e tente executar ordens de negociação manualmente. O Expert Advisor imprimirá todos os detalhes como se tivesse usando o OnTradeTransaction. Embora não tenha!

Pode haver muitos cenários práticos para usar essa funcionalidade. Por exemplo, negociando uma cesta de símbolos. Por exemplo, se você precisar abrir rapidamente várias posições dentro do código. Se eles estiverem abertos, você pode realizar operações de negociação adicionais sem sair da função On.

Como frequentemente precisamos esperar o resultado de um envio massivo de ordens assíncronas, a biblioteca apresenta a capacidade adequada e pode ser avaliada rapidamente usando esse exemplo.

// Exemplo de ordens de negociação assíncronas massivas com espera por um resultado.

#include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006
#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Acesse aos dados do OnTradeTransaction em qualquer lugar do programa

TRADETRANSACTIONS Transactions; // Transações de negociação

// Abertura de valor das posições o mais rápido possível. Retorna quando as posições estiverem abertas.
bool OpenPositions( const int Amount = 10 )
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, Amount) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, true);
    
    RequestID[i] = OrderSendAsync(Symb, OP_BUY, 1, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0); // Enviar ordem assíncrona
  }
  
  return(Transactions.Waiting(RequestID)); // Aguarde uma resposta do servidor para todas as ordens assíncronos
}

// Feche tudo o mais rápido possível. Retorna quando a ação for confirmada.
bool CloseAll()
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, OrdersTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS))
      // Enviar ordem assíncrona
      RequestID[i] = (OrderType() <= OP_SELL) ? OrderCloseAsync(OrderTicket(), OrderLots(), OrderClosePrice(), 100) : OrderDeleteAsync(OrderTicket());
  
  return(Transactions.Waiting(RequestID)); // Aguarde uma resposta do servidor para todas as ordens assíncronos
}

void OnStart()
{
  if (OpenPositions())
    Print(CloseAll());
}

Claro, isso é um script, mas ainda permite trabalhar com transações através da biblioteca. A execução mostra como abrir e fechar rapidamente várias posições/ordens de negociação

Características

  • O código Indicators\fxsaber\TradeTransactions.mq5 deve ser compilado.
  • A bibliotecaTypeToBytes é usada
  • O recurso do código-fonte da biblioteca (ResourceData.mqh) é uma classe universal que permite que você facilmente salve/leia dados dos Recursos.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/22166

Skyscraper Skyscraper

Um indicador de tendência do tipo NRTR com uma linha média adicional

XRSI_Candle_Vol_Zer_Alerts XRSI_Candle_Vol_Zer_Alerts

O indicador XRSI_Candle_Vol_Zer fornece alertas, envia e-mails e notificações para os sinais de entrada nas negociações.

Easy Canvas Easy Canvas

A biblioteca e a classe iCanvas simplificam a escrita de programas usando o elemento Canvas.

Rompimento do Candle Anterior 3 Rompimento do Candle Anterior 3

EA "Previous Candle Breakdown".