English Русский 中文 Español Deutsch 日本語
Como copiar sinais pelas suas regras usando um EA ?

Como copiar sinais pelas suas regras usando um EA ?

MetaTrader 5Exemplos | 20 setembro 2016, 13:44
2 511 0
Vladimir Karputov
Vladimir Karputov

Índice

 

Aviso de Risco

Antes de utilizar este método, é necessário confiar principalmente no senso comum, pois o aumento do coeficiente de cópia implica no aumento dos riscos.

Durante a cópia, o sistema verifica periodicamente se as posições na conta do comprador e do provedor são compatíveis. Se for detectada uma incompatibilidade, por exemplo, se apenas tiver sido copiada uma parte da posição, então, o sistema tentará resolvê-la, em particular, copiando as que faltam. Depois disso, contrariamente à sincronização inicial, o lucro total flutuante do provedor não será verificado. Se o assinante começar a copiar, então, ele deve seguir meticulosamente a estratégia de negociação do provedor. Não é possível copiar uma posição sem copiar as outras.

Se na conta do assinante forem detectadas posições abertas sem ter em conta quaisquer sinais, o sistema solicitará o seu fechamento ou as fechará automaticamente, dependendo da configuração."Sincronizar posições sem confirmação".

O método para ampliar a taxa de cópia do sinal pode ser utilizado quando o provedor negocia um lote mínimo, a capacidade de depósito é ajustado para 95% nas configurações (máxima utilização do depósito) e ao mesmo tempo, o coeficiente de cópia negociada é ainda muito pequena para que uma inscrição seja significativa. Voce pode especular o coeficiente de cópia de uma negociação futura antes de assinar um sinal da sua preferência com a ajuda do artigo Calculadora de Sinais.

O expert assistente utilizado para copiar os sinais de negociação apresentados neste artigo pode ser baixado gratuitamente a partir do Mercado:


1. Preparação

Antes de iniciarmos, consulte os vídeos tutoriais:

  1. Selecionando um sinal de negociação
  2. Assinatura dos Sinais
  3. Locação de hospedagem virtual
  4. Migrando a assinatura e utilizando o Expert Advisor na hospedagem virtual


1.1. A idéia da copiadora (copier)

O copiadora opera na hospedagem virtual, através de uma conta de negociação que esteja inscrita num sinal. Seu principal objetivo é aumentar as posições abertas no serviço de sinais por um número de vezes determinado. Fig. 1 mostra a ideia da copiadora que está anexada numa conta hedge:


Fig. 1. Aa ideia da copiadora que está anexada numa conta hedge

Fig. 2 demonstra a operação da copiadora numa conta de negociação com a compensação no sistema de registro de posições:

 

Fig. O conceito de cópia em uma conta de compensação 

Sendo assim, logo que o serviço de Sinais executa com êxito uma operação na conta inscrita, a copiadora imediatamente executa uma operação com o volume determinado pela fórmula:

"

O parâmetro "Deal multiply by" é responsável pelo aumento das taxas de operações e pode ser definido nos parâmetros de entrada:

Parâmetros de Entrada

Fig. 3. Parâmetros de Entrada 

Quando se trabalha com uma conta de negociação no MetaTrader 5, as ações da copiadora conduzem um aumento no volume da posição copiada. Em conta hedge no MetaTrader 5, as ações da copiadora ocasionam uma nova posição com um aumento do volume a ser aberto. Abaixo está um exemplo da operação da copiadora para contas de compensação e hedge no MetaTrader 5 com o parâmetro "Deal multiply by" igual a 5 , com o objetivo de aumentar as operações:

Ação do Serviço de Sinais Ação da copiadora em
Conta hedge
Ação da copiadora em
Conta de compensação
Operação copiada com lote BUY EURUSD igual a 0.01 Abrindo uma nova posição no lote BUY EURUSD igual a 0.05 — assim, o assinante tem duas posições: lote BUY EURUSD = 0.01 e BUY EURUSD = 0.06 Abrindo operação no lote BUY EURUSD = 0.05 — assim, o assinante tem uma posição no lote BUY EURUSD = 0.06

 

2. Características do Serviço de Sinais

2.1. Amigo ou inimigo

Como a copiadora monitora todos as operações realizadas pelo Serviço de Sinais, é necessário saber certas características do funcionamento deste serviço. Por exemplo, esse serviço mantém apenas as posições "amigáveis" - aquelas copiadas através do serviço.

Quando uma posição inscrita é aberta com sucesso, o serviço de Sinais escreve o nome do sinal para comentar a posição copiada e um identificador único no campo de número mágico referente a posição aberta.

Este identificador é posteriormente utilizado na identificação da posição aberta através do Serviço de Sinais com mais sincronizações da assinatura.

