Les ressources ont été chargées... Je charge...

La stratégie de couverture de la dynamique multi-RSI-EMA avec mise à l'échelle des positions

Auteur:ChaoZhang est là., Date: 2024-12-04 15:41:10 Je vous en prie.
Les étiquettes:Indice de résistanceLe taux d'intérêtTPSL

img

Résumé

Il s'agit d'une stratégie de couverture basée sur les indicateurs RSI et les moyennes mobiles EMA. La stratégie utilise des périodes RSI doubles (RSI-14 et RSI-2) combinées à des lignes EMA triples (50, 100, 200) pour saisir les opportunités d'inversion de tendance du marché, en mettant en œuvre la couverture grâce à une gestion dynamique des positions.

Principes de stratégie

La stratégie utilise RSI-14 et RSI-2 avec des périodes différentes, ainsi qu'EMA-50, EMA-100, et EMA-200 pour déterminer les signaux de trading. Les conditions longues nécessitent un RSI-14 inférieur à 31 et un RSI-2 qui franchit au-dessus de 10, tandis que les EMA doivent être en alignement baissier (EMA-50 < EMA-100 < EMA-200). Les conditions courtes sont opposées, nécessitant un RSI-14 supérieur à 69 et un RSI-2 qui franchit au-dessous de 90, avec des EMA en alignement haussier (EMA-50 > EMA-100 > EMA-200).

Les avantages de la stratégie

  1. La validation croisée d'indicateurs techniques multiples améliore la fiabilité du signal
  2. La gestion dynamique des positions permet un ajustement flexible du portefeuille
  3. Le mécanisme de négociation bidirectionnelle permet de réaliser des bénéfices dans les deux sens
  4. Des conditions de profit adaptées empêchent les sorties prématurées
  5. Interface graphique claire montrant les signaux de négociation et les conditions du marché
  6. Le mécanisme de couverture réduit l'exposition au risque directionnel
  7. Calcul de la position dynamique fondée sur les capitaux propres pour un meilleur contrôle des risques

Risques stratégiques

  1. L'effet de levier élevé (20x) peut entraîner des risques de liquidation importants
  2. Le positionnement progressif pourrait entraîner de lourdes pertes lors de la volatilité du marché
  3. L'absence de conditions d'arrêt des pertes peut entraîner des risques de retrait continus
  4. Les indicateurs RSI peuvent générer de faux signaux sur les marchés de variation
  5. La combinaison de plusieurs indicateurs techniques peut réduire les opportunités de négociation
  6. La méthode de gestion des positions peut accumuler un risque excessif au cours de transactions consécutives

Directions d'optimisation de la stratégie

  1. Introduction d'un mécanisme d'arrêt-perte adaptatif basé sur l'ATR ou la volatilité
  2. Optimiser le multiplicateur d'effet de levier avec un ajustement dynamique basé sur la volatilité du marché
  3. Ajouter des filtres de temps pour éviter les opérations pendant les périodes de faible volatilité
  4. Incorporer des indicateurs de volume pour améliorer la fiabilité du signal
  5. Optimiser le multiplicateur d'accroissement de position avec les limites maximales de position
  6. Ajouter des filtres de force de tendance pour éviter de négocier dans des tendances faibles
  7. Améliorer la gestion des risques avec des limites maximales de perte quotidiennes

Résumé

Cette stratégie complète combine l'élan et la tendance suivante, en utilisant plusieurs indicateurs techniques pour améliorer la précision des transactions. La stratégie innove grâce à une gestion dynamique des positions et des mécanismes de couverture, bien qu'elle comporte des risques importants. Grâce à l'optimisation des mécanismes de contrôle des risques et à l'introduction de filtres supplémentaires, cette stratégie a le potentiel de meilleures performances dans le trading en direct.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy Hedge", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Identifikátory pozic
long_id = "Long"
short_id = "Short"

// Definování průměrné ceny pozice pro long a short
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_long_position_size = na
var float last_short_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_long_position_size != strategy.position_size and strategy.position_size > 0)
    long_avg_price := na
if (last_short_position_size != strategy.position_size and strategy.position_size < 0)
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
else
    long_avg_price := na

if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
else
    short_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
if (strategy.position_size > 0)
    last_long_position_size := strategy.position_size
else if (strategy.position_size < 0)
    last_short_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_long_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2
new_short_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty_long = position_value / close
trade_qty_short = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry(long_id, strategy.long, qty=new_long_position_size == na ? trade_qty_long : new_long_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry(short_id, strategy.short, qty=new_short_position_size == na ? trade_qty_short : new_short_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close(long_id)

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close(short_id)

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short pouze pokud pozice existuje
plot(strategy.position_size > 0 ? long_avg_price : na, title="Long Avg Price", color=color.blue, linewidth=2)
plot(strategy.position_size < 0 ? short_avg_price : na, title="Short Avg Price", color=color.orange, linewidth=2)

// Zvýraznění čtverců pro RSI14 > 70 (červeně) a RSI14 < 30 (zeleně)
var int rsi_above_70_start = na
var int rsi_below_30_start = na

var float top_value_above_70 = na
var float bottom_value_above_70 = na

var float top_value_below_30 = na
var float bottom_value_below_30 = na

// Identifikace začátku a konce období pro RSI14 > 70
if (rsi_14[1] > 70 and rsi_14[2] > 70)
    if na(rsi_above_70_start)
        rsi_above_70_start := bar_index
        top_value_above_70 := high
        bottom_value_above_70 := low
    else
        top_value_above_70 := math.max(top_value_above_70, high)
        bottom_value_above_70 := math.min(bottom_value_above_70, low)
else
    if not na(rsi_above_70_start)
        // box.new(left = rsi_above_70_start, right = bar_index - 1, top = top_value_above_70, bottom = bottom_value_above_70, border_color = color.red, border_width = 2, bgcolor=color.new(color.red, 90))
        rsi_above_70_start := na
        top_value_above_70 := na
        bottom_value_above_70 := na

// Identifikace začátku a konce období pro RSI14 < 30
if (rsi_14[1] < 30 and rsi_14[2] < 30)
    if na(rsi_below_30_start)
        rsi_below_30_start := bar_index
        top_value_below_30 := high
        bottom_value_below_30 := low
    else
        top_value_below_30 := math.max(top_value_below_30, high)
        bottom_value_below_30 := math.min(bottom_value_below_30, low)
else
    if not na(rsi_below_30_start)
        // box.new(left = rsi_below_30_start, right = bar_index - 1, top = top_value_below_30, bottom = bottom_value_below_30, border_color = color.green, border_width = 2, bgcolor=color.new(color.green, 90))
        rsi_below_30_start := na
        top_value_below_30 := na
        bottom_value_below_30 := na


Relationnée

Plus de