Пронзающая краткосрочная разворотная стратегия


Дата создания: 2024-01-25 12:29:29 Последнее изменение: 2024-01-25 12:29:29
Копировать: 1 Количество просмотров: 612
1
Подписаться
1617
Подписчики

Пронзающая краткосрочная разворотная стратегия

Обзор

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

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

Сигнал входа

Эта стратегия вводит сигналы в виде коротких линий. В частности, сигналы создаются, если они соответствуют двум следующим условиям:

  1. Формирование специфических коротких линий: многоголовый сигнал - короткий контент, пустой сигнал - короткий контент
  2. Кратколинейная форма пробивает подвижные средние: пробивает подвижные средние с понижающей тенденцией, или пробивает подвижные средние с повышающей тенденцией

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

Оценка тенденций

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

При многоголовном входе требуется скоростная линия > средняя линия > медленная линия; при пустом входе требуется скоростная линия < средняя линия < медленная линия.

Остановка убытков

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

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

Высокая эффективность поступления

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

Сверхмощный антисептик

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

Результаты моделирования показывают, что после использования этого механизма многовалютные пары достигают совокупной доходности более 1000%, максимальная прибыль в 100 раз превышает максимальную прибыль, прибыль поднимается до новых, ранее не наблюдавшихся высот.

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

Оптимизация риска

Учитывая, что результаты теста были близки к тому, что можно было бы назвать “священной чашей”, это, скорее всего, является результатом чрезмерного моделирования рынка. Механизм остановки убытков на дискете может не действовать так точно, как в тестах, и может столкнуться с определенным отзывом.

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

Отслеживание риска остановки

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

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

Настройка параметров стоп-лосса для отслеживания

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

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

Оптимизация циклов скользящих средних

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

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

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

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

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

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

//@version=4
//Time Frame: H1
strategy("Pin Bar Magic v1", overlay=true)

// User Input
usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false)
atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=0.5,confirm=false)
slPoints = input(title="Stop Loss Trail Points (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
slOffset = input(title="Stop Loss Trail Offset (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
sma_slow = input(title="Slow SMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
ema_medm = input(title="Medm EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=18,confirm=false)
ema_fast = input(title="Fast EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=6,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false)
ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false)

// Create Indicators
slowSMA = sma(close, sma_slow)
medmEMA = ema(close, ema_medm)
fastEMA = ema(close, ema_fast)
bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low)))
bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low)))
atr = atr(atr_valu)

// Specify Trend Conditions
fanUpTrend = (fastEMA > medmEMA) and (medmEMA > slowSMA)
fanDnTrend = (fastEMA < medmEMA) and (medmEMA < slowSMA)

// Specify Piercing Conditions
bullPierce = ((low < fastEMA) and (open > fastEMA) and (close > fastEMA)) or ((low < medmEMA) and (open > medmEMA) and (close > medmEMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastEMA) and (open < fastEMA) and (close < fastEMA)) or ((high > medmEMA) and (open < medmEMA) and (close < medmEMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))
    
// Specify Entry Conditions
longEntry = fanUpTrend and bullishPinBar and bullPierce
shortEntry = fanDnTrend and bearishPinBar and bearPierce

// Long Entry Function
enterlong() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = low[1] - atr[1] * atr_mult
    entryPrice = high[1]
    units = risk / (entryPrice - stopLoss)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    
// Short Entry Function
entershort() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = high[1] + atr[1] * atr_mult
    entryPrice = low[1]
    units = risk / (stopLoss - entryPrice)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
    
// Execute Long Entry
if (longEntry)
    enterlong()

// Execute Short Entry
if (shortEntry)
    entershort() 
    
// Cancel the Entry if Bar Time is Exceeded
strategy.cancel("long", barssince(longEntry) > ent_canc)
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Force Close During Certain Conditions
strategy.close_all(when = hour==16 and dayofweek==dayofweek.friday, comment = "exit all, market-closed")
strategy.close_all(when = crossunder(fastEMA, medmEMA), comment = "exit long, re-cross")
strategy.close_all(when = crossover(fastEMA, medmEMA), comment = "exit short, re-cross")

// Plot Moving Averages to Chart
plot(fastEMA, color=color.red)
plot(medmEMA, color=color.blue)
plot(slowSMA, color=color.green)

// Plot Pin Bars to Chart
plotshape(bullishPinBar, text='Bull PB', style=shape.labeldown, location=location.abovebar, color=color.green, textcolor=color.white, transp=0)
plotshape(bearishPinBar, text='Bear PB', style=shape.labelup, location=location.belowbar, color=color.red, textcolor=color.white, transp=0)

// Plot Days of Week
plotshape(hour==0 and dayofweek==dayofweek.monday, text='Monday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.tuesday, text='Tuesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.wednesday, text='Wednesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.thursday, text='Thursday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.friday, text='Friday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==16 and dayofweek==dayofweek.friday, text='Market Closed', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)