.
Дневник разработчика торговой стратегии. Шаг 19. Попытка симуляции стратегии на нейросети.
Автор megabax   
14.05.2014 г.
New Page 1

Дневник разработчика торговой стратегии. Шаг 19. Попытка симуляции стратегии на нейросети.

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


На этом шаге я решил взять исходники из урока "Тесты торговых стратегий на C#. Урок 23. Эксперимент по улучшению существующей стратегии." (этот урок находиться в цикле уроков (Тесты торговых стратегий на C#) и исходники из урока Практика нейронных сетей. Урок 11. Обучение многослойного персептрона, который находиться в цикле уроков Практика нейронных сетей, что бы соединить их начать эксперименты по обучению нейронной сети торговать на бирже.

Для симуляции в программу тестирования стратегий я добавил класс StrategyNeuralNet:

    /// <summary>

    /// Стратегия на нейронной сети

    /// </summary>

    [DisplayName("Нейросеть 1")]

    [Serializable]

    public class StrategyNeuralNet : AbstractSignaler, ITradeSystem, IStrategyEdit

    {

        /// <summary>

        /// Драйвер торгового терминала или эмулятора

        /// </summary>

        public ITerminalDriver driver { get; set; }

 

        /// <summary>

        /// Нейросеть

        /// </summary>

        public NeuralNet net;

 

        /// <summary>

        /// Финансовый инструмент, которым мы торгуем

        /// </summary>

        public string ticker;

 

        /// <summary>

        /// Режим торгов

        /// </summary>

        public string market;

 

        /// <summary>

        /// Объем инструмента, которым торгуем

        /// </summary>

        public int count_trade;

 

 

        /// <summary>

        /// Номер торгового счета

        /// </summary>

        public string account { get; set; }

 

        /// <summary>

        /// Количество свечей, по истечению которых мы переобучаем нейросеть

        /// </summary>

        public int study_limit=100;

 

        /// <summary>

        /// Количество свечей, которые участвуют в расчете сигнала

        /// </summary>

        public int study_count = 30;

 

        /// <summary>

        /// Количество свечей в обучающей матрице

        /// </summary>

        public int study_matrix = 100;

 

... 

Как работает данная стратегия? Очень просто: сначала мы проводим обучение, потом на каждой свече рассчитываем нейросеть и торгуем по ее сигналам. ...

...

... Ну, и наконец, расчет сигнала:

        /// <summary>

        /// Получить сигнал по заданному номеру свечи

        /// </summary>

        /// <param name="index">Номер свечи, начиная с первой, счет идет с нуля</param>

        /// <returns>1 если сигнал на покупку, -1 если на продажу, 0 если нет сигнала</returns>

        public override int GetSignal(int index)

        {

            set_inputs(index);

            net.compute();

            if (net.outputs[0] >= 0.9999) return 1; else return -1;

        }

И так, тестирование. Генерим котировки:

Дневник разработчика торговой стратегии. Шаг 19. Попытка симуляции стратегии на нейросети.

В таблице видно, что они действительно изменяются по синусоидальному  закону:

Дневник разработчика торговой стратегии. Шаг 19. Попытка симуляции стратегии на нейросети.

Создаем стратегию, редактируем нейронную сеть этой стратегии, в ней пока будет всего один слой и один нейрон в слое:

Дневник разработчика торговой стратегии. Шаг 19. Попытка симуляции стратегии на нейросети.

Этот нейрон имеет 120 входов, так как мы у нас в обучение участвуют 30 свечей, пока мы учитываем только 4 поля этих свечей open, close, high, low. Синапсы пока нам не нужны - несчем связывать единственный нейрон.

И так, пробуем проверить и видим, что симуляция идет очень долго. "Ковыряние" в отладчике показало, что нейросеть просто не обучается и алгоритм обучения запускается на каждой свече, а он весьма долгий.

Но это уже следующий шаг. Я долго думал, где же описать этот шаг, в цикле Тесты торговых стратегий на C# или в Дневник разработчика биржевого робота? И вот что я решил: все идеи торговых стратегий, а так же их изменения и результаты тестирования на прибыльность будут публиковать в этом цикле уроков - Дневник разработчика биржевого робота. А вот отчет о процессе отглючивания и улучшение самой программы тестирования буду публиковать в Тесты торговых стратегий на C#. Если у меня возникнет идея улучшить саму нейросеть или провести с ней эксперимент без привязки к бирже - то отчеты об этих действиях буду публиковать в Практика нейронных сетей

Последнее обновление ( 14.05.2014 г. )