Experts: MarketPredictor - página 2

 

Obrigado pelas dicas, o código está em andamento há 5 dias, resolvi o problema de não definir nenhuma negociação, só quero fazer pequenas atualizações :)

 

Você precisa fazer uma nova iteração

    // Ajustar o alfa com base na volatilidade (ATR)
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // Calcular o ATR
    if(atr > 0.0)
        alpha = atr * 0.1; // Definir alfa proporcional à volatilidade
    else
        alpha = inputAlpha; // Retorno ao valor de entrada se o ATR não estiver disponível

esse código não calculará corretamente o ATR

https://www.mql5.com/pt/docs/indicators/iatr

Valor de retorno

Retorna o identificador de um indicador técnico especificado


Ele retorna o identificador, que é um código, e não retorna o valor ATR

Documentation on MQL5: Technical Indicators / iATR
Documentation on MQL5: Technical Indicators / iATR
  • www.mql5.com
The function returns the handle of the Average True Range indicator. It has only one buffer. Parameters symbol [in] The symbol name of the security...
 
1. Correções de erros:
- Em FFT: a chamada FFT recursiva para matrizes pares e ímpares pode levar a uma recursão infinita se o tamanho da matriz não for um grau de dois.
Devemos nos certificar de que o tamanho da matriz seja de um grau de dois. Isso não é verificado no código atual.
- Na função CalculateFractalComponentFFT:, usamos a FFT, mas não verificamos se N é um grau de dois.
Além disso, após a FFT, usamos apenas os primeiros N/2 elementos, o que está correto, mas o código da FFT tem um erro na indexação ao combinar.
2. Melhorias:
- Na função ExecuteTrade: a verificação da posição aberta usando PositionSelect(_Symbol) não está totalmente correta,
porque essa função retorna verdadeiro se houver alguma posição em um símbolo, mas não necessariamente se ele estiver aberto no momento.
É melhor usar um loop em todas as posições e verificar o número mágico e o símbolo.
- Além disso, em ExecuteTrade, não verificamos se já existe uma posição aberta, portanto, podemos abrir várias posições.
Precisamos limitar a abertura a apenas uma posição (ou usar o número mágico para identificar nossas posições).
- Na função OptimiseParameters:, o cálculo da média móvel pode ser substituído pela função iMA integrada.
- Na função SimulatePrice: usar MathRand() pode não ser o melhor para Monte Carlo; é melhor usar a distribuição normal