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

 
Mikhail Mishanin:

Se substituirmos o "valor de tempo" pela diferença entre o novo tempo e o último tempo calculado?

Ou seja, saberemos que há um novo tempo:

-desde o novo dia

-de uma nova semana

-ou com uma diferença de mais do que o tempo especificado.

Eu não tenho idéia de como aplicar isto!


No screenshot rollover e spread widening às 22-00, na maioria dos outros negócios às 00-00, é 1 hora depois - spread widening.

Como posso descobrir programmaticamente quando o rollover é, sem limitar o programa ao tempo nos parâmetros de entrada?

---

P.S. Este código se comporta bem, mas com a condição de ser executado 500 ticks antes do capotamento

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
  // Comment( res,"=",tc );
   if(tc>500 && res*3<_sp) return(false); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Eu não tenho idéia de como aplicar isto!


No screenshot rollover e spread widening às 22-00, na maioria dos outros negócios às 00-00, é 1 hora depois - spread widening.

Como posso descobrir programmaticamente quando o rollover é, sem limitar o programa ao tempo nos parâmetros de entrada?

---

P.S. Este código se comporta bem, mas sob a condição de que seja executado 500 ticks antes do capotamento

O motivo do alargamento do spread por negociação é a abertura do pregão, ou seja, o "dumping" de um grande número de ordens para processamento, e a incerteza de como (a que preço) tudo "vai se resolver". A negociação assegurará e ampliará a propagação. Você só precisa atrasar o tempo a partir do fim/ começo da sessão de negociação.

 
Mikhail Mishanin:

A razão para o alargamento do spread por negociação é a abertura do pregão, ou seja, um grande número de ordens sendo colocadas para processamento e, portanto, a incerteza de como (a que preço) tudo "vai se resolver". A negociação assegurará e ampliará a propagação. Basta reservar o tempo do fim/ começo da sessão de negociação.

Sim, mas não está na especificação do instrumento.

É onde o capotamento é às 22:00 horas.

E este é o rollover às 00-00.


 
Vitaly Muzichenko:

Sim, mas não está na especificação da ferramenta

TimeCurrent()-TimeGMT()
 

Espera-se que a versão final leve tudo em conta

MqlDateTime dt;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0, res=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);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Espera-se que a versão final leve em conta todos

duas variáveis

data/hora daLAST=0;

data/hora daOLD=0;


Em cada função que pode "negociar", ou seja, pode obter o tempo do tique

daOLD = daLAST;

daLAST= "tick time" (tempo de carrapato)

Se ( daLAST - daOLD > "intervalo de tempo") - uma nova sessão começou, houve um intervalo de tempo

{

//guarde, use e cancele isto como você quiser

}

 
Mikhail Mishanin:

duas variáveis

data/hora daLAST=0;

data/hora daOLD=0;


Em cada função que pode "negociar", ou seja, pode obter o tempo do tique

daOLD = daLAST;

daLAST="tick time"

Se ( daLAST - daOLD > "intervalo de tempo") - uma nova sessão começou, houve um intervalo de tempo

{

//guarde, use e cancele isto como você quiser

}

Há alguns pares e dilemas onde a sessão asiática pode não ter um carrapato por até alguns minutos, com um tempo de rollover de 21-59 a 22-01, que é mais rápido do que a chegada do carrapato na Ásia.

 
Vitaly Muzichenko:

Há alguns pares e dillings em que na sessão asiática pode não haver carrapato por até vários minutos, com tempo de prorrogação de 21-59 a 22-01, ou seja, mais rápido do que a chegada do carrapato na Ásia.

de volta à estaca zero, então.

Qual é o objetivo? saltar o comércio com um spread exorbitantemente alargado - certo?

Então, provavelmente podemos ignorar o tempo e analisar a propagação propriamente dita.

if Ask - Bid > "threshold" - permite rastreamento/acumulação.

sePerguntar - Lance < "limiar" - desligue-o ou também acumule-o.

Tal "vaca" parece ser útil para mim também, vou coletar algo assim, vai coletar estatísticas...


E se não houver um carrapato fresco por alguns minutos, será mais razoável pular o(s) primeiro(s) no comércio.

As estatísticas devem ser coletadas em pares específicos e em endro, pois qualquer "curvatura" pode funcionar tanto em "-" quanto em "+".

 
Mikhail Mishanin:

Voltemos então à estaca zero.

Qual é o objetivo? saltar o comércio com um spread exorbitantemente alargado - certo?

Então, provavelmente podemos ignorar o tempo e analisar a propagação propriamente dita.

if Ask - Bid > "threshold" - permite rastreamento/acumulação.

sePerguntar - Lance < "limiar" - desligue-o ou também acumule-o.

Tal "vaca" parece ser útil para mim também, vou coletar algo assim, vai coletar estatísticas...


E se não houver um carrapato fresco por alguns minutos, será mais razoável pular o(s) primeiro(s) no comércio.

As estatísticas devem ser coletadas para determinados pares e dilui, porque qualquer "torção" pode funcionar como um "-" ou "+".

Tudo o que você descreveu faz o código acima, exceto o amarelo - acho que ele é redundante e não está totalmente correto. De alguma forma nunca se encontrou, aquele capotamento foi alguém em outro momento, sempre tudo em um e no mesmo - às 22-00 GMT, embora eu possa estar enganado.

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:

//+------------------------------------------------------------------+
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);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Todos estão à mesma hora - 22h GMT, embora eu possa estar errado.

Você não está errado.