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


Дата создания: 2023-12-25 17:47:11 Последнее изменение: 2023-12-25 17:47:11
Копировать: 0 Количество просмотров: 597
1
Подписаться
1623
Подписчики

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

Обзор

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

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

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

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

Стратегические преимущества

  1. Комбинация преимуществ обеих стратегий для более стабильного и надежного принятия торговых решений

  2. Стратегия осей позволяет определить переломные моменты, фильтровать фальшивые прорывы с помощью минимальной двойной скользящей средней и снижать риск торговли

  3. В этом случае мы не можем быть в полной безопасности, и мы не можем быть в безопасности.

  4. Стратегии простые, понятные, легко понятные и оптимизируемые

  5. Средняя частота транзакций, подходящая для средних и длинных операций

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

  1. Нельзя воспользоваться возможностью быстрого падения рынка

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

  3. Если бы мы перешли на говяжьи медведи, мы бы потеряли больше денег.

Решение проблемы:

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

  2. Настройка параметров скользящих средних для оптимизации участия

  3. Увеличение стратегии по удержанию убытков и снижение убытков в отдельности

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

  1. Включение в портфель различных трендовых индикаторов для повышения точности оценки

  2. Повышение прогнозируемых результатов моделей машинного обучения для принятия решений

  3. Контроль за размером позиции в сочетании с показателями волатильности

  4. Оптимизация параметров, повышение шансов на успех стратегии

  5. Тестирование более длительных циклов данных для подтверждения стабильности

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

Эта стратегия объединяет преимущества стратегии обратного обращения опорных точек и стратегии наименьшей двойной движущейся средней, контролирует риск при определении обратного обращения тенденции и является стабильной стратегией. Ее структура проста, легко понять и протестировать, она очень подходит для обучения и практики новичков в количественной торговле.

Исходный код стратегии
/*backtest
start: 2022-12-18 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author exlux99

strategy(title = "Pivot Reversal Upgraded long only", overlay = true,  pyramiding=1,initial_capital = 100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.1)
/////////////
//time

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2031, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
//

length = input(title="Length MA", type=input.integer, defval=20)
offset = 0//input(title="Offset", type=input.integer, defval=0)
src = input(close, title="Source")
lsma = linreg(src, length, offset)

//LSMA
leftBars = input(3)
rightBars = input(16)
swh = pivothigh(leftBars, rightBars)
swl = pivotlow(leftBars, rightBars)
swh_cond = not na(swh)
hprice = 0.0
hprice := swh_cond ? swh : hprice[1]
le = false
le := swh_cond and time_cond? true : (le[1] and high > hprice ? false : le[1])
//leverage
multiplier=input(1.0, step=0.5)
g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(1.0, step = 0.5)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)

//entry
strategy.entry("long", strategy.long,c, when=le and close > lsma, comment="long", stop=(hprice + syminfo.mintick) * multiplier)

    
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])
strategy.close("long", when=se)