image

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

Исходные данные


Прежде чем перейти к основному содержанию статьи, необходимо пояснить некоторые моменты.

  • Важно подчеркнуть, что статья посвящена прогнозированию направления движения цены. Это означает, что алгоритм не знает, на сколько именно пунктов цена пойдет вверх или вниз.
  • Прогноз происходит по цене закрытия, другие цены (high, low, open) не учитываются.
  • Таймфрейм 1 минута был выбран потому, что эффективность прогнозирования направления движения цены почти не возрастает с увеличением таймфрейма, в то время как число сделок падает в разы. По этой причине лучше использовать минутный график — это позволяет совершить наибольшее количество сделок, а также собрать наиболее объемную статистику. При этом важно помнить, что из-за наличия спреда на рынке Форекс большое число верно спрогнозированных направлений движения цены вовсе не означает наличие прибыли.
  • Нейросети не использовались, так как практика показала, что научить их прогнозировать движение цены сложнее, чем кажется на первый взгляд. Поэтому было решено сделать торговую систему на базе индикаторов для технического анализа.
  • Так как данные котировок минутного графика валютных пар, которые находятся в свободном доступе в интернете, обычно имеют баги, данные котировок были получены из терминала MetaTrader.
  • Весь код был написан на C++, так как я не умел программировать MQL C++ удобнее языка MQL и быстрее работает. MQL удобен лишь тем, что в нем уже есть функции для работы с графикой, есть готовые индикаторы, можно тут же получить данные котировок и произвести торговые операции. В остальном же MQL менее удобен для проведения исследований, и некоторые его достоинства легко перекрываются собственным программным кодом.

На что способна простая стратегия?


Для начала проверим простую стратегию, которая использует индикаторы RSI и Bollinger Bands. Данная стратегия показала наилучшие результаты по сравнению со скользящими средними или использованием свечных паттернов и различных сочетаний других индикаторов. Данные тестирования по другим стратегиям приводить не буду (так как перебрал их за полгода исследований великое множество).

Возьмем 25 валютных пар и составим статистику работы стратегии за 1.000.000 минут. Код программы приведен под спойлером, его также можно просмотреть здесь.

Код для проверки стратегии
int main() {
    std::vector<std::string> vPairName(25);
    vPairName[0] = "..//..//train2018//EURAUD1.csv";
    vPairName[1] = "..//..//train2018//EURJPY1.csv";
    vPairName[2] = "..//..//train2018//EURGBP1.csv";
    vPairName[3] = "..//..//train2018//EURCAD1.csv";
    vPairName[4] = "..//..//train2018//EURNZD1.csv";
    vPairName[5] = "..//..//train2018//EURCHF1.csv";
    vPairName[6] = "..//..//train2018//EURUSD1.csv";

    vPairName[7] = "..//..//train2018//AUDCAD1.csv";
    vPairName[8] = "..//..//train2018//AUDNZD1.csv";
    vPairName[9] = "..//..//train2018//AUDCHF1.csv";
    vPairName[10] = "..//..//train2018//AUDJPY1.csv";
    vPairName[11] = "..//..//train2018//AUDUSD1.csv";

    vPairName[12] = "..//..//train2018//CADCHF1.csv";
    vPairName[13] = "..//..//train2018//CADJPY1.csv";

    vPairName[14] = "..//..//train2018//GBPAUD1.csv";
    vPairName[15] = "..//..//train2018//GBPCHF1.csv";
    vPairName[16] = "..//..//train2018//GBPJPY1.csv";
    vPairName[17] = "..//..//train2018//GBPUSD1.csv";

    vPairName[18] = "..//..//train2018//NZDCAD1.csv";
    vPairName[19] = "..//..//train2018//NZDJPY1.csv";
    vPairName[20] = "..//..//train2018//NZDUSD1.csv";

    vPairName[21] = "..//..//train2018//USDCAD1.csv";
    vPairName[22] = "..//..//train2018//USDCHF1.csv";
    vPairName[23] = "..//..//train2018//USDJPY1.csv";

    vPairName[24] = "..//..//train2018//CHFJPY1.csv";

    int expTime = 3; // время экспирации
    double start = 0.0; // начало данных
    double stop = 1.0; // конец данных

    StrategyEffectiveness iEffAll; // эффективность стратегии по всем валютным парам

    for(int n = 0; n < (int)vPairName.size(); n++) {
        CurrencyQuote TestData(vPairName[n],
                               CurrencyQuote::DTYYYYMMDD_TIME_OPEN_HIGH_LOW_CLOSE_VOL);

        int startPos = TestData.close.size() * start; // начало данных
        int stopPos = TestData.close.size() * stop; // конец данных
        std::cout << "Source: " << vPairName[n]
            << " data size: " << TestData.close.size() << std::endl;

        StrategyEffectiveness iEff; // эффективность стратегии
        Indicators::BollingerBands iBB(20, 2.0); // индикатор боллинджер
        Indicators::WRSI iRSI(5); // индикатор RSI
        const double RSI_UP = 70; // верхняя граница индикатора RSI
        const double RSI_DN = 30; // нижняя граница индикатора RSI
        for(int i = startPos; i < stopPos - expTime; i++) {
            // цена закрытия бара
            double& close = TestData.close[i];
            // цена закрытия бара из будущего на expTime баров вперед
            double& closeFuture = TestData.close[i + expTime];
            // получим данные индикатора Bollinger Bands
            iBB.updata(close);
            // получим данные индикатора RSI
            double rsiData = iRSI.updata(close);
            // состояние торговой стратегии,
            // 0 - нет прогнозов, 1 или -1 - прогноз с направлением вверх или вниз
            int stateStrategy = 0;
            if(rsiData > RSI_UP && close > iBB.tl) {
                stateStrategy = -1;
            } else
            if(rsiData < RSI_DN && close < iBB.bl) {
                stateStrategy = 1;
            }

            if(stateStrategy == 1) {
                if(closeFuture > close) {
                    iEff.setWin(); iEffAll.setWin();
                } else {
                    iEff.setLoss(); iEffAll.setLoss();
                }
            } else
            if(stateStrategy == -1) {
                if(closeFuture < close) {
                    iEff.setWin(); iEffAll.setWin();
                } else {
                    iEff.setLoss(); iEffAll.setLoss();
                }
            }
        } // for i
        std::cout << "eff: " << iEff.getEff()
            << " num: " << (iEff.win + iEff.loss) << std::endl;
        std::cout << "eff all: " << iEffAll.getEff()
            << " num: " << (iEffAll.win + iEffAll.loss) << std::endl;
    } // for n

    return 0;
}


