Como abrir corretamente uma ordem de mercado? - página 4

 
Gennady Mazur:
Sim, bom conselho...

Repita

Temos que verificaros resultados.ordem.

Se o pedido for feito, isso não significa que o negócio já tenha sido feito.

Além disso, devemos também verificar o status da ordem e se ela já apareceu ou não na história.

A troca não funciona com posições, apenas com ordens.

 
Gennady Mazur:

Recentemente levantei um tópico sobre a reabertura de pedidos. Pensei que tinha resolvido o problema, pois tudo estava funcionando muito bem durante uma semana. Mas hoje eu encontrei um problema semelhante somente ao abrir.
Muitos pedidos foram abertos na Finam, e 9 na Otkritie... embora apenas um pedido devesse ter sido aberto em todos os casos.

Aqui está um trecho de código da EA

    

ou seja, podemos ver pelo código que se a operação for bem sucedida, a variávelOpenOrders aumenta, o que inicialmente é igual a 0

Se for maior que 0, não deve haver mais abertura do pedido, mas toda a pilha de pedidos é aberta com o comentário Ordem1.

Eu verifico se há uma resposta positiva na função que abre o pedido e se o bilhete de pedido foi recebido, mas por alguma razão esta função retorna falsa, mesmo que o pedido esteja realmente definido.

Explicar o que está errado, como resolver este problema?

Diga-me, para que mercado você está escrevendo este código?
 
prostotrader:
Diga-me, para qual mercado você está escrevendo este código?
Mercado de ações
 
Gennady Mazur:
Para o corretor de bolsa.
OK, vou dar uma olhada...
 
Sergey Chalyshev:

Repita

Além disso, você também deve verificar o status da ordem e se ela já apareceu na história ou não.

A troca não trata de posições, apenas de ordens.

Bem, Sergei, veja.... isto é a partir da documentação do resultado da consulta

Negócio

Um negócio de bilhetes, caso tenha sido executado. Isto é relatado durante uma transação comercialTRADE_ACTION_DEAL

encomenda

Pedido de bilhetes, se um bilhete tiver sido colocado. Notificado durante uma operação comercialTRADE_ACTION_PENDING


Não tenho uma ordem pendente, usoTRADE_ACTION_DEAL

Você deve estar trabalhando com limitadores, então tudo está correto.... e aqui está a entrada do mercado ao preço atual.
 
Gennady Mazur:

Bem, Sergei, veja.... isto é a partir da documentação do resultado da consulta

negócio

Venda de bilhetes, se houver. A ser informado sobre um TRADE_ACTION_DEAL

encomenda

Pedido de bilhetes, se um bilhete tiver sido colocado. Notificado durante uma operação comercialTRADE_ACTION_PENDING


Não tenho uma ordem pendente, usoTRADE_ACTION_DEAL

Você deve estar trabalhando com limitadores, então tudo está correto.... e aqui você está entrando do mercado ao preço atual.
Leia minha resposta novamente, ou escreva para Servicedesk.
 
Vladimir Karputov:

SetTypeFilling

SetTypeFilling

Define o tipo de pedido por preenchimento


Você define o que lhe convém.

A propósito, basta verificar os resultados do envio do pedido com as impressões

então o bilhete dá 0 em todos os casos

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);
 
Gennady Mazur:

A propósito, basta verificar os resultados do envio de um pedido com as impressões

O bilhete mostra 0 em todos os casos

Progressos têm sido feitos ... ))



 
Gennady Mazur:

A propósito, acabei de verificar com as gráficas os resultados do envio do pedido

então o bilhete dá 0 em todos os casos

  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    Print(_Symbol+" Test True order "+(string)Results.deal);
    if(Results.deal>0) return(true);
    else return(false);
  }
    Print(_Symbol+" Test False order "+(string)Results.deal);
  return(false);

Onde estão os códigos de retorno? Como posso saber se houve ou não um erro?

Dei-lhe um exemplo: dupla proteção e a saída do bilhete e do código de retorno.

 

Eu não consegui encontrar um exemplo. Deixe-me colocar desta forma.

Quando você envia uma ordem através do mercado, a ordem deve ser executada ou rejeitada (já que você tem um enchimento FOK).

Portanto, não é preciso esperar por um bilhete, é preciso obter um TICKET.

Uma vez que você recebe um bilhete, você "vai" à OnTradeTransaction() com o bilhete

você ouve TRADE_TRANSACTION_HISTORY_ADD porque as ordens do mercado sempre chegam à história

e olhe para o bilhete para ver o que aconteceu com o pedido.

Razão: