Stratégie de négociation de convergence multi-indicateur

Auteur:ChaoZhang est là., Date: 12 septembre 2023 à 14h27h41
Les étiquettes:

La stratégie de négociation de convergence multi-indicateur combine des signaux provenant du RSI, du TD Sequential, du MACD et des bandes de Bollinger pour identifier les configurations à forte probabilité lors de tendances sur les marchés.

La logique de la stratégie:

  1. Calculer le RSI de 14 périodes. Utiliser le paramètre de différence RSI comme seuil pour les signaux d'achat/vente. RSI inférieur à (50 - différence RSI) donne un signal d'achat. RSI supérieur à (50 + différence RSI) donne un signal de vente.

  2. Comptez l'indicateur MACD. 5 barres d'histogramme MACD positives consécutives donnent un signal d'achat. 5 barres négatives consécutives donnent un signal de vente.

  3. Comptez la séquence TD. Deux barres TD consécutives vers le haut donnent un signal d'achat. Deux barres TS consécutives vers le bas donnent un signal de vente.

  4. Comptez les bandes de Bollinger à 20 périodes. Une rupture de prix au-dessus de la bande supérieure suggère un achat. Une rupture de prix en dessous de la bande inférieure suggère une vente.

  5. Ne négociez que lorsque le RSI, le MACD et le TD Sequential sont d'accord sur la direction et que les bandes de Bollinger ne sont pas en contradiction.

  6. Définir des objectifs de profit et de stop loss basés sur les paramètres d'entrée.

Cette stratégie combine les forces de plusieurs indicateurs pour éviter de faux signaux. Les bandes de Bollinger aident à filtrer les configurations à haute probabilité pendant les tendances. Cependant, les paramètres de l'indicateur doivent être optimisés en profondeur et les signaux doivent être relativement rares lorsque les 4 indicateurs s'accordent pour éviter le sur-échange.

Dans l'ensemble, cette stratégie multi-indicateur peut capturer des configurations à forte probabilité lors de fortes tendances, mais nécessite un ajustement minutieux des paramètres et une utilisation prudente des signaux d'indicateur pour éviter une négociation excessive.


/*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)













Plus de