Многопоказательная стратегия конвергентной торговли

Автор:Чао Чжан, Дата: 2023-09-12 14:27:41
Тэги:

Стратегия конвергентной торговли с несколькими индикаторами объединяет сигналы от RSI, TD Sequential, MACD и полос Боллинджера для выявления высоковероятных настроек во время трендов на рынках.

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

  1. Вычислить 14-периодный RSI. Использовать параметр RSIdifference в качестве порога для сигналов покупки/продажи. RSI ниже (50 - RSIdifference) дает сигнал покупки. RSI выше (50 + RSIdifference) дает сигнал продажи.

  2. Вычислить индикатор MACD. 5 последовательных положительных строк MACD гистограммы дают сигнал покупки. 5 последовательных отрицательных строк дают сигнал продажи.

  3. Вычислить TD Sequential. 2 последовательных TD бар дают сигнал покупки. 2 последовательных TS бар дают сигнал продажи.

  4. Вычислить 20-периодные полосы Боллинджера. Прорыв цены выше верхней полосы предполагает покупку. Прорыв цены ниже нижней полосы предполагает продажу.

  5. Вступайте в сделки только тогда, когда RSI, MACD и TD Sequential согласны в направлении, а полосы Боллинджера не противоречат друг другу.

  6. Установите цели прибыли и стоп-лосс на основе параметров ввода.

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

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


/*backtest
start: 2022-09-05 00:00:00
end: 2023-09-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("RSI, TD Seq, MACD, BB Strategy - Calculation",overlay=true)



RSIDifference = input(-7, minval=-50, maxval=50, title="RSI Difference") 


TD = close > close[4] ?nz(TD[1])+1:0
TS = close < close[4] ?nz(TS[1])+1:0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
TDcheckUP = iff(TD == 2, true, false)
TDCheckDOWN = iff(TS == 2, true, false)

[_, _, histLine] = macd(close, 12, 26, 9)
MACDCheckDown = iff(histLine > 0 and histLine[1] > 0 and histLine[2] > 0 and histLine[3] > 0  and histLine[4] > 0, true, false)
MACDCheckUp = iff(histLine < 0 and histLine[1] < 0 and histLine[2] < 0 and histLine[3] < 0 and histLine[4] < 0, true, false)

RSICal = rsi(close, 14)
RSICalNewUp = 50 + RSIDifference
RSICalNewDown = 50 - RSIDifference
RSICheckUp = iff(RSICal <= RSICalNewUp, true, false)
RSICheckDown = iff(RSICal >= RSICalNewDown, true, false)

basis = sma(close, 20)
dev = 2 * stdev(close, 20)
upperBB = basis + dev
lowerBB = basis - dev
BBCheckUp = iff(close > upperBB, true, false)
BBCheckDown = iff(close < lowerBB, true, false)
//BBCheckUp = false
//BBCheckDown = false


BuyCheck = iff(TDcheckUP == true and MACDCheckUp == true and RSICheckUp == true and BBCheckUp == false, true, false)
SellCheck = iff(TDCheckDOWN == true and MACDCheckDown == true and RSICheckDown == true and BBCheckDown == false, true, false)


ProfitStratA = input(50, minval=0, maxval=10000, title="Profit", step=0.5) 
useStopLoss = input(false, title="Use Stop Loss?")
LossstratA = input(145, minval=0, maxval=10000, title="Stop Loss", step=0.5) 

ProfitStrat = ProfitStratA * 10
Lossstrat = useStopLoss ? LossstratA * 10 : 1000000

if (strategy.position_size > 0)
    strategy.exit("BuyClose", "Buy", profit=ProfitStrat, loss=Lossstrat)
    
    
if (strategy.position_size < 0)   
    strategy.exit("SellClose", "Sell", profit=ProfitStrat, loss=Lossstrat) 
    

if (BuyCheck == true and strategy.position_size == 0)
    strategy.entry("Buy", strategy.long, comment="Long Entry")
    


if (SellCheck == true and strategy.position_size == 0)
    strategy.entry("Sell", strategy.short, comment="Short Entry")
    
    
 
    

//plotshape(BuyCheck, color=blue, transp=0, style=shape.arrowup, text="Buy\n", location=location.belowbar)
//plotshape(SellCheck, color=orange, transp=0, style=shape.arrowdown, text="Sell\n", location=location.abovebar)













Больше