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

 
prostotrader:

A propósito, é estranho que você chame Sleep() de um indicador, porque é proibido:

A função Sleep() não pode ser chamada a partir de indicadores personalizados, pois os indicadores são executados na rosca de interface e não devem retardá-la. A função tem incorporado a verificação do status da bandeira de parada do especialista a cada 0,1 segundos.


 
Alexey Kozitsyn:

A propósito, é estranho que você chame Sleep() do indicador, pois é proibido:


Não sei o que é Sono()
 
prostotrader:

Alexei!

Um instrumento bastante líquido :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Não se trata de instrumento (liquidez), trata-se de atraso, que pode ocorrer em QUALQUER instrumento.

Eu tenho negociado ativamente com EAs há quase 4 anos.

Eu não tenho nenhuma pausa em nenhum dos meus EAs (exceto pausa para esperar que os dados sejam baixados do servidor no INDICADORES),

Se você fizer uma pausa, é um sinal certo de que o algoritmo de sua EA não está funcionando corretamente :(

Eu também tenho negociado por muito tempo, e só uso EAs. Mas principalmente no MT4. Tenho negociado no MT5 somente com Consultores Especialistas usando Limites e não houve problemas. Sou contra pausas adicionais em EAs também, especialmente se for um escalper ou um pipsitter, você pode simplesmente perder uma entrada.
 
prostotrader:
Não sei o que é Sono()
Então é estranho que você e eu estejamos discutindo pausas agora...
 
Alexey Kozitsyn:
Então é estranho que você e eu estejamos discutindo pausas agora...
Não no sentido do que Sleep() faz, mas no sentido de sua aplicação em meu código.
 
prostotrader:
Não no sentido do que Sleep() faz, mas no sentido de usá-lo em meu código.
Como você implementa uma pausa em seu indicador?
 
Alexey Kozitsyn:
Como você implementa uma pausa em seu indicador?
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
  uint end_value = GetTickCount();
  
  if(end_value < start_value)
  {
    if((start_value - end_value) >= per_value) return(true);
  }
  else
  {
    if((end_value - start_value) >= per_value) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
  int fail_cnt = 0;
//---
  while((fail_cnt < 5) && !IsStopped())
  {  
    long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
    if(first_date > 0)
    {
      if(SymbolIsSynchronized(a_symbol))
      {
  //      Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
        return(GetLocalData(a_symbol, period));
      }  
    }
    else
    {
      uint start_tick = GetTickCount();
//---        
      while(!CheckTimer(start_tick, 10))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
// Print( "LoadServerData: Первой даты на сервере нет!" );
  return(0);  
}

Este é um exemplo antigo.

Como o erro GetTickCount é bastante alto (até 16 ms), agora eu uso GetMicrosecondCount().

 
Gennady Mazur:
Em princípio eu faço isso, mas em Forts a ordem é freqüentemente aceita com sucesso...mas no próximo tick ainda não há posição...
É aqui que a abertura adicional pode escorregar .... resolver parcialmente o problema desta forma, se o pedido for aceito, eu aumento a variável int, e após o aumento as condições de abertura são ligeiramente diferentes, então não há nova abertura, mas.... se o pedido não for aceito a variável não é aumentada, mas aqui está a parte complicada... Julguei mal o estado e ordens adicionais começaram a aparecer.
Você já respondeu sua própria pergunta. Temos de seguir a ordem.
 
prostotrader:

Alexei!

Um instrumento bastante líquido :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Não se trata de instrumento (liquidez), trata-se de atraso, que pode ocorrer em QUALQUER instrumento.

Eu tenho negociado ativamente com EAs há quase 4 anos.

Eu não tenho nenhuma pausa em nenhum dos meus EAs (exceto pausa para esperar que os dados sejam baixados do servidor no INDICADORES),

Se você fizer uma pausa, é um sinal certo de que o algoritmo de sua EA não está funcionando corretamente :(

Então e se você não tiver um? Talvez o algoritmo lá seja tal que não seja necessário.
 
Gennady Mazur:
Eu também venho negociando há bastante tempo e somente com a ajuda de EAs. Mas principalmente no MT4. Tenho negociado no MT5 somente com Consultores Especialistas usando Limites e não houve problemas. Se eu sou um escalper ou um pipsder, eu não gosto de pausas em Expert Advisors, além disso, eu simplesmente perco uma entrada.
Este não é o caso quando você precisa de uma pausa.