Este é o comentário para a operação BUY 0.01 EURUSD copiada do sinal "Test3443431". Ele pode ser visto ao passar o mouse sobre ao ordem copiada na guia "Histórico" da janela "Caixa de ferramentas":

 Comentário da operação copiada (aba "Histórico")

Fig. 4. Comentário da operação copiada (aba "Histórico")

Aqui:

  1. "#69801797" — ticket de uma operação aberta;
  2. "Test3443431" — nome do sinal da operação que foi copiada a partir dele;
  3. "361104976048745684" — Numero Mágico — oferta indentificada.

Na aba "Negociação" pode se ver que a posição atual do assinante tem a mesma descrição, mas sem o ticket:

Comentário da operação copiada (aba "Negociação")

Fig. 5. Comentário da operação copiada (aba "Negociação")

Em outras palavras, o serviço de Sinais descreve as posições usando o campo do Número Mágico da operação. As posições contabilizadas serão identificadas como "amigáveis". E o serviço des Sinais podem modificar os volumes ou fechar somente as posições "amigáveis".

posições não contabilizadas serão apresentadas como "inimigas". O serviço de Sinais não tem força sobre estas posições.

2.2. Substituir o número mágico ou não?

O terminal MetaTrader 5 permite conectar ambas as contas do assinante, negociação hedge e compensação . Dependendo do tipo de conta conectada, a conduta da copiadora em relação à substituição do Número Mágico na posição copiada pode diferir drasticamente. Para responder esta questão, vamos considerar a figura a seguir:


Fig. 6. Conta de compensação, sem substituição do Número Mágico 

Como podemos ver, numa conta de compensação, a copiadora aumentou a posição sem substituir o Número Mágico - por causa disso a posição se tornou "inimiga" dos Sinais de serviço. Isso é, o funcionamento da copiadora sem substituir o Número Mágico é um erro. Isto significa que numa conta de compensação, a copiadora sempre dever substituir o Número Mágico ao aumentar a posição. Mas quando se trata de uma conta hedge, tudo deve ser feito de modo contrário: ao aumentar a posição, a copiadora deve substituir o Número Mágico com o mesmo.

2.3. O que acontece com a posição "inimiga", se o provedor fecha a sua posição?

No exemplo de uma conta hedge: uma posição de BUY 0,01 EURUSD foi copiada para a conta de negociação inscrita. Em seguida, o assinante decidiu intervir no funcionamento do serviço, abrindo uma posição BUY 0,01 EURUSD. Durante uma das sincronizações os Sinais de serviço mais próximo irão gerir este erro:

