Индивидуальная стратегия прорыва вверх


Дата создания: 2024-01-08 10:32:25 Последнее изменение: 2024-01-08 10:32:25
Копировать: 0 Количество просмотров: 629
1
Подписаться
1617
Подписчики

Индивидуальная стратегия прорыва вверх

Обзор

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

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

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

Пример: пользователь установил циклы 20, верхний предел - 70, нижний предел - 30. Политика возвращает последние 20 K-линий, если 16 из них являются прямыми K-линиями, то 1620 = 80%. В этот момент выше установленного пользователем верхнего предела 70, выполняется многочисленная операция.

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

Эта стратегия имеет следующие преимущества:

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

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

Однако эта стратегия также несет в себе некоторые риски:

  1. В то же время, в некоторых странах, например, в Китае и Китае, это не так.
  2. Показатели могут быть легко оптимизированы, а эффективность может быть очень разной.
  3. При резкой волатильности стоп-стадии могут быть нарушены, что может привести к убыткам;
  4. В то же время, по мнению экспертов, в этом случае риски могут быть значительными.
  5. Эффективность зависит от разновидности и требует отдельного тестирования.

Для снижения риска можно оптимизировать следующие аспекты:

  1. Помимо того, что это было сделано в прошлом году, в настоящее время в стране действует еще один закон.
  2. Оптимизация стратегий по удержанию убытков и сокращение убытков в разовом порядке;
  3. Оценка и контроль объемов единичных убытков;
  4. Результаты испытаний различных сортов.

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

Эта стратегия может быть оптимизирована в следующих направлениях:

  1. Повышение вспомогательных показателей, таких как разумность цены, чтобы избежать ошибочных сигналов
  2. Оптимизация методов остановки убытков, можно рассмотреть такие варианты, как остановка движения, остановка колебаний и т. д.
  3. Добавление условий для фильтрации открытия, например, прорыв линий бурин и повторный вход.
  4. Тестирование адаптации различных позитивных K-линейных параметров к различным породам
  5. Оценка максимального вывода и контроль за размером убытков

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

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

Исходный код стратегии
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-04 00:00:00
period: 1m
basePeriod: 1m
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/
// © ZenAndTheArtOfTrading 
// © TweakerID

// Based on the calculations by ZenAndTheArtOfTrading, I added stop loss, take profit and reverse line codes.
// The Positive Bars % calculates the number of green (positive) bars, relative to a lookback period, defined 
// by the user. If the percentage is low, it means that there was a bigger number of red candles in the 
// lookback period. The strategy goes long when the percentage is high and short when it's low, although
// this logic can be reversed with positive results on different time frames.

//@version=4
strategy("Positive Bars % Strat", 
     overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

lookback = input(title="Lookback", type=input.integer, defval=13)
upperLimit = input(title="Upper Limit", type=input.integer, defval=70)
lowerLimit = input(title="Lower Limit", type=input.integer, defval=30)

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(10, step=.1, title="ATR Multiple")
i_TPRRR = input(1.6, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR

// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na 
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na 
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR

// Strategy Stop
float LongStop = na
float ShortStop = na
float StratTP = na
float StratSTP = na

/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

//Calculations
positiveBars = 0
for i = (lookback - 1) to 0
    if close[i] > open[i]
        positiveBars := positiveBars + 1
positiveBarsPercent = (positiveBars / lookback) * 100

BUY=positiveBarsPercent >= upperLimit
SELL=positiveBarsPercent <= lowerLimit

//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", size=size.auto)