image

После того как тестирование стратегии закончено, мы получаем 2.418.153 сделок и 54% эффективности прогнозирования направления цены. Какие выводы можно сделать? Первый вывод, что цена не совсем случайна, ведь мы получили не 50% верных прогнозов, а 54%. Большое количество сделок (больше двух миллионов) говорит о том, что статистика отражает реальную ситуацию, это средний результат по всем 25-ти валютным парам за 2,5 года тестирования (1.000.000 минут — это 694,4 рабочих дня, выходные дни в торговле не участвуют).

Однако, 54% — это не самый лучший результат. К тому же неизвестно, как именно эти 54% распределены во времени. Вдруг в какие-то часы торговли эффективность выше, а в какие-то часы ниже? Вопрос о том, какие валютные пары лучше прогнозируются, а какие хуже, рассмотрим позже.

Распределение эффективности прогнозирования цены по торговым часам


Для определения эффективности торговой стратегии по торговым часам запишем значения эффективности прогнозирования для каждой минуты дня и посмотрим средний результат за весь период тестирования, а также разобьем все время тестирования на два периода, чтобы убедиться, что тенденция примерно одинаковая и не меняется со временем.

Для первого периода тестирования получим следующую картину:

image
Статистика эффективности и количества сделок по минутам дня для первого периода тестирования

Для второго периода тестирования получим почти тоже самое:

image
Статистика эффективности и количества сделок по минутам дня для второго периода тестирования

На приведенных изображениях синяя линия обозначает эффективность торговой стратегии в данную минуту. Голубая линия обозначает сглаженную скользящей средней эффективность с периодом 60. Зеленая линия обозначает уровень числа сделок в данную минуту относительно максимального числа сделок. Желтая линия обозначает уровень 0. Белые вертикальные линии разделяют промежутки длиной в один час. Белые горизонтальные линии обозначают уровни эффективности 60% и 50%. Время на графике отличается от Московского времени — минус 2 часа.

Проанализируем график. По сглаженной линии эффективности видно, что с 3:00 эффективность возрастает и остается высокой до 7:00, дальше она падает и возрастает ближе к 21:00. С 22:00 до 1:00 эффективность особенно высокая. Кривая средней эффективности зависит от выбранного параметра — периода скользящей средней. Эмпирическим путем было выявлено, что данную торговую стратегию при использовании оптимизации ее параметров лучше применять в 5:00 и 6:00, а в вечернее время — с 21:00 до 22:00. Некоторые валютные пары могут показывать хорошие результаты и в другое время. Ночное время с 22:00 до 1:00 дальше в статье для использования не рассматривается, хотя оно дает самый высокий винрейт. Торговлю в данное время можно осуществлять только на Форексе при наличии очень низкого спреда. Брокеры же бинарных опционов не дают заработать в данное время совсем, либо снижая процент выплат, либо закрывая торговлю.

Создаем самооптимизирующуюся торговою систему


Приводить исходный код самооптимизирующейся торговой системы я не буду, но опишу, как она работает.

Идея самооптимизации заключается в том, чтобы перед началом торговли подбирать оптимальные параметры индикаторов, чтобы стратегия давала наиболее высокую эффективность прогнозирования. Параметры индикаторов можно подобрать, тестируя стратегию на исторических данных. Однако, на практике не все так просто, приходится сталкиваться со следующими проблемами:

  • Может возникнуть переоптимизация, и стратегия начнет давать плохие результаты во время торговли. При этом на участке истории, где она была оптимизирована, результаты прогнозирования будут хорошими;
  • Чем больше участок истории, на котором мы оптимизируем стратегию, тем она получается устойчивее, но эффективность прогнозирования может начать падать, так как, увеличивая период тестирования, мы начинаем затрагивать большое число состояний рынка, и стратегия настраивается не самым оптимальным образом. Уменьшая период тестирования, мы рискуем создать переоптимизацию, стратегия может настроиться на конкретное состояние рынка и стать не способной к прогнозированию во время реальной торговли;
  • Процесс оптимизации может длиться очень долго и потреблять большие ресурсы системы для вычислений.

Для борьбы с переоптимизацией обычно период оптимизации разделяют на две части: in sample period и out sample period. На участке in sample period мы находим оптимальные параметры, а на out sample period мы проверяем стратегию на эффективность прогнозирования. Если стратегия показывает хорошие результаты на out sample period, значит найденные параметры индикаторов можно использовать. Также стоит отметить, что параметры индикаторов подбираются с определенным шагом, который не стоит брать минимально возможным, так как чрезмерная детализация параметров индикаторов тоже может привести к переоптимизации. Кроме того, такая детализация потребляет много вычислительных ресурсов и при этом не дает никакого результата.

Определить эффективность стратегии можно по изменению кривой баланса при помощи различных коэффициентов. Например, можно использовать коэффициент Шарпа, математическое ожидание прибыли и др.

Во время исследований последних 8 месяцев исторических данных котировок валютных пар эмпирическим путем было выявлено, что для оптимизации приведенной в статье стратегии лучше всего брать несколько дней (in sample period), и при этом столько же дней — для предварительного тестирования стратегии (out sample period). Чтобы ускорить процесс оптимизации, все данные индикаторов записываются, и поэтому их не приходится вычислять повторно. Процесс оптимизации происходит каждый день перед началом торговли. Оптимизация на участках истории происходит только в торговые часы, время между торговыми часами в оптимизации не участвует. Оптимизация периода тестирования и шага между периодами оптимизации не происходит, так как это занимает много вычислительных ресурсов.

