Características da linguagem mql5, subtilezas e técnicas - página 24

 
Alexey Viktorov:
O que vai mudar com isto?
A declaração sobre os eventos comerciais está totalmente alinhada com o tema do tópico do tópico.
 

Uma simples falha de rede de curto prazo anula a lógica de negociação baseada APENAS na escuta de eventos de negociação.

Portanto, os adeptos da OnTradeTransaction exageram um pouco no seu raciocínio.

Este é o mecanismo de lógica de negociação que servirá fielmente em qualquer plataforma

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bom exemplo de trabalho com ordens de limite em um EA

fxsaber, 2017.01.02 23:12

Eu só negoceio através de ordens pendentes uma boa parte do tempo. Não fazendo nenhum processamento. OrderSend devolvido -1 (MT4 ou MT5+MT4Orders) - não funcionou e ok, porque o próximo passo ainda é olhar completamente para o ambiente de negociação. E se não houver pendente/posição mas deve haver, sincronizamos com o estado em que deve estar - o OrderSend correspondente é enviado.

Com esta abordagem, todas as nuances de regressos, execuções parciais, etc., são consideradas. E a implementação é muito simples e eficiente. Nunca falhou.

Eu não tentei métodos assíncronos e aqui não é muito mais difícil, mas não posso ter certeza.

 
fxsaber:

Uma simples falha de rede de curto prazo anula a lógica de negociação baseada APENAS em ouvir os eventos de negociação.

Portanto, os adeptos da OnTradeTransaction são um pouco exagerados em seu raciocínio.

Este é o mecanismo da lógica comercial que servirá fielmente em qualquer plataforma

Sim, a única maneira confiável é verificar o status da conta de negociação. Todos os eventos OnTrade* não podem fornecer um mecanismo confiável para a gestão de ordens de negociação.

Quanto às operações assíncronas - a sua única vantagem é que você pode enviar ordens de operação em linha, sem esperar pelos resultados das ordens anteriores. Mas o controlo da sua execução também não pode depender de eventos, neste aspecto não há diferença na verificação dos resultados das ordens síncronas.

O estado da conta de negociação é o que temos no momento do pedido (nós mesmos fazemos o pedido), se houver problemas com a rede - nada de mais, podemos fazer pedidos até que a rede se recupere. Confiar em eventos, por outro lado, torna-nos completamente dependentes de factores externos.

 

fxsaber:
Esta situação com o Trade-events é totalmente consistente com o tema deste ramo.

Não discordo em nada, só digo que não há muita gente que precise de apanhar tais subtilezas.

fxsaber:

Uma simples falha de rede de curto prazo anula a lógica de negociação baseada APENAS na escuta de eventos de negociação.

Portanto, os adeptos da OnTradeTransaction exageram um pouco no seu raciocínio.

Este é o mecanismo da lógica comercial que servirá fielmente em qualquer plataforma

E não vou desencorajar ninguém de o fazer. Especialmente porque acho que é muito necessário controlar o retorno do servidor. Só que existem abordagens diferentes. O que sugere é correcto, mas não é uma panaceia.

Talvez seja o princípio da minha vida: "Posso fazer pior, mas à minha maneira. Se acontecer alguma coisa, não haverá ninguém para culpar".

 

Habituei-me a usar a função MarketInfo(_Symbol, MODE_TICKVALUE) para valor de ponto de um símbolo em 4. Eu ainda não encontrei nenhum problema.

Não é tão uniforme em diferentes corretores de MT5. Eu fiz um pequeno script em EURUSD e USDJPY em duas contas diferentes. Observe o valor do ponto e o tamanho do contrato.

Esta é uma conta demo da MQ.

Esta é umaconta demo da Just2Trade:

Alguém tem uma função universal que faça o valor do ponto parecer o mesmo?
Eu entendo o tamanho de um carrapato e o tamanho do contrato deve ser considerado, talvez algo mais?

Ou seja, se for EURUSD e o depósito for em dólares - então 1 ponto de cinco dígitos para torná-lo igual a 1 dol.

E em que casos devemos usar SYMBOL_TRADE_TICK_VALUE_PROFIT ou SYMBOL_TRADE_TICK_VALUE_LOSS?
 
