Stratégie d'éclatement de l'aire de valeur transitoire

Auteur:ChaoZhang est là., Date: 2023-12-12 10:58:22 Je suis désolé
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est de déterminer la fourchette de prix actuelle en combinant des indicateurs RSI de différents cycles, et de prendre des actions d'achat ou de vente correspondantes dans des cycles plus petits lorsqu'il y a une rupture dans un RSI de cycle plus grand.

La logique de la stratégie

Les principales étapes de cette stratégie pour déterminer la fourchette de prix et trouver des opportunités commerciales sont les suivantes:

  1. Les indicateurs RSI sont calculés sur la base d'un cycle plus long (par exemple, quotidien).
  2. Déterminez si l'indice RSI du cycle plus large a atteint un nouveau sommet ou un nouveau sommet au cours de la période de rétrospective.
  3. S'il y a une rupture, jugez la tendance des prix (baissière ou haussière) dans un cycle plus court (par exemple 5 min) et prenez les actions d'achat ou de vente correspondantes.

Par exemple, lorsque le RSI quotidien dépasse son niveau le plus élevé précédent, nous jugeons qu'il s'agit actuellement d'un marché haussier. Et lorsque le RSI quotidien dépasse son niveau le plus bas précédent, nous le jugeons comme un marché baissier. Dans les deux cas, nous prenons des actions longues et courtes respectivement dans le graphique de 5 minutes.

Analyse des avantages

Comparée aux stratégies traditionnelles axées sur une seule période, cette stratégie présente les avantages suivants:

  1. Une évaluation plus précise de la valeur relative actuelle des prix. Des cycles plus longs comme le quotidien peuvent filtrer le bruit du marché à court terme et déterminer la tendance globale et la zone de valeur.

  2. La combinaison d'indicateurs à travers les périodes améliore la fiabilité du signal.

  3. Une grande rupture de cycle indique la direction générale, alors que nous n'avons qu'à localiser des opportunités dans de petits cycles comme 5 minutes pour profiter.

  4. La combinaison des périodes croisées permet d'éviter d'être pris au piège.

Analyse des risques

Les principaux risques liés à cette stratégie sont les suivants:

  1. Un mauvais jugement dans les indicateurs de grands cycles. Une détermination inefficace de la zone de valeur dans le RSI quotidien, etc., peut entraîner des signaux défectueux. Un réglage des paramètres du RSI est nécessaire pour améliorer la précision.

  2. La différence entre les mouvements de prix de petits cycles et la détermination de grands cycles. Parfois, les mouvements à court terme contrecarrent les tendances globales. Nous devons définir un stop loss approprié pour contrôler la perte.

  3. Une gestion du risque inappropriée. Des pertes excessives dans le commerce unique dues à une mauvaise dimensionnement des positions pourraient entraîner un retrait irrécupérable. Des règles de dimensionnement raisonnables doivent être mises en œuvre.

Directions d'optimisation

Il reste encore beaucoup à faire pour améliorer cette stratégie, principalement en ce qui concerne les aspects suivants:

  1. Testez plus de combinaisons de périodes pour trouver les paramètres optimaux.

  2. Ajustez les paramètres RSI lookback etc. pour améliorer la précision du jugement.

  3. Ajoutez plus d'indicateurs comme MA pour aider à juger de la direction de la tendance.

  4. Améliorer le mécanisme d'arrêt des pertes, ajuster dynamiquement les points d'arrêt des pertes en fonction des conditions de retrait.

  5. Optimiser les règles de taille des positions, gérer plus scientifiquement les positions spécifiques pour chaque transaction.

Conclusion

Cette stratégie réalise l'arbitrage de période croisée entre différentes dimensions de temps en évaluant la condition haussière dans les RSI de période croisée. Une telle idée de jugement de période croisée mérite une exploitation plus poussée. Nous pouvons continuer à l'améliorer via l'ajustement des paramètres, l'optimisation des stops de perte, les combinaisons d'indicateurs pour la rendre plus avantageuse. Dans l'ensemble, cette stratégie a une idée unique et un énorme potentiel à améliorer.


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

//@version=3

strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
//
otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)")
otf = input(defval="180", title="Second Momentum Timeframe")

// Function to dectect a new bar
is_newbar(res) =>
    t = time(res)
    change(t) != 0 ? true : false

// Check how many bars are in our upper timeframe
since_new_bar = barssince(is_newbar(otf))
otf_total_bars = na
otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1]

//Calculate RSI Values
ctf_rsi = rsi(open, otf_period)

breakline=input(title="Breaks in lines", defval = true, type=bool)

so = request.security(syminfo.tickerid, otf, rsi(open, otf_period))
sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period))


final_otf_so = na
final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so

final_otf_sc = na
final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc

barsback = input(11, title='Bars back to check for a swing')
// showsig = input(false, title='Show Signal Markers')
 
swing_detection(index)=>
    swing_high = false
    swing_low = false
    start = (index*2) - 1 // -1 so we have an even number of
    swing_point_high = final_otf_so[index]
    swing_point_low = final_otf_sc[index]
    
    //Swing Highs
    for i = 0 to start
        swing_high := true
        if i < index 
            if final_otf_so[i] > swing_point_high 
                swing_high := false
                break
        // Have to do checks before pivot and after seperately because we can get
        // two highs of the same value in a row. Notice the > and >= difference
        if i > index
            if final_otf_so[i] >= swing_point_high 
                swing_high := false
                break
        
    //Swing lows
    for i = 0 to start
        swing_low := true
        if i < index
            if final_otf_sc[i] < swing_point_low 
                swing_low := false
                break  
        // Have to do checks before pivot and after seperately because we can get
        // two lows of the same value in a row. Notice the > and >= difference
        if i > index
            if final_otf_sc[i] <= swing_point_low 
                swing_low := false
                break 
        
    [swing_high, swing_low]
 
// Check for a swing
[swing_high, swing_low] = swing_detection(barsback)
 

long =  final_otf_so > final_otf_sc
short = final_otf_so < final_otf_sc

if swing_low and long
    strategy.entry("My Long Entry Id", strategy.long)


if swing_high and short
    strategy.entry("My Short Entry Id", strategy.short)

Plus de