Проведем тестирование алгоритма за 34 месяца в следующие торговые часы по Московскому времени: 7:00 и 8:00.

Эффективность самооптимизирующейся торговой системы в 7:00 и 8:00
image

Торговая система с самооптимизацией показала среднюю эффективность прогнозирования 57,2% на 103.458 сделок. Для сравнения: стратегия без оптимизации параметров показывает эффективность прогнозирования 54,7% и 195.637 сделок на тех же данных для тестирования. Сделок у самооптимизирующейся торговой системы стало меньше почти в 2 раза, зато эффективность прогнозирования повысилась в среднем на 2,5%.

Стоит отметить, что эффективность прогнозирования 57,2% является средней, отдельно взятые валютные пары могут иметь эффективность прогнозирования выше, например, AUDCAD имеет 58,3% и 4.195 сделок, а EURCHF имеет 61,8% и 3.988 сделок. Более подробно про эффективность торговли на конкретных валютных парах можно посмотреть выше в таблице под спойлером.

Вечерние часы торговли 22:00 и 23:00 показывают следующие результаты: эффективность прогнозирования 56,3% и 105.648 сделок. Простая стратегия дает в это же время 54,2% и 195.195 сделок. Итого общий прирост эффективности составил 2,1%.

Наилучшие результаты в 22:00 и 23:00 показали следующие валютные пары:

  • AUDCAD 58,3% 4.365
  • AUDCHF 57,2% 4.153
  • AUDNZD 58,0% 4.107
  • CHFJPY 57,7% 4.609
  • EURCHF 58,6% 3.966
  • EURGBP 58,3% 4.100
  • EURJPY 58,1% 4.399
  • EURNZD 57,0% 4.760
  • GBPCHF 58,1% 4.606
  • GBPJPY 58,1% 4.789

Ночью, в 0:00 и 1:00 по Московскому времени, эффективность еще выше. Средняя эффективность по всем валютным парам составила 59,4%, сделок 106.540.

Эффективность самооптимизирующейся торговой системы в 0:00 и 1:00
  • AUDCAD 60,5% 4.494
  • AUDCHF 62,5% 4.450
  • AUDJPY 59,5% 4.362
  • CADCHF 60,5% 4.250
  • CHFJPY 60,4% 4.569
  • EURAUD 61,1% 4.378
  • EURCHF 63,3% 4.337
  • EURGBP 62,3% 4.303
  • EURJPY 59,9% 4.263
  • GBPAUD 61,0% 4.524
  • GBPCHF 63,4% 4.256
  • GBPJPY 59,4% 4.075
  • GBPUSD 59,3% 3.815
  • USDCHF 59,0% 3.609


Одной из самых стабильных и хорошо прогнозируемых валютных пар оказалась EURCHF. Она показывает высокие результаты в любое торговое время, приведенное в статье. При тестировании на периоде с 09.11.2012 до 13.04.2018 в 7:00 и 8:00 эта валютная пара показала винрейт 62,4% и 7.861 сделок.

Тестирование торговли самооптимизирующегося алгоритма на исторических данных


Протестируем торговлю при использовании самооптимизирующегося алгоритма в 7:00 и 8:00 по Московскому времени. Для тестирования была взята случайная валютная пара, которая показывает хорошие результаты в данное время — EURCAD. Тестирование происходит одновременно для Форекс и для бинарных опционов. Возьмем исторические данные за 2 года 8 месяцев (с 08.06.2015 по 07.02.2018). Так как мы используем скальпинг, необходимо, чтобы спред был как можно меньше. Были использованы следующие параметры. Кредитное плечо: 1000. Спред равен 0,5 пунктов. Ордер для Форекса имеет тейк профит и стоп лосс, которые равны 3 и 30 пунктов соответственно. Ордер сначала проверяется на срабатывание по стоп лоссу, затем проверяется срабатывание тейк профита. Размер контракта всегда составляет 1% от депозита. Начальный депозит: 100.000. Для примера возьмем размер выплаты брокера 84%, а не максимальный встречающийся — 90%. Размер ставки составляет всегда 1% от депозита. Ниже представлено видео с тестированием торговли.


Можно сделать вывод, что в долгосрочной перспективе торговля приносит прибыль, однако не каждый месяц является прибыльным, несмотря на то, что торговля ведется на минутном графике. Временные же просадки депозита в последствии компенсируются, когда рынок войдет в следующую фазу.

Фильтруем сигналы самооптимизирующейся торговой системы


Самооптимизация позволяет заметно повысить эффективность прогнозирования. Даже если кажется, что прирост в 2% — это мало, на графике баланса депозита 2% эффективности вносят существенный вклад. Однако результаты торговой системы с самооптимизацией — это не предел эффективности прогнозирования. Сигналы можно фильтровать различными способами, например, использовать уровень индикатора ADX, ATR или StdDev, или научить нейросеть определять ложные сигналы. Но все гениальное просто. Поэтому попробуем, например, до 15 числа каждого месяца вести подсчет верных прогнозов и, если эффективность прогнозирования в начале месяца превышает некоторый порог, после 15 числа начинать торговать.

Для торговли в 7:00 и 8:00 по Московскому времени получаем среднюю эффективность прогнозирования 58,6% и 31.551 сделок. После фильтрации сделок стало в 3 раза меньше, а средняя эффективность повысилась на 1,4%. Если посмотреть статистику отдельно взятых валютных пар, мы увидим, что появилось гораздо больше валютных пар, дающих эффективность прогнозирования от 60% и выше, а те валютные пары, которые изначально показывали плохие результаты, лучше не стали.

  • AUDCAD 59,4% 1.678
  • AUDCHF 60,8% 1.222
  • AUDJPY 57,3% 1.128
  • AUDUSD 58,6% 1.266
  • CADCHF 61,3% 1.374
  • CADJPY 57,4% 888
  • CHFJPY 59,6% 1.520
  • EURAUD 60,0% 1.343
  • EURCAD 60,4% 1.705
  • EURCHF 63,4% 1.782
  • EURGBP 61,5% 1.180
  • EURJPY 57,9% 1.136
  • EURNZD 58,3% 1.324
  • GBPAUD 58,1% 1.306
  • GBPCHF 62,4% 1.062
  • GBPJPY 58,8% 1.357

