Стратегия торговли по дням недели

Автор:Чао Чжан, Дата: 2023-09-26 20:49:44
Тэги:

Обзор

Это пользовательская стратегия длинной/короткой торговли для биткоина, которая позволяет тестировать стремление или короткое время в разные дни недели.

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

Логика стратегии

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

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

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

Другой массив timeframes_options используется для хранения выбора длинной, короткой или никакой торговли для каждого дня.

В цикле for стратегия проверяет, совпадает ли текущий торговый день с днем в массиве временных рамок. Если это так, и опцион отличается от предыдущего дня, сначала закрывается все открытые позиции.

Если опцион не является None, он открывает позицию в соответствующем направлении на основе выбранной длинной или короткой.

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

Анализ преимуществ

Основное преимущество этой стратегии заключается в предоставлении высоко настраиваемой длинной / короткой торговли.

В отличие от фиксированных еженедельных торговых стратегий, эта может быть гибко скорректирована.

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

Логика торговли очень ясна и проста, легко понять и изменить.

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

Анализ рисков

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

Например, длительные выходные и короткие выходные могут быть эффективными в некоторых периодах, но не в других.

Таким образом, диапазоны дат должны быть тщательно протестированы, а не полагаться на один результат обратного теста.

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

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

Руководство по оптимизации

Стратегия может быть улучшена в нескольких аспектах:

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

  2. Добавьте фильтр, принимая сигналы только при перерыве определенного дня высокий / низкий, избегая торговли без тренда.

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

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

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

Заключение

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


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


Больше