Stratégie bilatérale de canal de fluctuation de la ligne K


Date de création: 2024-01-31 10:24:00 Dernière modification: 2024-01-31 10:24:00
Copier: 1 Nombre de clics: 568
1
Suivre
1617
Abonnés

Stratégie bilatérale de canal de fluctuation de la ligne K

Aperçu

La stratégie du canal de fluctuation de la ligne K de rupture bilatérale consiste à calculer le milieu, le haut et le bas du canal, en combinant les indicateurs de tendance et les indicateurs de prix de mesure pour déterminer la direction et la force du marché, en mettant en place des signaux de rupture simultanément sur les deux côtés du canal, afin de réaliser le but principal de l’offre et de la demande.

Principe de stratégie

La stratégie est basée sur un canal de fluctuation de la ligne K basé sur la statistique. La voie du milieu de la voie utilise un algorithme de moyenne, la voie du haut et de la bas utilise une méthode de calcul de l’amplitude moyenne réelle, captant dynamiquement les limites des fluctuations des prix. Dans le même temps, la stratégie ajoute des règles de jugement sur le DMI et le volume des transactions, évitant ainsi les pertes de fausses ruptures.

Plus précisément, lorsque le prix pénètre dans le canal depuis la trajectoire descendante, la ligne +DI du DMI dépasse la ligne -DI et la ligne de référence ADX définie et génère un signal d’achat lorsque le volume de transaction est amplifié. Inversement, lorsque le prix pénètre dans le canal depuis la trajectoire descendante, la règle de jugement est inverse à celle ci-dessus et génère un signal de vente.

Analyse des avantages

Le plus grand avantage de cette stratégie est de capturer la direction de la rupture principale du prix. L’utilisation d’un jugement de rupture bilatéral permet d’éviter efficacement les situations de correction et de choc et de réduire le nombre de arrêts de perte.

De plus, l’introduction d’indicateurs auxiliaires comme le DMI et le volume de transactions joue également un bon rôle de filtrage pour éviter les faux signaux.

Analyse des risques

Le plus grand risque de la stratégie de rupture bilatérale réside dans l’incapacité de juger de la reprise des cours. Si la reprise des cours est de type V, le point de rupture peut être facilement déclenché. En outre, la mauvaise configuration des paramètres peut également avoir un impact négatif sur le système de négociation.

En ce qui concerne le risque, nous pouvons réduire le risque en optimisant davantage les paramètres de l’indicateur et en réduisant la marge de stop loss. Bien sûr, le système de négociation ne peut jamais éviter complètement les pertes, la clé est de contrôler le risque.

Direction d’optimisation

La stratégie a également un fort potentiel d’optimisation, principalement dans les domaines suivants:

  1. Paramètres d’optimisation, tels que la longueur du DI et de l’ADX du DMI, la périodicité et le réglage du multiplicateur du canal K

  2. Ajout de conditions de filtrage, telles que la combinaison d’autres indicateurs tels que MACD pour éviter les fausses percées

  3. Mise en place d’un suivi automatique des arrêts et des pertes, permettant de contrôler davantage les risques

  4. Optimisation des paramètres et des règles de filtrage pour les différentes variétés

Résumer

La stratégie de passage à travers les canaux de fluctuation de la ligne K est généralement un système de passage efficace. Elle permet de déterminer efficacement la direction et la force des principales tendances et a un grand potentiel d’optimisation et de contrôle des risques. Si elle est systématiquement améliorée et optimisée, la stratégie peut stabiliser les bénéfices à long terme.

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

//Original Idea by: Wunderbit Trading

//@version=5
strategy('Keltner Channel ETH/USDT 1H', overlay=true, initial_capital=1000, pyramiding=0, currency='USD', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.07)


/// TREND
ribbon_period = input.int(46, 'Period', step=1)

leadLine1 = ta.ema(close, ribbon_period)
leadLine2 = ta.sma(close, ribbon_period)

// p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT = leadLine2 < leadLine1
DT = leadLine2 > leadLine1

///////////////////////////////////////INDICATORS

// KELTNER //
source = close
useTrueRange = input(true)
length = input.int(81, step=1, minval=1)
mult = input.float(2.5, step=0.1)

// Calculate Keltner Channel
ma = ta.sma(source, length)
range_1 = useTrueRange ? ta.tr : high - low
rangema = ta.sma(range_1, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title='Middle', color=color.new(color.orange, 0))
p1 = plot(upper, title='Upper', color=color.new(color.orange, 0))
p2 = plot(lower, title='Lower', color=color.new(color.orange, 0))
fill(p1, p2, transp=90)


// DMI INDICATOR //
adxlen = 10  // input(10, title="ADX Smoothing")
dilen = input(19, title='DI Length')
keyLevel = 23  // input(23, title="key level for ADX")
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

benchmark = input.int(title='DMI Benchmark', defval=27, minval=1, step=1)

// plot(sig, color=color.red, title="ADX")
// plot(up, style=plot.style_histogram, color=color.green, title="+DI")
// plot(down, style=plot.style_histogram, color=color.red, title="-DI")
// plot(keyLevel, color=color.white, title="Key Level")

///////////////////////////////////////////////////////////


////////////////////////////////////////////////////Component Code Start

testStartYear = input(2019, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(31, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() => true
///// Component Code Stop //////////////////////////////////////////

//////////////// STRATEGY EXECUTION //////////////////////////

//LONG SET UP
// Take Profit / Stop Loss
long_tp1_inp = input.float(4.5, title='Long Take Profit 1 %', step=0.1) / 100
long_tp1_qty = input.int(15, title='Long Take Profit 1 Qty', step=1)

long_tp2_inp = input.float(20, title='Long Take Profit 2%', step=0.1) / 100
long_tp2_qty = input.int(100, title='Long Take Profit 2 Qty', step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_inp = input.float(4, title='Long Stop Loss %', step=0.1) / 100
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)


// STRATEGY CONDITION
// LONG
entry_long = open > lower and open < upper and close > upper and up > down and up > benchmark  //  and volume[0] > volume[1]
entry_price_long = ta.valuewhen(entry_long, close, 0)
SL_long = entry_price_long * (1 - long_sl_inp)
exit_long = close < lower or low < SL_long


// STRATEGY EXECUTION
if testPeriod()

    // LONG
    if UT
        strategy.entry(id='Long', direction=strategy.long, when=entry_long, comment='INSERT ENTER LONG COMMAND')
    strategy.exit('TP1', 'Long', qty_percent=long_tp1_qty, limit=long_take_level_1)  // PLACE TAKE PROFIT IN WBT BOT SETTINGS 
    strategy.exit('TP2', 'Long', qty_percent=long_tp2_qty, limit=long_take_level_2)  // PLACE TAKE PROFIT IN WBT BOT SETTINGS
    strategy.close(id='Long', when=exit_long, comment='INSERT EXIT LONG COMMAND')


//PLOT FIXED SLTP LINE
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='1st Long Take Profit')
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='2nd Long Take Profit')
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')