В 22:00 и 23:00 торговая система с фильтрацией показала эффективность прогнозирования 56,4% и 33.260 сделок. Прироста средней эффективности почти не произошло, а сделок стало также в 3 раза меньше. Однако, после фильтрации некоторые валютные пары стали обладать гораздо большей эффективностью прогнозирования.

  • AUDCAD 58,3% 1.686
  • AUDNZD 57,9% 1.458
  • CHFJPY 58,3% 1.164
  • EURCHF 60,4% 1.475
  • EURGBP 61,6% 1.166
  • EURNZD 57,2% 1.423
  • GBPAUD 58,7% 1.253
  • GBPCHF 57,9% 1.919
  • GBPJPY 57,9% 1.841

Программа для визуализации сигналов


Для того чтобы удобно использовать самооптимизирующуюся торговую систему, была создана графическая оболочка. Данные котировок программа получает в режиме реального времени от торгового терминала MetaTrader 4.

Внешний вид программы
image
Главное окно для отображения прогнозов и котировок валютных пар
image
Окно для настроек программы
image
Окно для тестирования

Данную программу можно использовать для ручной торговли. Для удобства тестер торговли был встроен в саму программу, а также добавлены настройки самооптимизирующегося алгоритма. Скачать программу, которая позволяет тестировать валютные пары и прогнозировать движение цены на EURGBP, можно по ссылке.

Итоги


Существуют различные мнения касательно трейдинга. Первое мнение, что рынок абсолютно случаен, и больше чем в 50% случаев удачных прогнозов быть не может. Второе мнение, что нормально торговать на рынке могут только люди, а любые автоматические системы могут лишь сливать депозиты. Как мы могли убедиться, оба эти мнения не являются абсолютно верными. В данной статье тестирование простой стратегии показало, что совершив 2.418.153 сделок можно получить 54% верных прогнозов, что еще не является гарантией получения дохода, но, во всяком случае, говорит о неполной случайности рынка. Касательно же второго мнения: автоматические торговые системы, по сравнению с трейдером, имеют как свои минусы, так и свои плюсы. Если человек может видеть на графике котировок линии поддержки и сопротивления, определять линии тренда, распознавать фигуры технического анализа или чувствовать рынок, наблюдая за тем, как движется цена, то торговые системы пока что плохо справляются с данными задачами. Тем не менее, в отличии от человека, торговая система может иметь большую статистику работы, по которой можно судить о потенциальной прибыли и убытках. Торговые системы могут обрабатывать большой объем данных по различным индикаторам и использовать закономерности, которые не может использовать человек, ввиду ограничений по воспринимаемому объему информации. Поэтому алготрейдинг, в случае наличия эффективного алгоритма, дает больше шансов на успешную торговлю, нежели ручная торговля на рынке.

Приведенный алгоритм прогнозирования на основе самооптимизации торговой стратегии не является единственным возможным способом прогнозирования. Тестирование на истории показало, что применять данный алгоритм для торговли на некоторых валютных парах можно. Несмотря на то, что в краткосрочной перспективе возможны просадки депозита, в долгосрочной перспективе программа показала стабильную прибыль.

P.S.
Для самостоятельного использования можно использовать индикаторы и другие функции из моего репозитория.

