Bibliotecas: MT4Orders - página 45

 
fxsaber:

Você tem que pensar em cada frase.


Eu estava perguntando onde está a implementação de take-outs como limites, se o texto acima diz "O preço atingiu o take-out da posição aberta. O MT5 formou uma ordem de mercado".

Em resposta, recebi:

fxsaber:

O MT5 sempre mostra os compradores para [cliente] na forma de ordens de mercado.

Como comparar isso?


fxsaber:

De terceiros.

Portanto. Por que não conectá-lo?


fxsaber:

Portanto, o limitador é enviado com um prazo de validade muito curto.

O que isso tem a ver com minha pergunta?

Qual é a diferença entre entrada e saída? Por que um mercado é mais favorável para a saída e um limite para a entrada?

 
Andrey Khatimlianskii:

Você precisa pensar em cada frase.

Infelizmente, esse é o custo do formato de comunicação.


O MT5 sempre mostra as retiradas na forma de mercados. O fato de serem mercados ou limitadores depende, na verdade, das implementações de gateway de terceiros. Nesse caso, esses mercados são enviados como limitadores.

O MT5 atua apenas como um banco de dados.

 
fxsaber:

O MT5 sempre mostra compradores na forma de mercados. O fato de serem mercados ou limitadores depende, na verdade, das implementações de gateway de terceiros. Nesse caso, esses mercados são enviados como limitadores.

Estamos falando sobre como a execução da TP é exibida?

Então estou vendo do que se trata a postagem original)

 
fxsaber :

Estou desenvolvendo recursos de conversão de indicadores para autoeducação. Aqui estão mais três indicadores.

Como de costume, o código original do MT4 não foi alterado.

A fonte mostra claramente o que os autores usam StringConcatenate em seus códigos. Isso é simplesmente estúpido!

OLÁ...


Como foi o processo de conversão para o MT5?

 

Tenho uma conta de compensação. Abro e fecho uma posição nela por meio de mercados. Ao fechar uma posição, o OrderSend retorna 0, o que não é um erro, mas também não é um sucesso.

Observo o seguinte código no OrderSend

    return((arrow_color == INT_MAX) ? (MT4ORDERS::NewOrderCheck() ? 0 : -1) :
           ((((int)arrow_color != INT_MIN) || MT4ORDERS::NewOrderCheck()) &&
            MT4ORDERS::OrderSend(MT4ORDERS::LastTradeRequest, MT4ORDERS::LastTradeResult) ?
            (MT4ORDERS::IsHedging ? (long)MT4ORDERS::LastTradeResult.order : // PositionID == Result.order - recurso MT5-Hedge
             ((MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL) ?
              (MT4ORDERS::IsTester ? (::PositionSelect(MT4ORDERS::LastTradeRequest.symbol) ? PositionGetInteger(POSITION_TICKET) : 0) :
                                      // HistoryDealSelect em MT4ORDERS::OrderSend
                                      ::HistoryDealGetInteger(MT4ORDERS::LastTradeResult.deal, DEAL_POSITION_ID)) :
              (long)MT4ORDERS::LastTradeResult.order)) : -1));

MT4ORDERS::OrderSend retorna true. MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL também é true. MT4ORDERS::IsTester também é true. Mas PositionSelect(MT4ORDERS::LastTradeRequest.symbol) retorna falso. Aparentemente, isso ocorre porque a posição está fechada. Isso é um bug ou um recurso? Ou entrei novamente em uma área que não é totalmente suportada por essa biblioteca?

 
traveller00:

Tenho uma conta de compensação. Abro e fecho uma posição nela por meio de mercados. Ao fechar uma posição, o OrderSend retorna 0, o que não é um erro, mas também não é um sucesso.

O fechamento de umaposição geralmente é feito por meio do OrderClose. Se você fechar uma posição via OrderSend, é lógico retornar zero, porque o MT4Style-OrderSend retorna um ticket de uma posição aberta. Bem, se você a fechou, não há nada a ser retornado. Um erro é quando -1.


Se você usar o OrderSend para fechar parcialmente ou virar, ele deverá (supostamente) retornar um tíquete da posição alterada. Zero - quando não há ticket para retornar.

 

Estou tentando configurar a execução parcial de ordens em minha mente, mas ainda não a compreendi totalmente. E as contas de demonstração, na maioria das vezes, cospem no volume e não permitem a verificação experimental.

Há duas situações: uso o MT4 puro com a opção"Partial Execution of Limit Orders" e uso o MT5 com a biblioteca MT4Orders. Uma ordem de limite é colocada e parcialmente executada.

