Stratégie de trading quantitatif Cloner Yin Yang


Date de création: 2023-09-27 17:11:30 Dernière modification: 2023-09-27 17:11:30
Copier: 0 Nombre de clics: 733
1
Suivre
1617
Abonnés

Aperçu

La stratégie de trading quantitatif clon est une stratégie de trading de courte ligne basée sur la relation entre le cours et la quantité d’une journée. Cette stratégie utilise les informations sur la direction du jour et de la nuit des transactions d’actions d’une journée, combinées à des signaux de confirmation de la quantité, pour réaliser des opérations de courte ligne à faible risque.

Principe de stratégie

Cette stratégie permet de générer des blocs Renko en calculant les prix d’ouverture, de fermeture, de sommet et de basse de chaque jour, en combinaison avec l’indicateur ATR.

Plus précisément, la stratégie commence par calculer le prix d’ouverture o2 et le prix de clôture c2 de la pièce Renko. Si o2c2, il s’agit d’un signe négatif.

Afin de filtrer les fausses ruptures, la stratégie calcule également le nombre de cycles de l’axe et de l’axe négatifs précédents, et le signal est plus fiable si le nombre de cycles de l’axe est plus élevé. En outre, la stratégie définit également la logique de stop-loss après les achats et les ventes.

Avantages stratégiques

  1. Les blocs Renko ont été utilisés pour filtrer le bruit du marché et rendre les signaux de trading plus clairs.

  2. La combinaison de ces deux facteurs a permis d’éviter le risque de fausses percées.

  3. Le modèle DAPM est simple, efficace et adapté aux opérations de courte durée.

  4. Les paramètres ATR personnalisables permettent d’ajuster la fréquence des transactions.

  5. Une stratégie de stop-loss personnalisable pour optimiser la gestion des risques.

Analyse des risques

  1. Il y a toujours un risque de fausses incursions dont la tendance n’est pas claire.

  2. Une mauvaise configuration des paramètres de Renko peut entraîner une perte de tendance ou une augmentation de la fréquence des transactions.

  3. Un arrêt trop petit peut entraîner des pertes mineures.

Direction d’optimisation

  1. Le filtrage des signaux peut être envisagé en combinaison avec d’autres indicateurs techniques.

  2. On peut envisager d’ajouter des fonctions d’arrêt mobile ou de suivi des pertes.

  3. Tests d’optimisation pour différents paramètres de variété

  4. Il est possible d’envisager une combinaison de différentes périodes de temps pour effectuer des transactions sur plusieurs périodes.

Résumer

Cette stratégie est une stratégie de trading de courte ligne très pratique dans l’ensemble. Elle utilise les relations de quantité et de prix pour filtrer efficacement et peut capturer les points critiques de la hausse et de la baisse des prix de la courte ligne.

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

//@version=4
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/
// © dman103
strategy(title="Renko Strategy V2", shorttitle="Renko Strategy V2", overlay=true,precision=3, commission_value=0.025, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)
// Version 2.0 of my previous renko strategy using Renko calculations, this time without Tilson T3 and without using security with Renko to remove repaints!
// Seems to work nicely on cryptocurrencies on higher time frames.

//== Description ==
// Strategy gets Renko values and uses renko close and open to trigger signals.
// Base on these results the strategy triggers a long and short orders, where green is uptrending and red is downtrending.
// This Renko version is based on ATR, you can Set ATR (in settings) to adjust it.

// == Notes ==
// Supports alerts.
// Supports backtesting time ranges.
// Shorts are disabled by default (can be enabled in settings).
// Link to previous Renko strategy V1: https://www.tradingview.com/script/KeWBWLGT-Renko-Strategy-T3-V1/
//
// Stay tuned for version V3 in the future as i have an in progress prototype, Follow to get updated: https://www.tradingview.com/u/dman103/#published-scripts

// === INPUT BACKTEST RANGE ===
useDate = input(true,     title='---------------- Trade Range ----------------', type=input.bool)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2099, title = "To Year", minval = 2010)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create 

settings = input(true,     title='---------------- Settings ----------------', type=input.bool)

allow_short = input(false,title="Allow Short")
atr_len = input(10,"ATR Length")

atr = atr(atr_len)
// Thanks to renko snippet calculations from @RafaelZioni  https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/
Renko1() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1
Renko2() =>
    p2 = 0.0
    Br_1 = Renko1()
    p2 := Renko1() != Renko1()[1] ? Br_1[1] : nz(p2[1])
    p2

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

Renko4() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

o2 = Renko4()
c2 = Renko1()
l2 =low
h2 = high

//=== Plotting ===

crossPlot= 0.0
if (o2 < c2)
    crossPlot :=o2
else 
    crossPlot := o2

// Used to make sure that even if o2 and c2 are equal, the result (short or long) will be based on previous trend.
bars_since_up=barssince(o2 < c2)
bars_since_down=barssince(o2 > c2)
go_long= (bars_since_up<bars_since_down) and  o2<c2
go_short = (bars_since_up>bars_since_down) and o2>c2
plotColor = go_long and  o2<c2 ? color.green : go_short and o2>c2?  color.red : color.white 
plot(crossPlot, color = plotColor, style = plot.style_circles, linewidth = 2,join=true)
changeCond = plotColor != plotColor[1]

//=== Buy/Sell ===
closeStatus =  strategy.openprofit > 0 ? "win" : "lose"
long_entry = plotColor == color.green and window()  and changeCond
long_exit_entry = plotColor == color.red //or (allow_alternative_sl and close < low_result  )
short_entry = plotColor == color.red  and window() and changeCond
short_exit_entry = plotColor == color.green   // or (allow_alternative_sl and close > high_result )

strategy.entry("long", true, when = long_entry)
strategy.close("long",when=long_exit_entry,comment=closeStatus)

if (allow_short)
    strategy.entry("short",false, when = short_entry)
strategy.close("short",when=short_exit_entry,comment=closeStatus)
//=== Alerts ===
alertcondition(go_long and changeCond , title='Renko Buy Signal', message='Renko Revered to Buy Signal')
alertcondition(go_short and changeCond , title='Renko Sell Signal', message='Renko Revered to Sell Signal')