#1 20.12.2017 00:54:39

Elektro Yar
Участник
Регистрация: 11.12.2017
Кол-во сообщений: 85

Тестирование стратегии на С++

Всем привет. Конечно, по идее нет смысла писать свой код чтобы протестировать стратегию на графиках. Однако мне это было очень нужно, чтобы проверять свои алгоритмы торговли на истории. Использовать Метатрейдер 4 для меня было менее удобным для этих целей, так как быстрее и проще было написать все на С++. Может кому пригодятся эти наработки, хотя предупреждаю сразу, код не "чистый". Ссылка на скачивание архива

Содержимое архива
В архиве есть некоторые индикаторы (SMA, EMA, NoLagMa, WMA, RSI, ERSI(использует WMA), Боллинджер, FATL, SATL и другие), они находятся в файлах indicator.cpp, indicator.hpp, indicator2.cpp, indicator2.hpp, NoLagMa.cpp, NoLagMa.hpp и пр.

Графики можно делать с помощью функций из файла oscilloscope.cpp, но для этого нужен будет еще OpenCV

Оценить торговлю по коэффициентам можно с помощью класса в файле StrategyEffectiveness.cpp

Файл train.cpp содержит класс для считывания csv файлов. Каждая строка должна иметь примерно такой вид (2017.02.17,22:16,1.00367,1.00372,1.00359,1.00368,71) (дата, время, open, high, low, close, vol, если ничего не путаю)

Вот пример как это все может работать:

#include "indicator.hpp"
#include "indicator2.hpp"
#include "oscilloscope.hpp"

std::string namePair = "..//..//train3//EURUSD1.csv";
BinaryTrain testData(namePair); // класс содержит исторические данные загруженные из файла
Indicator::Window WindowCC(60); // запоминает свечки и значения индикаторов, которые рисуются поверх графика
Indicator::SMA iSMA(10); // индикатор SMA

for(int k= 0; k < testData.close.size() - expTime; k++) {
            double& close = testData.close[k]; // цена закрытия и т.д.
            double& open = testData.open[k];
            double& low = testData.low[k];
            double& high = testData.hight[k];
            double& closeFuture = testData.close[k + expTime]; // цена закрытия из будущего

            double outSMA = iSMA.update(close);

            WindowCC.update(open,high,low,close); // записываем данные свечей графика
            WindowCC.setIndicator(outSMA); // записываем значение индикатора SMA
            std::vector<CandlesType> dataCC = WindowCC.getCandlesType(); // получаем данные для графика
            viewCandleGraph("history",dataCC,2); // показываем график
           
}

Все это нужно чтобы в итоге провести глубокий анализ стратегии, посмотреть ее эффективность в целом, в конкретный час за 8 месяцев, в конкретные дни недели и т.д. Потому что если стратегия за неделю сделала сделок 100 и она показала эффективность 70%, это вовсе не гарантия, а скорее всего случайность. Также можно убедиться в неработоспособности всяких Мартингейлов на большом объеме данных.

Отредактировано Elektro Yar (20.12.2017 01:03:11)

Вне форума

Понравилось:

Board footer