Sinal  '3447880': posições locais não correspondem ao provedor de sinais [#85639429 buy 0.04 EURUSD 1.11697]


Isto é, a posição BUY 0.01 EURUSD, aberta manualmente pelo assinante, foi identificada como "inimiga" pelo serviço de Sinais. Agora vamos ver o que acontece quando o provedor fecha a sua posição: o serviço de Sinais fechaa posi ção "amigável", entretando a posição aberta manualmente BUY 0,01 EURUSD permanece no terminal. Não é admissível a intervenção manual no trabalho do serviço de Sinais, está claramente estabelecido nas regras:

IV. Assinatura de Sinais

   20. A Execução de seus próprios negócios na conta onde está a assinatura para um Sinal constitui uma interferência e pode levar a resultados imprevisíveis.


3. Como detectar o surgimento de uma operação?

A escolha do método para identificar o surgimento de uma operação, por um lado, afeta o coeficiente de resposta da cópia, e por outro - poderia conduzir a custos financeiros adicionais para cobrir o aumento, se uma operação for aberta por engano com um aumento de volume.

Devemos lembrar que assinamos um sinal, o que significa que os eventos de negociação do provedor de sinais são monitorados pelo serviço de Sinais. Se necessário, este serviço pode abrir ou fechar posição(ões). Qualquer abertura/fechamento de uma posição ou várias posições provoca uma alteração na conta de negociação do assinante. Esta mesma modificação deve ser monitorada, e o evento OnTradeTransaction() informará sobre isso.

3.1. Rastreamento utilizando o OnTradeTransaction()

Por que foi escolhido o OnTradeTransaction() e não o OnTrade()? Porque o OnTradeTransaction() contém ua informação muito útil - tipo de transação da negociação. Entre todo tipo de transações possíveis, somente uma é de nosso interesse:

TRADE_TRANSACTION_DEAL_ADD — a adição de uma ordem de operação no histórico. É realizado como um resultado da execução da ordem ou operando com o saldo da conta.

Isto é, espera-se que a copiadora adicione a ordem de operação ao histórico (garantindo uma operação de negócio bem sucedida na conta do assinante) e somente depois ela começa a processar a situação. 


4. Quando a assinatura é ou não possível.

A assinatura será bem sucedida se ambas as contas têm a mesma posição no sistema de registro:

Assinatura Resultado
Provedor — conta de compesação, inscrito — conta hedge

Uma tentativa de inscrever uma conta hedge no sistema de registro para um provedor com o sistema de registro de compesação falhou. 

2016.05.11 11:15:07.086 Signal  '*******': assinatura do sinal [*****] começou
2016.05.11 11:15:07.141 Signal  '*******': assinatura/renovação proibida


Se o provedor tem conta de de compesação e o assinante tenha conta hedge, o sinal não pode ser assinado.

Provedor — conta de hedge, assinante — conta de compensação

Uma tentativa de inscrever uma conta de compensação no sistema de registro para um provedor com o sistema de registro de conta hedge falhou. 

2016.05.11 11:39:54.506 Signal  '*******': assinatura do sinal [*****] começou
2016.05.11 11:39:54.560 Signal  '*******': assinatura/renovação proibida


Se o provedor tem conta hedge e o assinante tem conta de compesação, o sinal não pode ser assinado.

Provedor — conta hedge, assinante — conta hedge Assinatura com sucesso.
Provedor — conta de compensação, assinante — conta de compensação Assinatura com sucesso.

5. Armazenar informações sobre a cópia

Qual é o melhor lugar para armazenar as informações sobre a cópia executada? E uma questão mais global - é necessário armazenar tais informações do todo? Nesta versão da copiadora, as informações são armazenadas em uma estrutura. Declaração de estrutura:

//+------------------------------------------------------------------+
//| Estrutura de congruências de posições do terminal e              |
//| posições da copiadora                                            |
//+------------------------------------------------------------------+
struct correlation
  {
   long              POSITION_IDENTIFIER_terminal; // Identificador de posição (terminal)
   //+------------------------------------------------------------------+
   //| Identificador de posição é um número único que é atribuído       |
   //| para cada posição recém aberta e não muda durante                |
   //| toda a vida útil da posição.                                     |
   //| O volume de negócio da posição não muda seu identificador.       |
   //+------------------------------------------------------------------+
   double            POSITION_VOLUME_terminal;     // Volume da posição aberta pelo serviço de Sinais
   long              POSITION_IDENTIFIER_copier;   // identificador de posição (copiadora)
   //+------------------------------------------------------------------+
   //| Identificador de posição é um número único que é atribuído       |
   //| para cada posição recém aberta e não muda durante                |
   //| toda a vida útil da posição.                                     |
   //| O volume de negócio da posição não muda seu identificador.       |
   //+------------------------------------------------------------------+
   ulong             DEAL_ticket;                  // Ticket da ordem de operação, se o negócio for executado.
  };

A estrutura contém somente quatro elementos:  

  1. "POSITION_IDENTIFIER_terminal" — esta estrutura armazena o identificador da posição aberta pelo terminal (serviço de Sinais)
  2. "POSITION_VOLUME_terminal" — esta armazena o volume da posição aberta pelo terminal (serviço de Sinais)
  3. "POSITION_IDENTIFIER_copier" — esta armazena o identificador da posição aberta pela copiadora
  4. "DEAL_ticket" — este contém ticket da ordem de operação aberta pela copiadora, sendo esse negócio bem-sucedido

Todas as ações são executadas pela copiadora somente dentro da função OnTradeTransaction e somente se o tipo de transação de negociação for TRADE_TRANSACTION_DEAL_ADD. Quando essas condições forem atendidas, procure sempre o negócio que gerou essa transação, e recupere seus parâmetros:

//+------------------------------------------------------------------+ 
//| Função TradeTransaction                                          | 
//+------------------------------------------------------------------+ 
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obter o tipo de transação como valor de enumeração 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se a transação é resultado da adição da ordem de operação no histórico
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      double   deal_volume       =0;
      string   deal_symbol       ="";
      long     deal_type         =0;
      long     deal_magic        =0;
      long     deal_positions_id =0;
      string   deal_comment      ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_positions_id=HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
         deal_comment=HistoryDealGetString(trans.deal,DEAL_COMMENT);
         //Se (deal_magic==0 && SignalInfoGetString(SIGNAL_INFO_NAME)!=HistoryDealGetString(trans.deal,DEAL_COMMENT))
         //   retorno;
        }
      else
         return;
...

A tabela abaixo mostra a lógica de operação da copiadora numa conta de hedge e de compensação:

O sinal  sinal significa que um registo foi realizado neste elemento da estrutura

O sinal significa que a copiadora não pode fazer quaisquer alterações aos elementos da estrutura