Vasiliy Pushkaryov:

Habituei-me a usar a função MarketInfo(_Symbol, MODE_TICKVALUE) para valor de ponto de um símbolo em 4. Eu ainda não encontrei nenhum problema.

Não é tão uniforme em diferentes corretores de MT5. Eu fiz um pequeno script em EURUSD e USDJPY em duas contas diferentes. Observe o valor do ponto e o tamanho do contrato.

Esta é uma conta demo da MQ.

Esta é umaconta demo da Just2Trade:

Alguém tem uma função universal que faça o valor do ponto parecer o mesmo?
Eu entendo o tamanho de um carrapato e o tamanho do contrato deve ser considerado, talvez algo mais?

Ou seja, se for EURUSD e o depósito for em dólares - então 1 ponto de cinco dígitos para torná-lo igual a 1 dol.

Quando é correto usar SYMBOL_TRADE_TICK_VALUE_PROFIT ou SYMBOL_TRADE_TICK_VALUE_LOSS?
Quando o "Nikonor's Office" tiver o tamanho do contrato como em normal, HUNDREDS de milhares, então o valor do ponto será como em normal. Entretanto, podes multiplicar o que tens por 100.000 e conseguir o que queres.
 
Alexey Viktorov:
Quando o "escritório do nikonor" tiver um tamanho de contrato como os normais, cem mil, então o valor do ponto será como os normais. Entretanto, podes multiplicar o que tens por 100.000 e conseguir o que queres.
Eu também já lutei com isto. MetaQuotes-Demo tem um tamanho de contrato; Just2Trade tem outro. Para os forex é um, para ações, etc. - outro para Forex, etc. O que está escrito na referência sobre como calcular tudo não faz sentido. E o cliente está à espera... Portanto, concordamos que ele não a calculará automaticamente, mas apenas a multiplicará por 100. E só no seu Just2Trade. Ainda não percebo este truque... :((
 
Artyom Trishkin:
Eu também já lutei com isto. Para a MetaQuotes-Demo o tamanho do contrato é um, para a Just2Trade é outro. Para os forex é a mesma coisa, mas para as ações e outros é diferente. - para Forex, um para ações, etc. É diferente. O que está escrito na referência sobre como calcular tudo não faz sentido, pelo amor de Deus. E o cliente está à espera... Então concordamos que ele não irá calculá-lo automaticamente, mas apenas multiplicá-lo por 100. E só no seu Just2Trade. Ainda não percebo este truque... :((

O que poderia não estar claro?

Tamanho do contrato padrão = 1 Compra 1000 lotes tem 0,00001*1000/1 = 0,01 por 1 pip

Outra opção, tamanho do contrato = 100000 comprou 0,01 lote (100000*0,01=1000) teve 1 ponto 1*1000/100000 = 0,01

Isto é para 5/3 dígitos.

ps; E no insta, o tamanho do contrato padrão era de 10000.
 
Alexey Viktorov:

O que poderia não estar claro?

Tamanho do contrato padrão = 1, comprou 1000 lotes, recebeu 0,00001*1000/1 = 0,01 por 1 pip

Outra opção, tamanho do contrato = 100000 comprou 0,01 lote (100000*0,01=1000) teve 1 ponto 1*1000/100000 = 0,01

Isto é para 5/3 dígitos.

ps; E na Insta o tamanho padrão do contrato era de 10000.
Estou a ver, só não estou habituado a 3000 ou 5000 lotes. Tenho de me habituar a isso.
 
Vasiliy Pushkaryov:
Estou a ver, só não estou habituado a usar 3000 ou 5000 lotes. Vais ter de te habituar a isso.

Se não está habituado, pode escrevê-lo assim

input double               lot         =  0.1;
input int                  take        =  100;   // TakeProfit

double takePips, contract;

/*******************Expert initialization function*******************/
int OnInit()
{
   contract = 100000/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE)*lot;
    takePips = take*_Point;
   return(INIT_SUCCEEDED);
}/*******************************************************************/

E na função OrderSend() enviar uma variável de contrato, independentemente do capricho do revendedor.
Razão: