
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день.
Подскажите примерный путь как добиться открытия только одной сделки единовременно на покупку и также только одну на продажу в Вашем коде.
Во-первых, в кернеле tester_step нужно добавить ещё один аргумент, который позволит получить время закрытия сделки (это может быть индекс бара M1, где сделка закрылась, либо время удержания позиции, выраженное в количестве баров M1) с индексацией, как в буфере результатов __global double *Res.
Далее, в зависимости от того, к чему относится Ваш вопрос - к одиночному тестированию, либо к оптимизации:
1. Тестирование. В цикл, где суммируется общая прибыль, нужно добавить условия, которые будут исключать перекрытие открытых позиций, используя времена закрытия (которые вернёт доработанный tester_step).
2. Оптимизация. Здесь нужно вместо кернела find_patterns_opt, в котором происходит суммирование прибыли, использовать find_patterns, который просто вернёт точки входа. Суммировать прибыль, учитывая условия по недопустимости открытия более одной сделки одновременно, придётся в коде mql5. Правда, это может занять некоторое время (нужно пробовать), так как в этом случае то, что выполнялось параллельно, будет выполнять последовательно (количество проходов оптимизации умножаем на глубину оптимизации). Ещё возможен компромиссный вариант - добавить кернел который будет считать прибыль для одного прохода (учитывая условие по кол-ву одновременно открытых позиций), но из собственной практики скажу, что запускать "тяжелые" кернелы - плохая идея. В идеале нужно стремиться к тому, чтобы код кернела был как можно проще, а запущено их было как можно больше.
Во-первых, в кернеле tester_step нужно добавить ещё один аргумент, который позволит получить время закрытия сделки (это может быть индекс бара M1, где сделка закрылась, либо время удержания позиции, выраженное в количестве баров M1) с индексацией, как в буфере результатов __global double *Res.
Далее, в зависимости от того, к чему относится Ваш вопрос - к одиночному тестированию, либо к оптимизации:
1. Тестирование. В цикл, где суммируется общая прибыль, нужно добавить условия, которые будут исключать перекрытие открытых позиций, используя времена закрытия (которые вернёт доработанный tester_step).
2. Оптимизация. Здесь нужно вместо кернела find_patterns_opt, в котором происходит суммирование прибыли, использовать find_patterns, который просто вернёт точки входа. Суммировать прибыль, учитывая условия по недопустимости открытия более одной сделки одновременно, придётся в коде mql5. Правда, это может занять некоторое время (нужно пробовать), так как в этом случае то, что выполнялось параллельно, будет выполнять последовательно (количество проходов оптимизации умножаем на глубину оптимизации). Ещё возможен компромиссный вариант - добавить кернел который будет считать прибыль для одного прохода (учитывая условие по кол-ву одновременно открытых позиций), но из собственной практики скажу, что запускать "тяжелые" кернелы - плохая идея. В идеале нужно стремиться к тому, чтобы код кернела был как можно проще, а запущено их было как можно больше.
Добрый день.
Спасибо за скорый ответ. Интересовал в первую очередь ответ по оптимизации, т.к. идея применять код именно на практике, кстати я сразу так и подумал, что частично придется писать в коде mql. Большое спасибо за статью, т.к. ничего подобного более нет! Также если немного модифицировать tester_step (и tester_step_opt) добавив к условию учета времени p>open для покупки (т.е. if(j>=maxbar || (TimeM1[j]>=tclose && p>open)) и для продажи if(j>=maxbar || (TimeM1[j]>=tclose && p<open))) то получится стратегия для торговли опционами.
...также добавлю к предыдущему своему комментарию несколько слов об опционной стратегии. Тут нужно добавить переменную Времени Экспирации опциона (при этом при оптимизации СтопЛосс и ТейкПрофит не нужны для опционов), поэтому модифицируем код в tester_opt_step следующим образом:
Добрый день. При запуске OpenCL-оптимизации для USDRUB по вашей статье сталкнулся с такой проблемой - результаты оптимизации всегда положительны, всегда профит, т.е похоже что происходит переполнение для переменной типа int,в которую генерируется результат, при этом для EURUSD оптимизация работает корректно. Возможно также дело в пятизнаке для USDRUB. Подскажите как можно устранить эту проблему?
В статье Вы пишите:
В нашем случае функция atomic_inc() для начала запрещает доступ другим задачам к ячейке Count[0], затем увеличивает её значение на единицу, а предыдущее возвращает в виде результата.
Как я понял, эта функция работает только с массивом типа int, а если у меня массив другого типа, к примеру ushort, то как быть?