Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1385

 
Vitaly Muzichenko:

Todos os itens acima fazem o código, exceto o amarelo destacado - eu acho que é desnecessário e não é muito correto. Nunca vi ninguém rolar em uma hora diferente, sempre ao mesmo tempo - 22-00 GMT, embora eu possa estar errado.

Mas, muitas vezes, se viu um prolongamento de duração diferente, uns 5 minutos e outros um pouco mais de um minuto.

---

Verificar código, talvez mudar alguma coisa:

Portanto, e amarrar tudo à hora GMT. Tem a diferença de horário local e horário do servidor, e você pode entender imediatamente em quantos casos de capotamento. E 5 minutos ou 1, eu acho que não há diferença significativa. Demorar 5 minutos para todos.

 
Alexey Viktorov:

Portanto, amarre tudo à hora GMT. Obtenha a diferença entre a hora local e a hora do servidor, e você pode compreender imediatamente quanto tempo é o prolongamento. E 5 minutos ou 1 não me parece que haja muita diferença. Demorar 5 minutos para todos.

Como sua opção é melhor ou mais confiável?

Se você puder, mostre-me o código!
 
Vitaly Muzichenko:

Como o seu é melhor, ou mais confiável?

Talvez nem um pouco. Eu não segui seus códigos. Apenas dando minha opinião.

 

Vitaly Muzichenko:

Se você puder, mostre-me o código!

Você está fingindo?

 
Alexey Viktorov:

Talvez não seja nada. Eu não tenho seguido seus códigos. Apenas dando minha opinião.

Aqui está tudo em um só posto:

Você precisa selecionar a entrada do spread durante o rollover para que a EA não negocie com o spread estendido.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos

Vitaly Muzichenko, 2021.02.11 14:04

Nunca tinha encontrado um código assim antes. De alguma forma, nunca vi que o capotamento fosse alguém em um momento diferente, sempre tudo em um só - às 22-00 GMT, embora eu possa estar errado.

Mas, muitas vezes, se viu um prolongamento de duração diferente, uns 5 minutos e outros um pouco mais de um minuto.

---

Verifique o código, talvez você possa mudar alguma coisa:

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false); // ролловер
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false); // собираем спред на 500 тиках
   return(res>_sp?true:false);
}

 
Vitaly Muzichenko:

Aqui está tudo em uma mensagem:

Precisamos eliminar a entrada do spread durante o rollover para que a EA não negocie no spread estendido.


Nenhuma negociação durante uma hora inteira?

   if(dt.hour==22) return(false); // ролловер

Ou você entendeu mal alguma coisa?

 
Vitaly Muzichenko:

Aqui está tudo em uma mensagem:

Precisamos selecionar a entrada do spread durante o rollover, para que a EA não negocie no spread estendido.


estamos apenas hipoteticamente proibindo algum tipo de registro de divulgação (arquivo, banco de dados) especificamente no rollover?

 
Alexey Viktorov:

Nenhuma troca por uma hora inteira?

Ou você entendeu mal alguma coisa?

Isso mesmo, durante uma hora inteira depois, a propagação é ampliada. E antes do capotamento em 5 minutos, ele também é ampliado em alguns lugares.

 
Alexey Viktorov:

Nenhuma troca por uma hora inteira?

Ou eu entendi mal alguma coisa?

No entanto, ele pode ser definido assim:

void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",res );
   } else Comment( "false: ",sp,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  static int ts=0;
  static long tc=0;
  TimeGMT(dt);
   if(dt.hour==22 && res<_sp) return(false); // Если 1 час после ролловера спред упадёт до нормального - торгуем
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   if(tc<500) return(false);
   return(res>_sp?true:false);
}

Isto deve funcionar corretamente.

 
Vitaly Muzichenko:

Você poderia, no entanto, prescrevê-lo desta forma:

Isso deve funcionar.

Engraçado) Não deveria)

Se a batalha é para - comércio com um spread normal, basta colocar seu "limite" na entrada e simplesmente ignorar o comércio se o spread estiver acima do limite.

As espátulas podem ser esticadas por endro sem capotamento.