Especialistas: Programação no MQL5 para traders: códigos-fonte retirados do livro. Parte 7 - página 4

 
wf2000cn #:

Olá @Stanislav Korotky, sou novo no MQL5. Descobri que você publicou um arquivo wss.zip para uso de websocket. Como usá-lo, há uma demonstração ou algo que eu possa aprender. Muito obrigado!

Você pode encontrar vários exemplos no livro algotrading, na seção que descreve (passo a passo) a implementação de um projeto de serviço da Web para copiar negociações e sinais.

MQL5 Book: Advanced language tools / Projects / Project plan of a web service for copying trades and signals
MQL5 Book: Advanced language tools / Projects / Project plan of a web service for copying trades and signals
  • www.mql5.com
As an end-to-end demonstration project, which we will develop throughout this chapter, we will take a simple, but at the same time quite...
 
Stanislav Korotky #:

Você pode encontrar vários exemplos no livro de algotrading, na seção que descreve (passo a passo) a implementação de um projeto de serviço da Web para copiar negociações e sinais.

Ok, vou aprender primeiro. Muito obrigado, sinceramente!
 

Olá @StanislavKorotky

Estou tentando implementar um fechamento de posição parcial com uma ordem pendente na direção oposta.

Por exemplo:

  • se eu tiver uma posição de compra aberta no XAUUSD com tamanho de 2 lotes
  • abro uma ordem pendente de venda no XAUUSD com tamanho de 1 lote
  • No evento OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD (transaction.type) , tenho

MqlTradeRequestSync reqs(transaction.symbol);

reqs.closeby(target_position_ticket_id, transaction.order);

Acredito que a linha acima deve ser capaz de realizar o trabalho, mas meu desafio é como obter o `target_position_ticket_id`dentro do manipulador de eventos OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD ( transaction.type) ou, de alguma forma, associar a ordem pendente com o target_position_ticket_id que se espera que feche sempre que a ordem pendente for preenchida.

Tentei adicionar o `target_position_ticket_id`ao comentário da ordem pendente quando estou criando a ordem pendente, mas o problema é que dentro do evento OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD (transaction.type) não consigo acessar o comentário, pois
os atributosMqlTradeTransaction não têm 'comment'

Agradeço sua ajuda.

 
pauldic MqlTradeTransaction não têm "comment".

O método closeby(ticket1, ticket2) do livro pressupõe que você use uma conta de cobertura e já tenha duas posições abertas (compra e venda) com os tickets ticket1 e ticket2. Suponho que seja impossível (em geral) executar a ação TRADE_ACTION_CLOSE_BY em uma ordem pendente. Mas se a sua conta estiver no modo de compensação, acho que você pode simplesmente colocar uma ordem pendente na direção oposta e, quando ela for acionada, modificará a posição existente de acordo - ou seja, a fechará, ou fará um fechamento parcial, ou até mesmo inverterá (se o novo volume for maior que o antigo).

 
Pequenos patches em websockets (à la carte e em massa).
Arquivos anexados:
wsprotocol.mqh  17 kb
wss.zip  16 kb
 
Stanislav Korotky #:
Pequenos patches em websockets (a la carte e em massa).
@StanislavKorotky Obrigado pela atualização contínua, mas há algo que estou tentando descobrir. No MT5 "Market Watch", posso clicar com o botão direito do mouse em qualquer "Symbol" e visualizar todas as suas propriedades associadas, da mesma forma que faria programaticamente clicando em "Specification".

Uma dessas propriedades é a "Commissions" do Symbol, que obviamente difere das corretoras, como pode ser visto na imagem em anexo. No entanto, não consegui acessar essa propriedade de forma programática. Você poderia me dar uma dica de como obter a comissão do símbolo?


Por outro lado, esta mensagem aparece com frequência no registro sempre que estou trabalhando com o PositionFilter, especialmente quando o EA é carregado pela primeira vez ou recompilado: "Unresolved int value as enum: 8 for MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>". Ele ainda funciona bem e não interrompe nada
Arquivos anexados:
 
pauldic #:
@StanislavKorotky Obrigado pela atualização contínua, mas há algo que estou tentando descobrir. No MT5 "Market Watch", posso clicar com o botão direito do mouse em qualquer "Símbolo" e visualizar todas as suas propriedades associadas, da mesma forma que faria programaticamente clicando em "Specification".

Uma dessas propriedades é a "Commissions" do Símbolo, que obviamente difere das corretoras, como pode ser visto na imagem em anexo. No entanto, não consegui acessar essa propriedade de forma programática. Por favor, pode me dar uma dica de como obter a comissão do símbolo?

Infelizmente, nem todas as propriedades das entidades do terminal são acessíveis via MQL5.

pauldic #:
Por outro lado, essa mensagem aparece com frequência no registro sempre que estou trabalhando com o PositionFilter, especialmente quando o EA é carregado pela primeira vez ou recompilado: "Unresolved int value as enum: 8 for MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>". Ele ainda funciona bem e não interrompe nada

Isso é apenas um aviso causado pelo fato de que a enumeração interna correspondente da MQL5 tem uma lacuna nas constantes que normalmente são atribuídas consecutivamente. Essa lacuna ocorre porque a MQL5 está em constante mudança, e algumas constantes podem se tornar obsoletas e ser eliminadas. Você pode editar o código-fonte para evitar esses avisos.

 

Estou anexando uma versão atualizada da biblioteca JSON - toyjson3.mqh - que substitui a toyjson2.mqh e a toyjson.mqh do livro.

Essa versão é otimizada para processar arquivos JSON enormes. Por uma questão de simplicidade, as versões anteriores usam a função StringSplit para tokenização de texto durante a análise, e essa chamada pode solicitar internamente gigabytes de memória livre devido à fragmentação e à antecipação do fluxo de dados adicional. Ela é liberada após a análise, mas o gerenciador de memória MQL5 pode mantê-la reservada por um tempo, pois libera o lixo de forma adiada.

Agora, ele ocupa muito menos memória durante a análise.

Arquivos anexados:
toyjson3.mqh  39 kb
 
Aqui está mais uma pequena correção de bug no ToyJson3.mqh - números de ponto flutuante com expoente (notação científica, como "1e-8") agora são detectados corretamente durante a análise.
Arquivos anexados:
toyjson3.mqh  39 kb
 
Stanislav Korotky #:
Estou anexando algumas correções de bugs e melhorias nas classes de websockets.

Isso é exatamente o que eu precisava.

Muito obrigado.

Você se sente como esse cara para mim.

https://clip.cafe/top-gun-maverick-2022/good-afternoon-ladies-gentlemen-s2/

Watch 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' | Top Gun: Maverick Clip
Watch 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' | Top Gun: Maverick Clip
  • clip.cafe
Watch the clip 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' from the movie Top Gun: Maverick on Clip.Cafe. Lt. Jake 'Hangman' Seresin: [after destroying the plane that almost killed Maverick and Rooster] Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your seat belts, return the tray tables to their locked an upright positions and prepare for landing. Bradley 'Rooster' ...