Количественный прорыв в восходящем тренде

Автор:Чао Чжан, Дата: 21 февраля 2024 10:58:01
Тэги:

img

Обзор

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

Принцип стратегии

  1. Вычислить 20-дневную простую скользящую среднюю линию в качестве базовой линии для определения тренда
  2. Вычислить точки Pivot High и Pivot Low на основе параметров ввода пользователя
  3. Нарисуйте линии сопротивления и поддержки на основе точек Pivot High и Pivot Low
  4. Пройдите длинный, когда цена закрытия выше линии сопротивления
  5. Закрыть позиции при пересечении линии поддержки ниже линии сопротивления

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

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

  1. Стратегия имеет достаточные возможности и подходит для акций с высокой волатильностью, что позволяет легко отслеживать тенденции
  2. Хороший контроль риска для длинных позиций, высокий коэффициент риск-прибыль
  3. Используйте сигналы прорыва, чтобы избежать риска ложных прорывов
  4. Настраиваемые параметры, высокая адаптивность

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

  1. Опирайтесь на оптимизацию параметров, неправильные параметры увеличат вероятность ложных прорывов
  2. Задержка в прорыве сигналов, может упустить некоторые возможности
  3. Легко остановиться на волатильных рынках
  4. Неспособность вовремя скорректировать линию поддержки может привести к потерям

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

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

  1. Оптимизировать параметры скользящей средней продолжительности
  2. Оптимизировать параметры сопротивления и поддержки линии
  3. Добавление стратегий стоп-лосса/прибыли
  4. Усиление механизмов подтверждения прорыва
  5. Сигналы фильтрации с объемом торговли и другими показателями

Резюме

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


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 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/
// © CheatCode1

//@version=5
strategy("Quantitative Trend Strategy- Uptrend long", 'Steady Uptrend Strategy', overlay=true, initial_capital = 1500, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity)


length = input.int(20, minval=1)
src = input(close, title="Source")
basis = ta.sma(src, length)
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)

inp1 = input.int(46, 'LookbackLeft')
inp2 = input.int(32, 'LookbackRight')

l1 = ta.pivothigh(close, inp1, inp2)
S1 = ta.pivotlow(close, inp1, inp2)

// plot(l1, 'Pivothigh', color.red, 1)
// // plot(S1, 'Pivot Low', color.red)

l1V = ta.valuewhen(l1, close, 0)
S1V = ta.valuewhen(S1, close, 0)

Plotl1 = not na(l1) ? l1V : na
PlotS1 = not na(S1) ? S1V : na

plot(Plotl1, 'Resistance', color.green, 1, plot.style_stepline, true)
plot(PlotS1, 'Support', color.red, 1, plot.style_stepline, true)

Priceforlong = close > l1V ? true : na
Priceforshort = close < S1V ? true : na

plotshape(Priceforlong ? high : na, 'p', shape.arrowup, location.abovebar, color.green, size = size.small)
plotshape(Priceforshort ? low : na, 's', shape.arrowdown, location.belowbar, color.red, size = size.small)

vol = volume
volma = ta.sma(vol, 20)

Plotl1C = ta.valuewhen(na(Plotl1), l1V, 0)
PlotS1C = ta.valuewhen(na(PlotS1), S1V, 0)
//Strategy Execution
volc = volume > volma 

Lc1 = Priceforlong 

Sc1 = Priceforshort

sL = Plotl1 < PlotS1 ? close : na
sS = PlotS1 > Plotl1 ? close : na


if Lc1 
    strategy.entry('Long', strategy.long)
// if Sc1 and C2
//     strategy.entry('Short', strategy.short)

if Priceforshort
    strategy.cancel('Long')
if Priceforlong   
    strategy.cancel('Short')


// Stp1 = ta.crossover(k, d)
// Ltp1 = ta.crossunder(k, d)
// Ltp = d > 70  ? Ltp1 : na
// Stp = d < 30  ? Stp1 : na


if strategy.openprofit >= 0 and sL
    strategy.close('Long')
if strategy.openprofit >= 0 and sS
    strategy.close('Short')
takeP = input.float(2, title='Take Profit') / 100
stopL = input.float(1.75, title='Stop Loss') / 100


// // Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
// sL = Plotl1 < PlotS1 ? close : na
// sS = PlotS1 < Plotl1 ? close : na
     
// //Post Excecution
if strategy.position_size > 0 and not (Lc1)
    strategy.exit("Close Long", stop = Stop_L, limit = Take_L)

if strategy.position_size < 0 and not (Sc1)
    strategy.exit("Close Short", stop = Stop_S, limit = Take_S)

Больше