Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 3182

 
fxsaber #:

Obrigado, vou tentar os incrementos do MathRand.

Aleksey Nikolayev #:

O mais universal é provavelmente o Monte Carlo.

Parece que tenho uma geração aleatória interessante.

double GetAvgPrice( const MqlTick &Tick )
{
  return((Tick.bid + Tick.ask) / 2);
}

void SetAvgPrice( MqlTick &Tick, const double Price )
{
  const double Spread = (Tick.ask - Tick.bid) / 2;
  
  Tick.bid = NormalizeDouble(Price - Spread, 8);
  Tick.ask = NormalizeDouble(Price + Spread, 8);
  
  return;
}

// Случайный знак приращения средней цены.
bool RandomPrice( MqlTick &Ticks[] )
{  
  const int Size = ArraySize(Ticks) - 1;
  
  if (Size > 0)
  {
    Print("Random price...");
    
    MqlTick PrevTick = Ticks[Size];
    double PrevPrice = GetAvgPrice(PrevTick);
    
    MathSrand((int)TimeLocal());
    
    for (uint i = Size; (bool)i--;)
    {
      const double Diff = GetAvgPrice(PrevTick) - GetAvgPrice(Ticks[i]);
      
      PrevTick = Ticks[i];

      SetAvgPrice(Ticks[i], PrevPrice += !(MathRand() & 1) ? Diff : -Diff);
    }
  }
  
  return(Size >= 0);
}

Na parte superior há um símbolo real, na parte inferior é aleatório.

O RandomPrice pode ser aplicado iterativamente. Os spreads e o tempo são preservados.


Seria correto fazer isso por meio do logaritmo, mas não me preocupei com isso. Se o refinarmos, poderá ser a melhor opção para o Monte Carlo gerar um símbolo aleatório com as características estatísticas necessárias.

 
fxsaber #:

para Monte Carlo é provavelmente a melhor opção para gerar um símbolo aleatório com as características estatísticas desejadas.

Teste de piolho com o mesmo conjunto.

Parte superior - real, parte inferior - aleatório.

Falha.

 

A diferença é que nada é procurado nos resultados da otimização. Ou seja, os cinco primeiros resultados de otimização nunca foram executados no OOS antes.

 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Aprendizado de máquina na negociação: teoria, modelos, prática e algo-trading

Valeriy Yastremskiy, 2023.08.17 10:44 AM

Parece lógico que a probabilidade de falsos positivos e negativos diminui, mas para mim não é uma panaceia contra erros.

Você acha que deve confiar mais no modelo train_optim + test_forward do que no (train+test)_optim?

 
Aleksey Vyazmikin #:

Não há erro, não há erro, não há erro.

Peguei outra amostra - 47% das unidades e exemplos 5 vezes menos - depois de algumas passagens, posso dizer que ele já encontrou muitos segmentos quânticos.

O que mais prestei atenção foi a semelhança entre o alvo inicial e o alvo gerado - eles são 49% semelhantes - talvez seja necessário definir algum limite aqui - não mais do que 30% de semelhança? Alguma ideia?

Fiz um gráfico - se houver uma correspondência "-1", se não houver correspondência, então "+1", obtive esse equilíbrio.

Há muitas tendências nele, o que você acha?

 
fxsaber #:

A parte superior é real, a inferior é aleatória.

Fiz a otimização com as mesmas configurações no símbolo real e no símbolo gerado.


Real.


Aleatório.


Ele não é treinado no Random.

 
fxsaber #:

Fiz uma otimização com as mesmas configurações no personagem real e no personagem gerado.


Real.


Aleatório.


Não treinado no Random.

Quantas vezes o símbolo aleatório foi gerado?) Obviamente, quanto mais longa a sequência, mais vezes ela precisa ser gerada para funcionar também.
 
fxsaber #:

A diferença é que nada é pesquisado nos resultados da otimização. Ou seja, os cinco primeiros resultados de otimização nunca foram executados no OOS antes.

Não sei como simplificar isso.

Você escolhe as melhores variantes "manualmente" no OOS após a otimização no teste e isso NÃO é adequado...

E se o algoritmo seleciona as melhores variantes no OOS após a otimização, ele já está se ajustando... Por quê?

Escolher as melhores opções/variantes do conjunto completo de opções é otimização.... Não importa se você faz isso manualmente ou por meio de um algoritmo.

Talvez você só tenha trabalhado com um testador na MT e pense um pouco de forma estereotipada sobre a otimização em si e as formas de sua aplicação, e é por isso que temos alguns mal-entendidos


 
fxsaber #:

Fiz uma otimização com as mesmas configurações no personagem real e no personagem gerado.


Real.


Aleatório.


Ele não é treinado no Random.

O Random corresponde às características do preço? Média, desvio padrão, covariância?
 

Maxim Dmitrievsky #:
Сколько раз был сгенерирован рандом символ?)

Primeiro.

é óbvio que quanto mais longa a sequência, mais vezes ela precisa ser gerada para trabalhar nela também.

Não entendo essa afirmação. O que significa as duas opções a seguir?

  1. Você precisa executar muitas iterações de randomização para que ela funcione.
  2. Se você criar muitos caracteres aleatórios, a probabilidade de haver um que funcione entre eles aumenta.

Coisas aparentemente simples, pois mesmo em símbolos reais diferentes o mesmo TC não funciona.

O algoritmo de randomização é o seguinte:

  1. Um histórico real de ticks é obtido.
  2. Uma sequência de incrementos do preço médio ((bid+ask)/2) é feita a partir dele.
  3. Nessa sequência, cada termo é multiplicado aleatoriamente por +1 ou -1.
  4. Um novo histórico de ticks é coletado da sequência de incrementos obtida, em que o tempo e o spread coincidem com o ponto 1.
  5. O novo histórico de ticks é gravado em um símbolo personalizado.
Ou seja, algum símbolo real é randomizado. Você pode aplicar o item 3 quantas vezes quiser. Se, após o item 5, todos os cinco pontos forem repetidos, será o mesmo que repetir o item 3 duas vezes.