O terminal do cliente POSITION_IDENTIFIER terminal POSITION_VOLUME terminal POSITION_IDENTIFIER copiadora deal_ticket
Hedge. Compensação. DEAL_ENTRY_IN
Procurando os elementos de estrutura deal_ticket para o valor de trans.deal.
Se não foi encontrado combinações: aumentar a estrutura por 1 ... 0 0 0 0
...e considerá-la como uma ordem de operação do serviço - portanto, ao abrir uma posição (DEAL_VOLUME * coeficiente) e se CTrade.ResultDeal() != 0, escreva no elemento POSITION_IDENTIFIER_terminal de valor do DEAL_POSITION_ID, o valor de CTrade.ResultDeal() é escrito ao elemento deal_ticket, e o deal_volume — para POSITION_VOLUME_terminal. 0
Se for encontrado - então é uma ordem de operação aberta pela copiadora, portanto escreva o elemento  DEAL_POSITOIN_ID em POSITION_IDENTIFIER_copier.

Hedge. Compensação. DEAL_ENTRY_OUT
Procurando por DEAL_POSITION_ID nos elementos das estruturas POSITION_IDENTIFIER_terminal e POSITION_IDENTIFIER_copier
Hedge.
... encontrado DEAL_POSITION_ID...
... ... no elemento POSITION_IDENTIFIER_copier – não fazer nada e deixar  ✔  ✔  ✔  ✔
... ... no elemento POSITION_IDENTIFIER_terminal –...  ✔  ✔  ✔  ✔
... ... ... esta posição ainda existe? Se existe, fechar a posição aberta pela copiadora...  ✔  ✔  ✔  ✔
... ... ... ... abre uma posição (o volume da posição encontrada * coeficiente) e se CTrade.ResultDeal() != 0, escreva o valor de CTrade.ResultDeal() para o deal_ticket elemento.  ✔  ✔  ✔  ✔
... ... ... não, esta posição não existe. Fecha a posição aberta pela copiadora.  ✔  ✔  ✔  ✔
Compensação.
... encontrado DEAL_POSITION_ID...
... ... no elemento POSITION_IDENTIFIER_terminal – (o volume anterior aberto pelo serviço de Sinais está armazenado na estrutura) calcule o novo volume, e se CTrade.ResultDeal() != 0, então escreva o valor do CTrade.ResultDeal() no elemento deal_ticket.  ✔  ✔  ✔  ✔

Conclusão

Se você se assinou um sinal, alugou a hospedagem virtual, porém o provedor negocia a lote mínimo (ou muito pequeno) - você pode enviar a copiadora considerada neste artigo para a hospedagem virtual. Dessa forma, todas as operações serão aumentadas em função das configurações da copiadora.

Atenção: os arquivos incluídos "copier.mq5" e o "languages.mqh" da copiadora devem ficar na mesma pasta.


Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/2438

Arquivos anexados |
copier.mq5 (37.81 KB)
languages.mqh (6.19 KB)
Dicas para o trader: indicadores de saldo, drawdown, carregamento e ticks durante o teste Dicas para o trader: indicadores de saldo, drawdown, carregamento e ticks durante o teste
Como tornar o teste mais claro? A resposta é simples: no testador, você precisa usar um ou mais indicadores, a saber: os indicadores de ticks, saldo e eqüidade, drawdown e carga de depósito. Isso permitirá monitorar visualmente quer a natureza dos ticks, quer as alterações de saldo e eqüidade, quer o drawdown e a carga de depósito.
Interfaces Gráficas V: O Controle Combobox (Capítulo 3) Interfaces Gráficas V: O Controle Combobox (Capítulo 3)
Nos dois primeiros capítulos da quinta parte da série, nós desenvolvemos as classes para criar uma barra de rolagem e uma lista. Neste capítulo, nós falaremos sobre a criação de uma classe para o controle combobox. Este é também um controle composto que contém, entre outros, os elementos considerados nos capítulos anteriores desta quinta parte.
LifeHack para traders: um back-test bem, e quatro melhor LifeHack para traders: um back-test bem, e quatro melhor
Antes do primeiro teste único, na mente de cada trader surge a mesma pergunta: "Qual dos quatro modos devo usar?" Cada um dos modos oferecidos tem suas vantagens e características, por isso tornamos o trabalho mais fácil, que dizer, executamos todos os modos usando apenas um botão! Este artigo mostra como ver simultaneamente todos os quatro gráficos de teste com ajuda da Win API e um magic pequeno.
Criação de estratégias de negociação manuais usando lógica fuzzy Criação de estratégias de negociação manuais usando lógica fuzzy
No artigo é considerada a possibilidade de melhorar as estratégias de negociação manuais usando a teoria dos conjuntos difusos (fuzzy). Como exemplo, é descrito passo a passo o motor de busca de estratégias e a seleção de seus parâmetros, o uso de lógica fuzzy para diluir os critérios demasiado formais de entrada no mercado. Assim, Depois da modificação da estratégia, nós obtemos condições flexíveis de abertura de posição que respondem melhor à situação de mercado.