Stratégie d'inversion des fluctuations anormales des prix


Date de création: 2023-10-11 16:03:36 Dernière modification: 2023-10-11 16:03:36
Copier: 1 Nombre de clics: 689
1
Suivre
1617
Abonnés

Aperçu

La stratégie consiste à calculer l’écart-type du prix pour déterminer s’il y a une fluctuation anormalement importante. Lorsque le prix fluctue anormalement fortement, il est considéré comme une chance de reprise des cours et une opération de revers est effectuée.

Le principe

La stratégie utilise principalement deux indicateurs:

  1. L’indicateur VixFix: Calcule l’écart-type entre les prix sur une période donnée pour déterminer si les prix ont fluctué de manière anormale. La méthode de calcul est la suivante:
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100 
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)  
lowerBand = midLine - sDev
upperBand = midLine + sDev

Dans ce cas, wvf est le taux de fluctuation du prix, sDev est le décalage standard, la midLine est la moyenne, la lowerBand et la upperBand sont respectivement les limites inférieures et supérieures.

  1. Indicateur RSI: Indicateur de la force et de la faiblesse relative des prix, permettant de déterminer le moment où les prix se retournent. Les méthodes de calcul sont:
fastup = rma(max(change(close), 0), 7)  
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) 

Lorsque le RSI est en dessous d’une valeur donnée, cela signifie que le prix est en survente et qu’il peut y avoir un rebond. Lorsque le RSI est supérieur à une valeur donnée, cela signifie que le prix est en survente et qu’il peut y avoir un rebond.

Entrée et sortie

La logique d’entrée et de sortie de cette stratégie est la suivante:

Entrée en position multiple: faire plus lorsque le prix dépasse la limite supérieure ou que la volatilité dépasse la marge et que le RSI est inférieur à une valeur donnée.

Entrée en position vide: la position est ouverte lorsque le prix dépasse la limite supérieure ou que la volatilité dépasse la marge et que le RSI dépasse une valeur donnée.

Condition de sortie: position ouverte dans la direction opposée à celle de l’entité en ligne K.

Les avantages

  • L’utilisation des caractéristiques statistiques des fluctuations inhabituelles des prix pour déterminer le moment où les prix se retournent, une large couverture.
  • Le RSI, combiné à l’indicateur de survente, permet d’améliorer la précision de l’entrée.
  • L’utilisation d’un seuil de rupture standard comme signal d’entrée peut réduire les chances de manquer.
  • L’utilisation de l’inversion de l’entité comme méthode d’arrêt des pertes permet de stopper les pertes rapidement et de réduire les pertes.

Les risques

  • Le seuil inférieur d’écart-type peut être ajusté et nécessite des paramètres d’optimisation.
  • La rupture du seuil de décalage n’entraîne pas forcément une reprise, mais présente un risque d’échec.
  • Les paramètres RSI doivent être optimisés, car une mauvaise utilisation peut entraîner une inexactitude du signal.
  • La direction de l’entité peut être trop radicale pour déterminer le stop loss et nécessite une modification des paramètres.

Optimiser les idées

  • Optimisation des paramètres périodiques de calcul de l’écart-type pour mieux capturer les fluctuations anormales des prix.
  • Optimiser les paramètres du RSI pour trouver de meilleurs critères de surachat et de survente
  • Essayez de combiner d’autres indicateurs, tels que KDJ, MACD, etc. pour déterminer le moment de la reprise.
  • Optimiser les méthodes de stop loss en définissant la marge de rétrogradation des prix comme critère de stop loss.

Résumer

La stratégie utilise la différence standard pour calculer la volatilité des prix afin de déterminer si des fluctuations anormales sont observées et de saisir les opportunités de revers. Lors de la sélection du moment d’entrée, elle est combinée avec l’indicateur RSI pour déterminer l’état de survente et de survente des prix, ce qui améliore la précision.

Code source de la stratégie
/*backtest
start: 2022-10-04 00:00:00
end: 2023-10-10 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's VixFix + RSI Strategy v1.0", shorttitle = "VixFix + RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
limit = input(40, defval = 40, minval = 2, maxval = 50, title = "RSI Limit")

pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0, minval = 1, maxval = 5, title = "Bollinger Band Standard Devaition Up")
lb = input(50, title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%")
hp = input(false, title="Show High Range - Based on Percentile and LookBack Period?")
sd = input(false, title="Show Standard Deviation Line?")

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Vix Fix
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
rangeHigh = (highest(wvf, lb)) * ph
rangeLow = (lowest(wvf, lb)) * pl

col = wvf >= upperBand or wvf >= rangeHigh ? lime : gray

//RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
up = (wvf >= upperBand or wvf >= rangeHigh) and fastrsi < limit and close < open
dn = (wvf >= upperBand or wvf >= rangeHigh) and fastrsi > (100 - limit) and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Top", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()