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

 
Dmitry Fedoseev:
Não é você que precisa de uma pausa.
É isso mesmo.
 
De qualquer forma, o ponto principal, imho, é este.

Globalmente, há duas maneiras:

1) análise do ambiente (sucção no histórico das transações, verificação da posição aberta ou do volume da posição);

2) análise das transações.

O primeiro trabalha mais lentamente. Mas é mais confiável. Precisamos de um compromisso. Talvez tenhamos que olhar para a estratégia e depender dela.

Sim, a FORTS tem um ticker completo, portanto não se deve trabalhar com carrapatos, mas com o evento BookEvent.

É estranho que Vasily Sokolov não tenha se pronunciado sobre este assunto. Seu ponto de vista é interessante...
 
Dennis Kirichenko:
De qualquer forma, o ponto principal, imho, é este.

Globalmente, há duas maneiras:

1) análise do ambiente (sucção no histórico das transações, verificação da posição aberta ou do volume da posição);

2) análise das transações.

O primeiro trabalha mais lentamente. Mas é mais confiável. Precisamos de um compromisso. Talvez tenhamos que olhar para a estratégia e depender dela.

Sim, a FORTS tem um ticker completo, portanto não se deve trabalhar com carrapatos, mas com o evento BookEvent.

É estranho que Vasily Sokolov não tenha se pronunciado sobre este assunto. Seu ponto de vista é interessante...
Talvez em breve eu mude para o vidro, mas por enquanto .... da maneira antiga.
 
Dennis Kirichenko:
De qualquer forma, o ponto principal, imho, é este.

Globalmente, há duas maneiras:

1) análise do ambiente (sucção no histórico das transações, verificação da posição aberta ou do volume da posição);

2) análise das transações.

O primeiro trabalha mais lentamente. Mas é mais confiável. Precisamos de um compromisso. Talvez tenhamos que olhar para a estratégia e depender dela.

Sim, a FORTS tem um ticker completo, portanto não se deve trabalhar com carrapatos, mas com o evento BookEvent.

É estranho que Vasily Sokolov não tenha se pronunciado sobre este assunto. Seu ponto de vista é interessante...
A propósito, tenho uma pergunta: podemos usar o eventoBookEvent da mesma forma que usamos o Tick ou o Timer?
ou seja, posso transferir minha estratégia para lá completamente?
 
Lembrei-me sobre o assunto...

Uma vez trabalhei nesta ordem e escrevi a classe CiOnTrade:
class CiOnTrade : public CTrade
Foi uma tarefa interessante. Eu e meu cliente ficamos nervosos um com o outro e quebramos nossos corações. Até onde me lembro, a tarefa principal era comprar/vender o volume garantido. E se parte do volume não foi preenchida, tivemos que apagar essas encomendas e vender o resto por um preço diferente...

Portanto, a solução ideal que encontrei foi o processamento dos estados. E eram tantos:
enum ENUM_TRADE_STATE
  {
   TRADE_STATE_NONE=0,      // "ничего"
   TRADE_STATE_ORDERS=1,    // "только ордера"
   TRADE_STATE_POSITION=2,  // "только позиция"
   TRADE_STATE_ALL=3,       // "все"
  };
1) "Nada" - este é o estado inicial, quando nada foi feito.

2) "Somente ordens" - este é o estado quando as ordens são colocadas.

3) "Somente posição" é o estado quando as ordens são totalmente executadas.

4) "Todos" é o estado quando as ordens não foram executadas completamente e já existe uma posição no mercado.

Portanto, cada estado tinha que ser processado. Sim, a propósito, admito que também existem estados intermediários. Assim, minha classe poderia ser melhorada.
 
Gennady Mazur:
A propósito, surgiu uma pergunta: o eventoBookEvent pode ser usado da mesma forma que o Tick ou o Timer?
ou seja, posso transferir completamente minha estratégia para lá?
Sim, mas note que o BookEvent gera eventos com mais freqüência. É por isso que precisamos de algum filtro para peneirar os desnecessários. Por exemplo, os preços não mudaram, mas apenas os volumes de algumas licitações.
 
Dennis Kirichenko:
Sim! Mas considere que o copo tem mais probabilidade de gerar eventos. Portanto, você precisa de algum filtro para peneirar eventos desnecessários. Por exemplo, os preços não mudaram, mas apenas volumes de algumas licitações.
Entendo que agradecimentos...e em alguns casos a mudança de volume é mais importante do que a mudança de preço, especialmente perto de níveis fortes.
 
Dennis Kirichenko:
O ponto principal, imho, é este.

Globalmente, há duas formas:

1) análise do ambiente (sugando o histórico das transações, verificando posição aberta ou volume da posição);

2) análise das transações.

O primeiro trabalha mais lentamente. Mas é mais confiável. Deve haver um compromisso. Talvez tenhamos que olhar para a estratégia e depender dela.
A variante OrderSend+Sleep(0) não funciona mais lentamente que a OrderSend+OnTradeTransaction. Eu o medi. É por isso que eu não uso a segunda variante não para transações assíncronas.
 
Dennis Kirichenko:
Presumo que a informação sobre o acordo ainda não tenha chegado. Aqui (marcado em vermelho), você conta com a sorte. E ela é uma senhora caprichosa :-))

bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
  MqlTradeRequest Request;
  MqlTradeResult Results;
  ZeroMemory(Request);
  ZeroMemory(Results);
  Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
  Request.action=TRADE_ACTION_DEAL;
  Request.type=ORDER_TYPE_SELL;
  Request.symbol=symbol;
  Request.volume=volume;      
  Request.deviation=deviation;
  Request.comment=comment;  
  Request.type_filling=filling;
  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    if(Results.deal>0) return(true);
    else return(false);

  }
  return(false);
}

Mesmo comORDER_STATE_FILLED, Results.order pode ter um problema - Results.deal é zero. A reprodução 100% desta situação é obtida no servidor FXOpen-MT5.

Recomendo abrir muitas demonstrações em diferentes servidores e conseguir a funcionalidade total do código. Eu o fiz para o MT4 bíblico. É por isso que não há problema com o subgame.

 
fxsaber:
OrderSend+Sleep(0) não é mais lento que OrderSend+OnTradeTransaction. Eu o medi. Portanto, não utilizo a segunda variante não para transações assíncronas.

A variante OrderSend+Sleep(0) é temporária, porque é uma falha dos desenvolvedores (não a use como exemplo :) ).

Quando for corrigido, somente OrderSend permanecerá