Советники: MarketPredictor - страница 2

 

Спасибо за советы, над кодом работаю уже 5 дней, проблему с отсутствием сделок решил, просто хочу сделать небольшие обновления :)

 

Вам нужно сделать новую итерацию

    // Корректировка альфы на основе волатильности (ATR)
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // Рассчитать ATR
    if(atr > 0.0)
        alpha = atr * 0.1; // Установите альфу пропорционально волатильности
    else
        alpha = inputAlpha; // Возврат к входному значению, если ATR недоступен

этот код не сможет правильно рассчитать ATR

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

Возвращаемое значение

Возвращает хэндл указанного технического индикатора


Возвращает хэндл, который является кодом, и не возвращает значение 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. Исправление ошибок:
- В функции FFT: Рекурсивный вызов FFT для массивов even и odd может привести к бесконечной рекурсии, если размер массива не является степенью двойки.
Мы должны убедиться, что размер массива является степенью двойки. В текущем коде это не проверяется.
- В функции CalculateFractalComponentFFT: мы используем FFT, но не проверяем, что N является степенью двойки.
Также, после FFT мы используем только первые N/2 элементов, что правильно, но в коде FFT есть ошибка в индексации при объединении.
2. Улучшения:
- В функции ExecuteTrade: проверка на открытую позицию с помощью PositionSelect(_Symbol) не совсем корректна,
потому что эта функция возвращает true, если есть любая позиция по символу, но не обязательно, что она открыта в данный момент.
Лучше использовать цикл по всем позициям и проверять magic number и символ.
- Также, в ExecuteTrade мы не проверяем, есть ли уже открытая позиция, поэтому можем открыть несколько позиций.
Нужно ограничить открытие только одной позицией (или использовать magic number для идентификации наших позиций).
- В функции OptimizeParameters: расчет movingAverage можно заменить на встроенную функцию iMA.
- В функции SimulatePrice: использование MathRand() может быть не самым лучшим для Monte Carlo, лучше использовать нормальное распределение