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


Дата создания: 2024-01-25 14:07:35 Последнее изменение: 2024-01-25 14:07:35
Копировать: 0 Количество просмотров: 515
1
Подписаться
1617
Подписчики

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

Обзор

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

Стратегический принцип

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

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

Следует отметить, что эта стратегия по умолчанию включает в себя 25% от рискованного капитала на каждую сделку и рассчитывается по комиссии в размере 0,5%. Это может иметь определенное влияние на конечную прибыль.

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

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

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

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

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

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

Направление оптимизации

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

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-01-24 00:00:00
end: 2024-01-24 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/
// © EmpiricalFX

//@version=4
strategy("Seasonality Benchmark ","Season",overlay=false,default_qty_type=strategy.percent_of_equity,
     default_qty_value=25,initial_capital=100000,currency="USD",
     commission_type=strategy.commission.percent,commission_value=0.5)
input_entry_direction = input("Long","Position Type",options=["Long","Short"])
input_entry_month = input("Oct","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])
input_exit_month = input("Jan","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])

//Convert three character month string to integer
month_str_to_int(m)=>
    ret = m == "Jan" ? 1 :
          m == "Feb" ? 2 :
          m == "Mar" ? 3 :
          m == "Apr" ? 4 :
          m == "May" ? 5 :
          m == "Jun" ? 6 :
          m == "Jul" ? 7 :
          m == "Aug" ? 8 :
          m == "Sep" ? 9 :
          m == "Oct" ? 10 :
          m == "Nov" ? 11 :
          m == "Dec" ? 12 : -1
          
is_long = input_entry_direction == "Long" ? true : false
entry = month_str_to_int(input_entry_month)
exit = month_str_to_int(input_exit_month)
var balance = strategy.equity

//Entering a position is conditional on:
    //1. No currently active trades
    //2. Input entry month matches current month
if(strategy.opentrades == 0 and entry == month)
    strategy.entry("Swing",is_long)

//Exiting a position is conditional on:
    //1. Must have open trade
    //2. Input exit month matches current month
if(strategy.opentrades > 0 and exit == month)
    strategy.close("Swing")
    
//Update the balance every time a trade is exited
if(change(strategy.closedtrades)>0)
    balance := strategy.equity
    
plot(strategy.equity,"Equity",color.orange)
plot(balance,"Balance",color.red)