Форум трейдеров: Бинарные опционы & Форекс & CFD & Крипта
Вы не вошли.
Страницы 1
Всем привет. Конечно, по идее нет смысла писать свой код чтобы протестировать стратегию на графиках. Однако мне это было очень нужно, чтобы проверять свои алгоритмы торговли на истории. Использовать Метатрейдер 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)
Offline
Страницы 1