Stratégie de backtesting de Rainbow Oscillator


Date de création: 2023-12-26 15:08:17 Dernière modification: 2023-12-26 15:08:17
Copier: 3 Nombre de clics: 749
1
Suivre
1623
Abonnés

Stratégie de backtesting de Rainbow Oscillator

Aperçu

La stratégie de retracement de l’oscillateur arc-en-ciel est une stratégie de négociation quantitative basée sur l’indicateur de l’oscillateur arc-en-ciel. La stratégie permet de juger de la direction et de la force de la tendance du marché en calculant l’écart entre le cours de l’action et la moyenne.

Principe de stratégie

L’indicateur central de cette stratégie est l’oscillateur arc-en-ciel (Rainbow Oscillator, RO), dont la formule de calcul est la suivante:

RO = 100 * ((收盘价 - 10日移动平均线) / (最高价的最高值 - 最低价的最低值))

La moyenne mobile à 10 jours est une moyenne mobile simple des prix de clôture de 10 périodes. L’indicateur reflète l’écart des prix par rapport à leur propre moyenne. Lorsque le RO > 0 représente le prix au-dessus de la moyenne, c’est un signal positif; lorsque le RO < 0 représente le prix en dessous de la moyenne, c’est un signal négatif.

La stratégie calcule également un indicateur auxiliaire, la bande passante (Bandwidth, RB), dont la formule est la suivante:

RB = 100 * ((均线的最高值 - 均线的最低值) / (最高价的最高值 - 最低价的最低值)) 

La RB reflète la largeur entre les lignes moyennes. Plus la RB est grande, plus la volatilité des prix est grande et, au contraire, les prix sont stables. L’indicateur RB peut être utilisé pour juger de la stabilité du marché.

En fonction des valeurs des indicateurs RO et RB, la stratégie détermine l’écart de prix et la stabilité du marché, ce qui génère des signaux de négociation pour les positions longues et courtes.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. Les jugements basés sur deux indicateurs évitent les limites d’un seul indicateur.
  2. La stabilité du marché et la tendance des prix peuvent être évaluées simultanément.
  3. Le calcul est simple, facile à comprendre et à mettre en œuvre.
  4. L’indicateur est visualisé, ce qui crée un effet d’arc-en-ciel et est facile à lire.

Risque stratégique

Cette stratégie comporte aussi des risques:

  1. Les paramètres des indicateurs RO et RB mal définis peuvent entraîner des erreurs de signal de transaction.
  2. Les stratégies bi-parallèles sont sujettes à de faux signaux et à des transactions fréquentes.
  3. Le cycle de récupération et le mauvais choix de la variété peuvent affecter l’efficacité de la stratégie.
  4. Le prix de la transaction peut être très faible si l’on ne tient pas compte des coûts de transaction.

La réponse:

  1. Optimiser les paramètres des indicateurs RO et RB.
  2. Les conditions de filtrage ont été ajoutées pour éviter des transactions fréquentes.
  3. Choisissez une période et une variété appropriées.
  4. Calculer et prendre en compte le coût des transactions.

Optimisation de la stratégie

La stratégie peut également être optimisée dans les domaines suivants:

  1. La fonction Smooth est ajoutée à l’indicateur RO pour éviter les fortes fluctuations.
  2. Adopter une stratégie de stop-loss pour contrôler les pertes individuelles.
  3. Les échanges de portefeuille, combinés à d’autres indicateurs, améliorent la probabilité de profit.
  4. Ajout de modèles d’apprentissage automatique pour faire des prévisions et évaluer l’efficacité des indicateurs.
  5. Optimisation des paramètres pour les différentes variétés afin d’améliorer l’adaptabilité.

Résumer

La stratégie de retracement de l’oscillateur arc-en-ciel permet de négocier des positions longues et courtes en calculant l’écart entre le prix et la ligne moyenne, de juger de la tendance et de la stabilité du marché. La stratégie est intuitive, facile à lire, simple à mettre en œuvre et présente une certaine valeur pratique.

Code source de la stratégie
/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/03/2018
// Ever since the people concluded that stock market price movements are not 
// random or chaotic, but follow specific trends that can be forecasted, they 
// tried to develop different tools or procedures that could help them identify 
// those trends. And one of those financial indicators is the Rainbow Oscillator 
// Indicator. The Rainbow Oscillator Indicator is relatively new, originally 
// introduced in 1997, and it is used to forecast the changes of trend direction.
//
// As market prices go up and down, the oscillator appears as a direction of the 
// trend, but also as the safety of the market and the depth of that trend. As 
// the rainbow grows in width, the current trend gives signs of continuity, and 
// if the value of the oscillator goes beyond 80, the market becomes more and more 
// unstable, being prone to a sudden reversal. When prices move towards the rainbow 
// and the oscillator becomes more and more flat, the market tends to remain more 
// stable and the bandwidth decreases. Still, if the oscillator value goes below 20, 
// the market is again, prone to sudden reversals. The safest bandwidth value where 
// the market is stable is between 20 and 80, in the Rainbow Oscillator indicator value. 
// The depth a certain price has on a chart and into the rainbow can be used to judge 
// the strength of the move.
//
// You can change long to short in the Input Settings
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Rainbow Oscillator Backtest")
Length = input(2, minval=1)
LengthHHLL = input(10, minval=2, title="HHV/LLV Lookback")
reverse = input(false, title="Trade reverse")
xMA1 = sma(close, Length)
xMA2 = sma(xMA1, Length)
xMA3 = sma(xMA2, Length)
xMA4 = sma(xMA3, Length)
xMA5 = sma(xMA4, Length)
xMA6 = sma(xMA5, Length)
xMA7 = sma(xMA6, Length)
xMA8 = sma(xMA7, Length)
xMA9 = sma(xMA8, Length)
xMA10 = sma(xMA9, Length)
xHH = highest(close, LengthHHLL)
xLL = lowest(close, LengthHHLL)
xHHMAs = max(xMA1,max(xMA2,max(xMA3,max(xMA4,max(xMA5,max(xMA6,max(xMA7,max(xMA8,max(xMA9,xMA10)))))))))
xLLMAs = min(xMA1,min(xMA2,min(xMA3,min(xMA4,min(xMA5,min(xMA6,min(xMA7,min(xMA8,min(xMA9,xMA10)))))))))
xRBO = 100 * ((close - ((xMA1+xMA2+xMA3+xMA4+xMA5+xMA6+xMA7+xMA8+xMA9+xMA10) / 10)) / (xHH - xLL))
xRB = 100 * ((xHHMAs - xLLMAs) / (xHH - xLL))
clr = iff(xRBO >= 0, green, red)
pos = iff(xRBO > 0, 1,
       iff(xRBO < 0, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(xRBO, color=clr, title="RO", style= histogram, linewidth=2)
p0 = plot(0, color = gray, title="0")
p1 = plot(xRB, color=green, title="RB")
p2 = plot(-xRB, color=red, title="RB")
fill(p1, p0, color=green)
fill(p2, p0, color=red)