1. No MT4, pelo que entendi, haverá duas ordens: uma para o volume parcialmente executado como não sendo uma ordem de limite, mas já executada, e uma para o volume restante como uma ordem de limite. As ordens serão independentes, a segunda ordem é essencialmente colocada pelo corretor. Depois que o volume restante for preenchido, haverá duas ordens, mas ambas serão executadas. Estou entendendo isso corretamente? Porque, olhando para o esquema da API no MT4, só isso me veio à mente, não vejo nenhum trabalho com execução parcial lá, bem como colocar o tipo de ordem, como FOK ou outra coisa.

2. Para o MT5, a ordem permanecerá 1, ainda uma ordem de limite, mas haverá uma divisão de volumes em ORDER_VOLUME_INITIAL e ORDER_VOLUME_CURRENT. O MT4Orders retornará ORDER_VOLUME_CURRENT e, para obter o segundo volume, você terá que usar a API nativa do MT5. Quando o volume restante for preenchido, a ordem permanecerá 1, passará do Limite para Executada e o preço será recalculado para a média. Estou entendendo isso corretamente?

 
traveller00:

Estou tentando configurar a execução parcial de ordens em minha mente, mas ainda não a compreendi totalmente. E as contas de demonstração, na maioria das vezes, cospem no volume e não permitem a verificação experimental.

Há duas situações: uso o MT4 puro com a opção"Partial Execution of Limit Orders" e uso o MT5 com a biblioteca MT4Orders. Uma ordem de limite é colocada e parcialmente executada.

1. No MT4, pelo que entendi, haverá duas ordens: uma para o volume parcialmente executado como não sendo uma ordem de limite, mas já executada, e uma para o volume restante como uma ordem de limite. As ordens serão independentes, a segunda ordem é essencialmente colocada pelo corretor. Depois que o volume restante for preenchido, haverá duas ordens, mas ambas serão executadas. Estou entendendo isso corretamente? Porque olhando o esquema da API no MT4 só me veio isso à mente, não vejo nenhum trabalho com execução parcial lá, bem como colocar o tipo de ordem, como FOK ou outra coisa.

Correto.

2. Para o MT5, a ordem permanecerá 1, enquanto ainda for uma ordem de limite, mas haverá uma divisão de volumes em ORDER_VOLUME_INITIAL e ORDER_VOLUME_CURRENT. O MT4Orders retornará ORDER_VOLUME_CURRENT e, para obter o segundo volume, você terá que usar a API nativa do MT5. Quando o volume restante for preenchido, a ordem permanecerá 1, passará do Limite para Executada e o preço será recalculado para a média. Estou entendendo isso corretamente?

Serão geradas muitas negociações com a mesma DEAL_ORDER. A ordem pode até ser modificada (preço de abertura) ou excluída por você. Ou seja, seu status pode ser CANCELADO, mas ela gerou várias negociações. É por isso que nem sempre é possível saber o valor da derrapagem.


Não estou ciente disso. Talvez no loop MOEX-demo seja possível influenciar o preço por meio de limitadores de demonstração. Então, é fácil reproduzir a situação: coloque BuyLimit dentro do spread e imediatamente faça alguns pequenos mercados de VENDA.


ORDER_VOLUME_INITIAL - não vi um cenário em que essa informação pudesse ser útil.


Se não houver posições abertas (não é necessário para Hedge), a execução parcial cria uma Posição MT5 e uma Ordem MT5 com o mesmo ticket. Além disso, ela cria negociações com o mesmo PositionID. É por isso que, no modo SELECT_BY_TICKET, diferentemente do MT4, você pode priorizar onde procurar primeiro (no Histórico ou entre os ativos) - MODE_HISTORY/MODE_TRADES. E a seleção por Ticket, portanto, não é inequívoca.


É por isso que recomendo fazer isso por meio de SELECT_BY_POS.

 
fxsaber:

ORDER_VOLUME_INITIAL - Não vi um cenário em que essa informação fosse útil.

Eu a utilizo em conjunto com ORDER_VOLUME_CURRENT para determinar quanto foi despejado e quanto ainda está no limitador. Principalmente para minhas próprias estatísticas, para tornar o processo mais claro.


Obrigado pela explicação detalhada. Isso significa que imaginei tudo corretamente, então estou fazendo isso. A única coisa que não levei em conta é que a execução parcial no MT5 criará uma nova ordem de mercado.

 
fxsaber:

O fechamento de uma posição é feito, na maioria das vezes, por meio do OrderClose.

Mas, nesse caso, é impossível trabalhar por meio do Limiter. Ou isso é possível de alguma forma?