Stratégie de trading de tendance Ruda Momentum

EMA OBV
Date de création: 2024-04-03 15:16:47 Dernière modification: 2024-04-03 15:16:47
Copier: 0 Nombre de clics: 700
1
Suivre
1617
Abonnés

Stratégie de trading de tendance Ruda Momentum

Aperçu

La stratégie de trading Ruda est une stratégie de trading quantitative basée sur la dynamique et les indicateurs de tendance. Elle utilise des indicateurs tels que l’OBV (On Balance Volume), l’EMA (Exponential Moving Average) et le ratio d’entités de la ligne K pour juger du moment de l’achat et de la vente.

Principe de stratégie

  1. Calculer deux lignes EMA, dont l’EMA à court terme est de 5 et l’EMA à long terme est de 21. Lorsque l’EMA à court terme est porté sur l’EMA à long terme, on considère que la tendance est à la hausse, alors que la tendance est à la baisse.
  2. Pour le calcul de l’indicateur OBV, on considère que l’énergie polyvalente est forte lorsque l’OBV atteint un nouveau sommet de 10 jours.
  3. Calculer le pourcentage d’entités de la ligne K. La tendance est considérée comme établie lorsque le pourcentage d’entités est supérieur à la valeur de seuil définie (default 50%).
  4. Lorsqu’une tendance à la hausse est forte et qu’une tendance est établie, la stratégie consiste à acheter au prix d’ouverture du jour suivant, avec un prix d’arrêt correspondant au prix le plus bas du jour et au moins 1% du prix d’ouverture.
  5. La stratégie de plafonnement est utilisée lorsque le prix dépasse le stop loss ou la clôture du cours de la bourse au-dessus de l’EMA à court terme.

Analyse des avantages

  1. La combinaison de la tendance et de l’indicateur de dynamisme permet de capturer les variétés les plus fortes.
  2. L’utilisation d’achats et de stop-loss dynamiques au cours de l’ouverture du jour suivant permet d’éviter certaines fausses ruptures.
  3. Les conditions d’arrêt et d’arrêt sont claires et le risque est maîtrisé.

Analyse des risques

  1. Les indicateurs de tendance et de dynamisme sont en retard, ce qui peut entraîner des achats excessifs et des arrêts de pertes prématurés.
  2. Les paramètres sont fixes, il n’y a pas d’adaptabilité et les performances peuvent varier considérablement selon les conditions du marché.
  3. La stabilité et l’applicabilité de la stratégie doivent encore être vérifiées dans le cadre de la revue du marché unique et des variétés.

Direction d’optimisation

  1. Optimiser les paramètres des indicateurs de tendance et de dynamique pour améliorer la sensibilité et l’efficacité des indicateurs.
  2. Introduire des paramètres d’ajustement en fonction de la dynamique des caractéristiques du marché actuel pour juger de l’état du marché.
  3. Élargir la portée des revues, augmenter les tests sur différents marchés et variétés, améliorer la robustesse des stratégies.
  4. Envisagez d’introduire des modules de gestion des positions et de contrôle des risques pour améliorer le ratio risque/revenu.

Résumer

La stratégie de trading Ruda Dynamic Trend est une stratégie de trading quantitative simple et facile à utiliser, capable de capturer des variétés et des opportunités de tendance puissantes grâce à la combinaison de tendances et d’indicateurs dynamiques. Cependant, la stratégie présente également certaines limites, telles que le retard des indicateurs, la fixation des paramètres, etc.

Code source de la stratégie
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lhcbenac

//@version=5
strategy('Ruda_Strategy', overlay=true , initial_capital=5000 , pyramiding = 3, commission_type =  strategy.commission.cash_per_contract , commission_value =  1 )

//
// 
////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    Otimizações                     //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
//
// 

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                 Codigo Operacional                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
//
//
// Indica situação de Compra ou Venda

// Condição True or False 
YEAR_BT= input.int(1,title="Nº Anos ", group = "Backtest")

INPUT_ME1 = input.int(5,title="Momentum ", group = "RUDA")
INPUT_ME2 = input.int(21,title="Trend ", group = "RUDA")
INPUT_CORPO = input.int(50,title="CORPO ", group = "RUDA")/100



v_obv = ta.obv
v_med1 = ta.ema(close , INPUT_ME1)
v_med2 = ta.ema(close , INPUT_ME2)
valid_1 = v_med1 > v_med2 
valid_2 = v_obv >= ta.highest(v_obv[1], 10)
valid_3 = math.abs(close - open) / (high-low) > INPUT_CORPO
plot(v_med1)
plot(v_med2)

compra = valid_1 and valid_2 and  strategy.position_size == 0 and valid_3


var float v_minima_ref = na

dataInicio = timestamp(year(timenow) - YEAR_BT, month(timenow), dayofmonth(timenow), 00, 00)

// Variáveis globais
var float preco_entrada = na
var float preco_stop = na

if compra and time >= dataInicio and ta.change(time("D")) != 0 and ta.change(compra)  
    v_minima_ref := low
    preco_entrada := open
    preco_stop := math.min(low, open - 0.01 * open)
    strategy.entry("Compra", strategy.long , stop = preco_stop )
    if (not na(preco_entrada) and not na(preco_stop))
        label.new(x=bar_index, y= low * 0.9, text= "Dia: " + str.tostring(dayofmonth) + "\nPreço de Entrada: " + str.tostring(preco_entrada) + "\nPreço de Stop Loss: " + str.tostring(preco_stop), style=label.style_label_up, color=color.green)

    
    
// Lógica de saída
// Saída no stop loss
if (not na(preco_stop) and low < preco_stop and ta.change(low) < 0)
    strategy.close("Compra", comment="Saída no Stop")

// Saída no lucro
if (close < v_med1 and ta.change(close) < 0)
    strategy.close("Compra", comment="Saída na Media")

venda =( (not na(preco_stop) and low < preco_stop and ta.change(low) < 0) or (close < v_med1 and ta.change(close) < 0) ) and strategy.position_size > 0
codiff = compra ? 1 : venda ? -1 : na 
plotarrow(codiff, colorup=#00c3ff, colordown=#ff0062,title="Compra", maxheight=20, offset=0)