Комментарии (52)


  1. alexhott
    15.04.2018 19:48

    десять лет назад я подгрузил данные за 3 года и долго и упорно гонял на них разные стратегии и испытывал разные способы самооптимизации.
    в Итоге удалось добиться стабильного роста баланса на 30 процентов за три года (это меньше ставки депозита на тот момент).
    Любые изменения параметров, приводящие к росту более 30 процентов делали систему неустойчивой и она рано или поздно сливала весь баланс.
    ЗЫ
    график далеко не так случаен как вы думаете, только неслучаен он далеко не для всех.


    1. ShadowTheAge
      17.04.2018 22:24

      Тактика «Купить доллар и не продавать»?


  1. vis_inet
    15.04.2018 19:59

    Какой размер спреда использовали при расчётах?


    1. ELEKTRO_YAR Автор
      15.04.2018 21:33

      На видео 0.5 пунктов.


  1. AndyPike
    15.04.2018 20:06
    +1

    Ни сколько ни трейдер, но слежу в плане математики и анализа данных. Это именно та интересная тема, где можно найти золотую жилу на основе анализа уже свершившихся данных, на основе того, что было до этого. Особенно, не играя в живую своими деньгами, а научив.

    Очень похвально. Более 50% уже само за себя говорит, а 60% — действительно успех.

    Вы хорошо заметили корреляцию со временем — это очень к месту. С утра Токио/Пекин, Москва, потом Munchen/London, потом Washington/San Francisco. У каждого свои стратегии, и очень разные. И разное рабочее время! Они же тоже расслабляются/устают в конце рабочего дня.

    Вот это и их слабое место, по-моему.

    Если человек может видеть на графике котировок линии поддержки и сопротивления, определять линии тренда, распознавать фигуры технического анализа или чувствовать рынок, наблюдая за тем, как движется цена, то торговые системы пока что плохо справляются с данными задачами.

    Он уже устал и хочет доехать до дома и лечь спать. Он уже час об этом думает. Всё, что мог заработать, уже заработал.


    1. WinPooh73
      16.04.2018 12:18

      > Они же тоже расслабляются/устают в конце рабочего дня.

      Кто расслабляются и устают? Алгоритмы торговых роботов?


  1. SADKO
    15.04.2018 20:17
    +1

    Важно подчеркнуть, что статья посвящена прогнозированию направления движения цены. Это означает, что алгоритм не знает, на сколько именно пунктов цена пойдет вверх или вниз.
    Прогноз происходит по цене закрытия, другие цены (high, low, open) не учитываются.

    Это означает практическую бесполезность и непонимание автором некоторых некоторых базовых принципов…
    … при такой формулировке задачи, угадать направление, простое подбрасывание монеты даст 50% угадываний состояния другой монеты, но у нас не совсем монета, даже если гадать на цене закрытия минуты, бывают моменты движения, по этому даже простое предположении о том, что это движение продолжится и дальше, даст нам более 50% угадываний и этот процент будет тем более, чем больше трэнда было в истории…
    … ну и что нам это знание даёт, а ничего

    PS. RSI — не предназначен для минут, тому есть строгое доказательство, да и исторически его использовали иначе…


    1. ELEKTRO_YAR Автор
      15.04.2018 21:31

      Это означает практическую бесполезность и непонимание автором некоторых некоторых базовых принципов


      Я имел ввиду, что индикаторы Боллинджер и RSI для расчетов используют цену закрытия. И по цене закрытия я определял винрейт для направления движения цены. Использование (high + low)/2 вряд ли улучшит результаты. Во время тестирования торговли на Форексе срабатывание ордера по стоп лоссу или тейк профиту конечно же учитывает цену low и high. Так как у меня не тиковый график, сначала проверяется наихудший вариант, что сработал стоп лосс, затем уже проверка тейк профита.

      по этому даже простое предположении о том, что это движение продолжится и дальше, даст нам более 50% угадываний и этот процент будет тем более, чем больше трэнда было в истории


      На минутном графике проверял такую стратегию еще полгода назад, дает 52% винрейта в плане направления движения цены. Использовать это конечно же нельзя, только я не понял, почему вы это приводите здесь, эта стратегия ничего общего к моей стратегии не имеет.

      PS. RSI — не предназначен для минут, тому есть строгое доказательство, да и исторически его использовали иначе

      RSI в связке с Боллинджером в моей стратегии улучшает результаты прогнозирования, сам по себе Боллинджер даст меньше винрейта. Может быть есть вариант лучше, но я не думаю что просто использование другого индикатора может кардинально что-то поменять.


      1. SADKO
        16.04.2018 14:34

        Использование (high + low)/2 вряд ли улучшит результаты.

        Это «вряд-ли» зависит от конкретной ситуации и настроек котировальной машинки, и если в общем модуль разницы цен закрытия будет близок (а будет-ли) к размеру свечи, то в иные, интересные моменты, погрешность будет весьма значительной… И опять-же, обращаю внимание, что это не вопрос рассуждений пусть даже и по уму, и не вопрос эксперимента, здесь, как и в случае с RSI возможно строгое математическое доказательство…

        … и я искренне советую его по искать (особенно в отношении RSI ибо оно простое и годное), ибо именно с этого начинается практическая работа, а не сопли около рыночные, скажем так, есть простая идея применив которую к известным индикаторам можно повлиять на винрэйт чуть-ли не в пару раз, ибо то-же что даёт вам полезный сигнал, даёт и заведомо ложный, но вовсе не обязательно что-бы это было так…


  1. vitaliebureanu
    15.04.2018 21:18

    Неужели трейдеры еще верят в индикаторы, фибоначчи, падающие кометы и тд.?
    Трейдеру для успешной торговли достаточно как минимум 2 инструмента: стакан заявок и график. Я так торгую и процент успешных сделок составляет около 80% без всяких программ.

    Просто включаем логику, анализируем стакан и график, спрос и предложение, вот и все.

    ПС: торгую на криптобирже, но принципы одинаковы и для других типов бирж.


    1. ELEKTRO_YAR Автор
      15.04.2018 21:19

      Вы молодец, однако:
      1) Не все так умеют делать
      2) Зачем торговать самому, когда можно автоматизировать


      1. vitaliebureanu
        17.04.2018 12:36

        Стакан и график служат только помощью, базой. Приходится самому вникать в то, что происходит на данный момент на рынке, присутствует ли там сильный игрок и тд.
        Плюс замечено чисто эмпирически — многие алькоины зависят прямо или обратно от движения биткоина. Оно и понятно, в определенные моменты многие начинают продавать альткоины чтобы вложиться в растущий курс биткоина в надежде что рост будет как в декабре. Это тоже нужно учитывать.


    1. vis_inet
      16.04.2018 15:29

      Можете пояснить свою логику поподробнее?


      1. vitaliebureanu
        17.04.2018 13:32

        Если бы все можно было бы объяснить так просто… Я делаю так: открываю график на часовом фрейме, смотрю общий трэнд, потом 15-ти минутка, и 5-ти минутка, анализирую (классический тех. анализ не использую). А потом открываю M1, смотрю на стакан и иногда на текущие сделки, чтобы понять что сейчас происходит и что (возможно) будет происходить на рынке в недалеком будущем. В зависимости от этого стараюсь системно войти в рынок в момент когда (по моему мнению) наблюдается наибольший спрос. Есть еще несколько вспомогательных инструментов, по мелочи, редко использую. Но в основном — все что нужно знать уже есть на бирже. Все индикаторы специально отключаю, они только сбивают с толку.
        Наилучший способ вникнуть в ситуацию на рынке — открываешь график и стакан, сидишь и тупо смотришь и анализируешь одновременно биды, аски и график. И пытаешься составить для себя общую картину. Потом пытаешься составить прогноз, основываясь на общем трэнде (к нему нужно относиться критически, а не с т.з. доверия), минутке, и стакане… Короче пробуйте. Не ищите того, кто бы вам подсказал что делать. Даже мои советы — принимайте критически, сформируйте свой «стиль», неважно если он будет «не по канонам», если он будет работать — вы в профите.


        1. vis_inet
          17.04.2018 13:41

          Спасибо, очень интересно


  1. GrandTourism
    15.04.2018 21:18

    Грааль?...)


  1. JustPeople
    15.04.2018 21:37

    Браво. Очень интересно было почитать :) Проскальзывание цен не учитывалось при тестировании я так понимаю? То есть такой сферический трейдинг в вакууме :)


    1. ELEKTRO_YAR Автор
      15.04.2018 21:39

      Верно, сферический трейдинг) Но скоро станет вполне материальным. Правда, я собираюсь использовать кое какие другие закономерности, которые обнаружил, пока писал статью ( которые еще лучше, чем 60% хд))


      1. JustPeople
        15.04.2018 22:12

        кстати хотел потестить, программа не запускается. мелькает экран и все. win10 64.
        mt4. советника добавил. котировки загружены. на график перетащил. При перетаскивании на график кстати выскакивает окно, там в последней вкладке что то надо ему указывать?


        1. ELEKTRO_YAR Автор
          15.04.2018 23:45

          Никаких ошибок не возникает? После перетаскивания на график советника просто ОК нажать и все. Скорее вопрос в том, что программа не запускается. Постараюсь проверить на другом компьютере. У вас разрядность операционной системы 64 бит?


          1. JustPeople
            16.04.2018 00:04

            да. хотел отладчиком погонять что бы понять в чем причина может быть и тоже безрезультатно, при запуске через x64dbg мгновенно отрабатывает и все. единственное что может быть будет полезно это вот эта инфа.

            Лог:
            Загрузка командной строки...
            Процесс запущен: 0000000000400000 C:\Users\JustPeople\Desktop\A-shot\A-shot_demo.exe
            TLS Callbacks: 2
            Точка останова по адресу 0000000000436F20 (TLS Callback 1) установлена!
            Точка останова по адресу 0000000000436EF0 (TLS Callback 2) установлена!
            Точка останова по адресу 00000000004014D0 (останов в точке входа) установлена!
            DLL загружена: 00007FFDCB520000 C:\Windows\System32\ntdll.dll
            DLL загружена: 00007FFDCADC0000 C:\Windows\System32\kernel32.dll
            DLL загружена: 00007FFDC85A0000 C:\Windows\System32\KernelBase.dll
            DLL загружена: 00007FFDC5FF0000 C:\Windows\System32\apphelp.dll
            DLL загружена: 00007FFDC94C0000 C:\Windows\System32\advapi32.dll
            DLL загружена: 00007FFDCB1A0000 C:\Windows\System32\msvcrt.dll
            Поток 6F2C создан, вход: ntdll.00007FFDCB552DE0
            DLL загружена: 00007FFDC8B80000 C:\Windows\System32\sechost.dll
            DLL загружена: 00007FFDCAAD0000 C:\Windows\System32\rpcrt4.dll
            Поток 7418 создан, вход: ntdll.00007FFDCB552DE0
            DLL загружена: 00007FFDC93C0000 C:\Windows\System32\comdlg32.dll
            Поток 7674 создан, вход: ntdll.00007FFDCB552DE0
            DLL загружена: 00007FFDCAEA0000 C:\Windows\System32\combase.dll
            DLL загружена: 00007FFDC7A90000 C:\Windows\System32\ucrtbase.dll
            DLL загружена: 00007FFDC7A20000 C:\Windows\System32\bcryptprimitives.dll
            DLL загружена: 00007FFDC84F0000 C:\Windows\System32\SHCore.dll
            DLL загружена: 00007FFDC9080000 C:\Windows\System32\user32.dll
            DLL загружена: 00007FFDC89F0000 C:\Windows\System32\win32u.dll
            DLL загружена: 00007FFDCAA90000 C:\Windows\System32\gdi32.dll
            DLL загружена: 00007FFDC8870000 C:\Windows\System32\gdi32full.dll
            DLL загружена: 00007FFDC8AB0000 C:\Windows\System32\shlwapi.dll
            DLL загружена: 00007FFDC9570000 C:\Windows\System32\shell32.dll
            DLL загружена: 00007FFDBFF00000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.14393.447_none_0d5aa7fbb6d35646\comctl32.dll
            DLL загружена: 00007FFDC7B90000 C:\Windows\System32\cfgmgr32.dll
            DLL загружена: 00007FFDC7C40000 C:\Windows\System32\windows.storage.dll
            DLL загружена: 00007FFDC79D0000 C:\Windows\System32\powrprof.dll
            DLL загружена: 00007FFDC79C0000 C:\Windows\System32\kernel.appcore.dll
            DLL загружена: 00007FFDC7990000 C:\Windows\System32\profapi.dll
            DLL загружена: 00007FFDC7040000 C:\Windows\System32\IPHLPAPI.DLL
            TLS Callbacks: 1
            1 недопустимые адреса TLS callback...
            DLL загружена: 000000006FC40000 C:\Program Files (x86)\GtkSharp\2.12\bin\libstdc++-6.dll
            DLL выгружена: 000000006FC40000 libstdc++-6.dll
            Поток 751C завершен
            Поток 6F2C завершен
            Поток 7418 завершен
            Процесс завершился с кодом 0xC000007B


            1. ELEKTRO_YAR Автор
              16.04.2018 00:25

              Я загрузил в архив все ddl которые могут быть использованы, и программа у друга запустилась на 10 винде. Можете проверить?


              1. JustPeople
                16.04.2018 02:41

                Да запустилась, большое спасибо! :)


              1. JustPeople
                16.04.2018 06:40

                Кстати по цифрам оптимизации сложилось впечатление что выпиливаются сделки которые так сказать составляли шумовую составляющую, а полученный процент дохода с этого образовался за счёт сэкономленного спрэда, условно говоря.


  1. savostin
    15.04.2018 22:21

    А так, ради интереса, какой был средний рост в % этих пар?
    Я имею в виду, что угадывание больше 50% не связано ли случайно с ростом самой цены валюты? Т.е. угадывание-то было ровно 50%, а вот за счет роста получили «профит», не?


    1. ELEKTRO_YAR Автор
      15.04.2018 23:52

      «угадывание» в моей программе связано с флетовым движением цены, поэтому и приходится выбирать часы торговли, где цена чаще всего движется в канале, так как рынок спокоен. По сути программа просто подбирает параметры индикаторов, чтобы определять момент границы канала, когда цена развернется. Например в 12 часов по Москве моя программа не может прогнозировать, рынок в большей степени трендовый, зато ночью винрейт может перевалить за 60%. Одно НО, спред ночью может съесть всю прибыль, поэтому я привожу в статье утренние часы торговли, где волатильность побольше будет, и вечерние часы.


  1. tangro
    15.04.2018 22:58

    «совершив 2.418.153 сделок можно получить 54% верных прогнозов»

    А было бы 10 миллионов сделок — было бы 50.01 % верных прогнозов :) Закон больших чисел, он, знаете ли, начинает хорошо действовать только на больших числах.


    1. ELEKTRO_YAR Автор
      15.04.2018 23:41

      Ваша убежденность не имеет научной основы)
      Можно и на 10 миллионах сделать тест, 50 на 50 там не выйдет. Есть тут в статье графики, они более чем наглядно демонстрируют аномалии на рынке. Я даже больше скажу, можно стабильно и больше 60% получать, но как это сделать я по понятным причинам не напишу.


      1. tangro
        16.04.2018 10:56

        можно стабильно и больше 60% получать, но как это сделать я по понятным причинам не напишу

        Такие тезисы можно задвигать только вместе со скриншотом своей фамилии в списке Форбс :)


    1. konst90
      16.04.2018 13:51

      Два миллиона — это вполне большое число :)


  1. dshap
    15.04.2018 23:44

    "В 1775 году Парижская академия наук приняла решение не рассматривать проекты вечного двигателя из-за очевидной невозможности их создания". Видимо, для проектов кэш-машин нужно что-то похожее :)


  1. diakin
    16.04.2018 00:44
    +2

    Никогда не понимал зачем нужно всем рассказывать эти секреты, когда можно просто загребать бабло. Зачем все эти курсы трейдеров, торговля индикаторами итп, когда можно все класть себе в карман, раз уж стратегия гарантирует прибыль.
    Ну и это
    «За свою жизнь он не совершил ни одной убыточной сделки кроме последней»
    Может случиться так, что стратегия даст сбой Ж8-()


    1. paluke
      16.04.2018 07:39

      Спекулятивная торговля на минутных интервалах — это игра с нулевой суммой. Кто-то может выиграть только за счет проигрыша другого. И раскрывать выигрышную стратегию конечно бессмысленно — чем больший процент трейдеров ей будет пользоваться, тем меньший выигрыш каждому достанется.
      Но есть один нюанс. Сделки двигают цену. А заработает на этом тот, кто будет первым. Вот говорят на курсах трейдеров — смотрите на цену закрытия интервала. Но если до закрытия этого интервала знать, что на закрытии сработает индикатор на покупку — можно сработать на опережение, купить чуть раньше закрытия интервала, а после закрытия сразу продать подороже вашим ученикам :)


      1. konst90
        16.04.2018 14:13

        А заработает на этом тот, кто будет первым. Вот говорят на курсах трейдеров — смотрите на цену закрытия интервала. Но если до закрытия этого интервала знать, что на закрытии сработает индикатор на покупку — можно сработать на опережение, купить чуть раньше закрытия интервала

        Т.е. ошибка товарища — в тезисе, что при его наличии на рынке сделки бы шли точно так же, как и без него?


    1. Lissov
      16.04.2018 13:05

      Я вам анекдотом отвечу.

      анекдот
      Проходит лекция «Гарантированный способ заработать миллион».
      На сцену выходит лектор и спрашивает зал:
      — сколько человек пришло на семинар?
      — тысяча.
      — Сколько стоит входной билет?
      — тысячу долларов.
      — Вы всё правильно поняли. Лекция окончена.


      1. devlind
        16.04.2018 14:58

        Ага, плюс кол-во нубов постоянно увеличивается на рынке, а на них можно неплохо заработать тоже. Если не было бы притока новых игроков, со временем бы осталось пару крупных рыб которые бы контролировали львиную долю рынка.


    1. BigFlask
      16.04.2018 19:19

      Никогда не понимал зачем нужно всем рассказывать эти секреты, когда можно просто загребать бабло. Зачем все эти курсы трейдеров, торговля индикаторами итп, когда можно все класть себе в карман, раз уж стратегия гарантирует прибыль.

      Ты все правильно не понимаешь. А ответ прост эти секреты никто и не рассказывает.


  1. VIPDC
    16.04.2018 06:18

    Как говорит Уоррен Баффетт
    Простая ставка индекс S&P500 почти всегда опережает самые умные стратегии на длинном периоде.
    Кстати в США одними из самых успешных инвесторов являются фермеры, так как держат акции десятилетиями


  1. nailer
    16.04.2018 08:37

    Ваше невежество в вопросах трейдинга столь глубоко, что рассеять его невозможно в сколько-нибудь посильном человеку комментарии. Я говорю это безо всякого высокомерия, поверьте на слово, потому что поднять самомнение за Ваш счет невозможно. Попробуйте обсудить Ваши результаты где-нибудь на forex.kbpauk.ru. Возможно, кто-то сердобольный снизойдет до разбора Вашего наивного труда, хотя обыкновения, заведенные на рынке, весьма жестокие. Потратьте еще полгода Вашей жизни на чтение литературы, и надеюсь, вы сумеете оценить гуманность моего совета.


    1. GrandTourism
      16.04.2018 10:16

      «вы сумеете оценить гуманность моего совета»))) Супер!


  1. Druu
    16.04.2018 12:26

    В данной статье тестирование простой стратегии показало, что совершив 2.418.153 сделок можно получить 54% верных прогнозов, что еще не является гарантией получения дохода, но, во всяком случае, говорит о неполной случайности рынка.

    Нет, не говорит.


    В статье будет немного программного кода, описание алгоритма и статистика его тестирования за 34 месяца.

    Надо тестировать не один длинный интервал, а много более мелких, независимо.


  1. Alexey_mosc
    16.04.2018 12:44

    Я сомневаюсь, что эта стратегия будет прибыльна на реале из-за плавающих спредов и проскальзываний. Сколько пунктов у вас получается математическое ожидание в самом лучшем и самом консервативном вариантах?


  1. Lissov
    16.04.2018 13:09

    Насколько я понимаю, 54% это количество правильных предсказаний, а не размер выигрыша. А если учесть размер роста/падения? То есть, скажем, каждую минуту ставить 1 доллар по указанной стратегии — какой будет результат?
    Одна из неучтённых возможностей — может оказаться, что рост более плавный а падение резкое, тогда количество минут роста будет дольше падения даже при абсолютно случайном процессе.


  1. Alexey_mosc
    16.04.2018 17:50

    Я много раз пытался смоделировать закономерности в ценовых ВР на форексе для получения прибыльной стратегии. Мое моделирование показывало, что, учитывая спред, который как правило 1 пункт и более (с запасом на проскальзывания лучше сделать его равным 2 пунктам), на сделках длиной в час нужно иметь точность предсказания направления без учета спреда больше 60%. С учетом спреда (когда вы в минусе сначала сделки) это, понятно, строго > 0.5. Считается просто: средний абсолютный прирост цены за час — грубо 10 пунктов. Считаем МО:

    0,55 * 0,001 — 0,45 * 0,001 — 0.0002 = -0.0001.

    0.6 * 0.001 — 0.4 * 0.001 — 0.0002 = 0.

    А теперь скажите, сможете ли вы предсказывать цену на час с такой и большей точностью.

    Понятно, что такие вероятности успеха сдуваются когда мы говорим про горизонт прогноза несколько минут, так как прирост цены ничтожен по отношению к постоянному накладному расходу в виде спреда. Поэтому предсказывать что на таких маленьких горизонтах не практично.


    1. ELEKTRO_YAR Автор
      17.04.2018 01:12

      Спред в 2 пункта для моего алгоритма уже слишком большой, так как торгуем мы по сути когда на рынке низкая волатильность. Однако, спред может быть и меньше 1 пункта, такие брокеры есть и я ориентировался на таких, и для тестов использовал спред 0.5 пунктов.

      Средний прирост я бы не стал использовать, стратегия открывает сделки не когда попало, лучше брать статистику по движению цены после открытия сделки.


      1. Alexey_mosc
        17.04.2018 17:26

        Вот вы и проверьте ) На низком рынке спреды меньше пункта, а прирост в эти временные окна тоже ничтожный. Все же продумано там, в конторе ))) Вы можете получить профиль волатильности по часам, и воспользоваться формулой расчета мат.ожидания для каждого часа.


  1. Alex-ok
    16.04.2018 19:16

    Ох уж эти трейдеры и их неиссякаемое желание найти грааль. И на место каждого проигравшегося приходит двое новых с горящими глазами.
    В трейдинге быть успешным можно только в трех случаях. Либо вы владеете инсайдерской информаций и знаете больше других. Либо вы очень крупный игрок и сами можете делать рынок. Либо, наконец, вы быстрее других реагируете на движение цены — а это возможно при лишь наличии соответствующего оборудования, скоростного канала связи и, как ни странно, наименьшего расстояния от биржи. Так что Васе Пупкину из Хацапетовки, даже с вашим чудодейственным алгоритмом, увы, ничего не светит.
    П.С. Но может быть я ошибаюсь и грааль все таки существует. Напишите нам через пару месяцев каков реальный профит.


  1. alkoln
    16.04.2018 19:16

    Короткие интервалы — это удел маркет-мэйкеров и тех, кто "ближе к телу". А гадание по одним лишь ценовым индикаторам и раньше-то было вынужденной мерой, а уж сегодня, в век открытых данных и твиттера — это просто преступление против депозита. С отягчающими обстоятельствами.


    1. ELEKTRO_YAR Автор
      17.04.2018 01:04

      Алгоритм, который описан в статье, опирается на статистические данные о том, в какое время лучше всего торговать. Вы могли заметить, что в выбранное время рынок относительно спокоен, поэтому он лучше поддается прогнозированию, потому что в данное время цена чаще движется в канале. Однако со временем параметры «канала» могут меняться, поэтому используется самооптимизация. Если считать только винрейт по верно спрогнозированным направлениям движения цены, то алгоритм работает весьма хорошо. Чтобы применить это на форексе, конечно этого мало. Но для тестирования я просто применил тейкпрофит и стоплосс, которые не меняются со временем. По хорошему их тоже нужно оптимизировать.


      1. Druu
        17.04.2018 09:15

        > Алгоритм, который описан в статье, опирается на статистические данные о том, в какое время лучше всего торговать

        Но вы не доказали, что ваша статистика сходится (и не докажете, потому что не сходится).

        > По хорошему их тоже нужно оптимизировать.

        По-хорошему, ваш метод — это ровно тот метод, которым сливает свой первый депозит любой подкованный в техническом плане трейдер-новичек :)


  1. kasiopei
    17.04.2018 00:54

    Когда-то тестировал разные стратегии. Многие выдавали эти самые 60%. Спред+плечо все равно уводят в минус. Мало 60


    1. ELEKTRO_YAR Автор
      17.04.2018 00:58

      Есть разница, считать винрейт сделок, закрытых по тейкпрофиту и стоплоссу, или считать винрейт верно спрогнозированного направления цены через N минут. В первом случае можно получить даже 99% винрейта, если тейкпрофит будет очень мал, а стоплосс гораздо больше, при этом сделки в целом будут убыточные. Винрейт же по верному направлению движения цены получить от 60% и выше сложно. Я смог получить такой результат лишь в конкретное время, придерживаясь по сути правила «не торгуй, когда рынок плохо поддается прогнозированию».