Стратегия стимулирования прорыва в пересечении перемещаемых средних и верхних железных дорог

Автор:Чао Чжан, Дата: 2023-11-13 11:52:22
Тэги:

img

Обзор

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

Логика стратегии

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

  2. Включите индикатор RSI для определения условий перекупления и перепродажи. Ниже центральной линии указывается длинный, а выше указывается короткий.

  3. Сравните текущую цену закрытия с линией SMA определенного периода.

  4. Вычислить 0,5 уровень Фибоначчи наивысшего значения определенного периода как сопротивление для длинного. Вычислить 0,5 уровень Фибоначчи наименьшего значения определенного периода как поддержка для короткого.

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

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

Преимущества

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

  2. Включение подтверждений из нескольких индикаторов, таких как RSI и SMA, может отфильтровать ложные сигналы и повысить надежность.

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

  4. Остановка с последующим убытком может зафиксировать большую часть прибыли, контролируя риск.

  5. Логика стратегии ясна и проста, легко понять и освоить для новичков.

Риски

  1. Индикатор MACD имеет отстающие задачи и может пропустить оптимальные точки входа и выхода.

  2. Объединение нескольких индикаторов увеличивает сложность и риски противоречивых сигналов.

  3. При динамическом расчете поддержки и сопротивления существует риск неправильного прорыва.

  4. Следующая стоп-лосс может выйти преждевременно в сильных тенденциях, не достигая тенденций.

  5. Параметры требуют повторного тестирования и оптимизации, неправильные параметры негативно влияют на производительность.

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

  1. Испытывать различные комбинации параметров для оптимизации периодов MACD.

  2. Внедрить больше индикаторов, таких как полосы Боллинджера, KDJ для многомерного анализа.

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

  4. Исследуйте более продвинутые механизмы стоп-лосса, такие как временные или волатильные стопы.

  5. Добавить модуль автоматической оптимизации для автоматической оптимизации параметров.

Резюме

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


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 23: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/
// © onurenginogutcu

//@version=4
strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 ,  process_orders_on_close=true )



sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL") 
timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution ,  defval="60")

adxlen = input(14, title="ADX Smoothing" , group = "ADX")
dilen = input(14, title="ADX DI Length", group = "ADX")
adxemalenght = input(30, title="ADX EMA", group = "ADX")
adxconstant = input(19, title="ADX CONSTANT", group = "ADX")

fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA")
smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA")
MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA")
MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA")

trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01

lsl = input(title="Max Long Stop Loss (%)",
     minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01
     
ssl = input(title="Max Short Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01
     
longtp = input(title="Long Take Profit (%)",
     minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
     
shorttp = input(title="Short Take Profit (%)",
     minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
     
capperc = input(title="Capital Percentage to Invest (%)",
     minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01
     

symClose = security(sym, timeFrame, close)
symHigh = security(sym, timeFrame, high)
symLow = security(sym, timeFrame, low)

atr = atr (14) 

/////////adx code

dirmov(len) =>
	up = change(symHigh)
	down = -change(symLow)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
emasig = ema (sig , adxemalenght )


////////adx code over



i = ema (symClose , MACDFast) - ema (symClose , MACDSlow) 
r = ema (i , MACDSmooth)

sapust = highest (i , MACDLookback) * 0.729 
sapalt = lowest (i , MACDLookback) * 0.729  


simRSI = rsi (symClose , 50 ) 




fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)





cond1 = 0
cond2 = 0
cond3 = 0
cond4 = 0


longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom 
shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and  symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop 


//////////////////////probability long/short
if (crossover(i, r) and i < sapalt)
    cond1 := 35
else if (crossunder(i, r) and i > sapust)
    cond1 := -35
else
    cond1 := 0
    
if (symClose < sma (symClose , smaLookback))
    cond2 := 30
else if (symClose > sma (symClose , smaLookback))
    cond2 := -30
else
    cond2 := 0
    
if (simRSI < sma (simRSI , 50))
    cond3 := 25
else if (simRSI > sma (simRSI , 50))
    cond3 := -25
else
    cond3 := 0
    
if (symClose < fibbottom)
    cond4 := 10
else if (symClose > fibbottom)
    cond4 := -10
else
    cond4 := 0
    
probab = cond1 + cond2 + cond3 + cond4
////////////////////////////////////////////////////////////////

///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////
var startTrail = 0
var trailingLongPrice = 0.0
var trailingShortPrice = 0.0

if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close )

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close )
    
    
if (strategy.position_size == 0)    
    trailingShortPrice := 0.0
    trailingLongPrice := 0.0  
    startTrail := 0
/////////////////////////////////strategy exit

if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart))
    startTrail := 1

if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart))
    startTrail := -1
    



trailingLongPrice := if strategy.position_size > 0 and startTrail == 1
    stopMeasure = close * (1 - trailingStopLong)
    max (stopMeasure , trailingLongPrice [1])
else if strategy.position_size > 0 and startTrail == 0
    strategy.position_avg_price * (1 - lsl)


trailingShortPrice := if strategy.position_size < 0 and startTrail == -1
    stopMeasure = close * (1 + trailingStopShort)
    min (stopMeasure , trailingShortPrice [1])
else if strategy.position_size < 0 and startTrail == 0
    strategy.position_avg_price * (1 + ssl)




if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp))
 

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp))


////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)

plot (trailingLongPrice , color = color.green) ///long price trailing stop
plot (trailingShortPrice , color = color.red) /// short price trailing stop
plot (startTrail , color = color.yellow)
plot (probab , color = color.white) ////probability


Больше