Stratégie de trading du canal d'ondes Donchian


Date de création: 2023-11-08 12:31:56 Dernière modification: 2023-11-08 12:31:56
Copier: 0 Nombre de clics: 693
1
Suivre
1617
Abonnés

Stratégie de trading du canal d’ondes Donchian

Aperçu

La stratégie de négociation de la chaîne de fluctuation de Dongjian permet de juger de la tendance des prix actuels en calculant les chaînes de prix les plus hautes et les plus basses d’une période donnée, et de négocier long et court en combinaison avec des chaînes de rupture. La stratégie s’applique à la négociation d’actions et de monnaies numériques très volatiles.

Principe de stratégie

Cette stratégie construit des canaux en calculant les prix maximum pcmax et minimum pcmin du dernier cycle de l’histoire. Les méthodes de calcul de la trajectoire ascendante et descendante des canaux sont les suivantes:

La hauteur de la piste y = pcmax - (pcmax - pcmin) * (100 - percentDev)/100

Le débit est calculé en utilisant la formule suivante:

Le taux de participation est de 13%.

Un signal long est émis lorsque le prix atteint une hauteur; un signal short est émis lorsque le prix atteint une basse.

La manière dont les signaux de transactions spécifiques sont générés est la suivante:

  1. boundup = high > yh Déterminer si une rupture est survenue

  2. bounddn = low < yl Déterminer si une déviation a été effectuée

  3. upsign = sma(bounddn, 2) == 1 Déterminé par la moyenne de bounddn, le déraillement se poursuit

  4. dnsign = sma(boundup, 2) == 1 Déterminé par la moyenne de la boundup, le déraillement continue

  5. exitup = dnsign Dépassement de la voie ferrée générant un signal d’équilibre

  6. exitdn = upsign Dépassement de la voie descendante générant un signal d’équilibre

  7. if upsign Le signal de dérivation est généré par le signal de multiplication

  8. if dnsign Le déraillement génère un signal de vide

La stratégie impose également des heures de début et de fin pour éviter les positions inutiles du jour au lendemain.

Avantages stratégiques

  1. Les tendances sont mieux mesurées en utilisant le canal de Dongxian

  2. Il est possible de faire des transactions bidirectionnelles en réglant à la fois des signaux de prise et de retrait.

  3. Le filtrage homogène permet de juger les signaux et d’éviter les erreurs de transaction

  4. La mise en place d’une méthode de stop loss est facultative et permet de contrôler les risques.

  5. Réglez les heures de début et de fin pour éviter les risques de positions nocturnes

Risque stratégique

  1. Le canal de Dongjian est sensible aux paramètres history et percentDev et doit être optimisé pour s’adapter aux différentes variétés.

  2. Les tremblements de terre peuvent générer de faux signaux

  3. Le fait de ne pas tenir compte de la gestion des commandes peut avoir des conséquences sur les bénéfices

  4. Le risque de position exagérée sur un actif sans prise en compte des facteurs de gestion de position

  5. Les fonds de transaction doivent être raisonnablement placés dans le portefeuille sans tenir compte de la gestion des fonds

Orientation de l’optimisation de la stratégie

  1. Optimisation des paramètres history et percentDev pour une meilleure adaptation aux différentes variétés

  2. Ajout de filtres pour éviter les signaux erronés lors des secousses

  3. Ajout d’un module de gestion de position pour contrôler le pourcentage de capital occupé par une seule position

  4. Ajout d’un module de gestion des fonds, limitant le pourcentage de fonds occupés par les positions totales

  5. Ajout d’une fonctionnalité de gestion des commandes pour optimiser la commande

Résumer

La stratégie de négociation de la chaîne de fluctuation de Dongguan permet de juger les tendances et les signaux de négociation par la rupture de la chaîne, de mieux mesurer l’effet, tout en offrant une capacité de négociation bidirectionnelle. Cependant, la stratégie comporte également des risques et nécessite une optimisation des paramètres, des filtres, de la gestion des positions, de la gestion des fonds et de la gestion des commandes, etc., afin de stabiliser les bénéfices dans le monde réel.

Code source de la stratégie
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////
//  Copyright by AlexInc v1.0 02/07/2018  @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to 
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)

needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")


fromyear = input(2018, defval = 2018, 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")

bodymin = min( open, close)
bodymax = max(open, close)

pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)

yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin

plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)

//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)


exitup = dnsign
exitdn = upsign

lot = strategy.equity / close * capital / 100


xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na

stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])

stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])

pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
    stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
    stop_level_short = strategy.position_avg_price + nLoss
if pos == 0    
    stop_level_long = bodymin - nLoss
    stop_level_short = bodymax + nLoss

//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)

if upsign
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dnsign
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

if true
    strategy.close_all()


//if strategy.position_size != 0
//    strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
//    strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)