Stratégie de prise de bénéfices basée sur des pistes doubles longues et courtes


Date de création: 2024-01-15 14:56:03 Dernière modification: 2024-01-15 14:56:03
Copier: 1 Nombre de clics: 626
1
Suivre
1617
Abonnés

Stratégie de prise de bénéfices basée sur des pistes doubles longues et courtes

Stratégie de quantification de Myo_LS_D

Aperçu

La stratégie de quantification Myo_LS_D est une stratégie de suivi et d’arrêt basée sur un binôme polyvalent. La stratégie utilise de manière intégrée plusieurs indicateurs tels que la ligne moyenne, la rupture des prix et le rapport de retour au risque pour construire un signal de négociation.

Principe de stratégie

La stratégie est principalement composée de modules de jugement de tendance, de modules de multiplication, de modules de blanchiment et de modules de suivi de blocage.

  1. Le module de jugement de tendance utilise le canal donchain pour juger de la direction de la tendance globale. Faire une entrée supplémentaire suppose d’être dans une tendance à la hausse, tandis qu’un coupon doit être dans une tendance à la baisse.

  2. Le module de multiplication prend en compte des facteurs tels que les nouveaux hauts, les nouveaux bas et la position de la moyenne de la ligne longue. Le module de blanchiment prend en compte des facteurs tels que les nouveaux hauts, les nouvelles bas et la position de la moyenne de la ligne courte. Cela garantit la construction de positions lors de la rupture des points critiques de prix vers le haut ou vers le bas.

  3. Le module Stop Tracking utilise la moyenne SMA de deux périodes différentes pour suivre en temps réel les variations de prix. Il s’arrête lorsque le prix est inférieur à la moyenne. Ce suivi en temps réel permet de maximiser les bénéfices de la tendance.

  4. Les paramètres d’arrêt de perte prennent en compte l’élargissement de l’arrêt, en veillant à ce que le point d’arrêt soit éloigné du support et à éviter d’être secoué.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans la construction d’entrepôts séparés en plusieurs endroits et la poursuite de la stratégie de blocage.

  1. La séparation de plusieurs espaces permet de maximiser les opportunités de profit dans une tendance unilatérale.

  2. Le suivi de l’arrêt permet d’obtenir un taux de profit plus élevé grâce à un ajustement en temps réel. Les gains sont considérablement améliorés par rapport aux méthodes d’arrêt traditionnelles.

  3. L’élargissement du stop-loss peut réduire la probabilité d’être secoué et le risque de perte.

Risques et solutions

Les principaux risques de cette stratégie sont concentrés dans les points suivants:

  1. Une erreur dans le jugement de la tendance peut entraîner une perte de position en cours de reprise. Les paramètres de la donchain peuvent être ajustés ou d’autres indicateurs peuvent être ajoutés pour optimiser le jugement.

  2. Le suivi des arrêts est trop radical et les arrêts anticipés peuvent ne pas être rentables de manière durable. L’optimisation peut être effectuée en augmentant de manière appropriée l’intervalle entre les arrêts et la ligne moyenne.

  3. La zone d’arrêt est trop petite, ce qui peut augmenter la probabilité d’une secousse. L’amplitude d’arrêt peut être étendue de manière appropriée pour réduire le risque.

Direction d’optimisation

Cette stratégie peut être améliorée principalement dans les domaines suivants:

  1. Optimiser les modules de jugement de tendance et améliorer l’exactitude des jugements. Vous pouvez envisager de combiner plus d’indicateurs tels que le MACD.

  2. Adapter le suivi des arrêts afin d’élargir encore davantage l’espace de profit. Par exemple, les arrêts peuvent être déplacés proportionnellement.

  3. Élargissez la zone d’arrêt ou envisagez de réduire la zone d’arrêt pour réduire encore plus la probabilité d’être secoué.

  4. Les variétés ont des paramètres différents et peuvent être entraînées pour obtenir la combinaison optimale de paramètres.

Résumer

La stratégie Myo_LS_D est globalement une stratégie d’arrêt de suivi multi-air plus mature et stable. Ses avantages sont évidents, ses risques sont contrôlables et c’est l’une des stratégies de quantification qui vaut la peine d’être utilisée à long terme.

Code source de la stratégie
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
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/
// © agresiynin

//@version=5
// ©Myo_Pionex
strategy(
 title                  =   "Myo_simple strategy_LS_D",
 shorttitle             =   "Myo_LS_D",
 overlay                =   true )


// var
lowest_price = ta.lowest(low, 200)
highest_price = ta.highest(high, 200)
min_800 = ta.lowest(low, 800)
max_800 = ta.highest(high, 800)
tp_target_L = min_800 + (max_800 - min_800) * math.rphi
tp_target_S = max_800 - (max_800 - min_800) * math.rphi
sl_length_L = input.int(100, "做多的止損長度", minval = 50, maxval = 300, step = 50)
sl_length_S = input.int(100, "做空的止損長度", minval = 50, maxval = 300, step = 50)
sl_L = lowest_price * (1 - 0.005)
sl_S = highest_price * (1 + 0.005)
rrr_L = tp_target_L - sl_L / sl_L
rrr_S = ta.lowest(low, 800) + ta.highest(high, 800) - ta.lowest(low, 800) * math.rphi / ta.highest(high, 200) + 0.005 * ta.highest(high, 200) - ta.lowest(low, 200) - 0.005 * ta.lowest(low, 200)
smalen1 = input.int(10, "做多追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2 = input.int(20, "做多追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
smalen1_S = input.int(5, "做空追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2_S = input.int(10, "做空追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
TrendLength_L = input.int(400, "做多趨勢線", options = [100, 200, 300, 400, 500])
TrendLength_S = input.int(300, "做空趨勢線", options = [100, 200, 300, 400, 500])
SMA1 = ta.sma(close, smalen1)
SMA2 = ta.sma(close, smalen2)
SMA1_S = ta.sma(close, smalen1_S)
SMA2_S = ta.sma(close, smalen2_S)
shortlength = input.int(20, "短期均價K線數量")
midlength = input.int(60, "中期均價K線數量")
longlength = input.int(120, "長期均價K線數量")
ShortAvg = math.sum(close, shortlength)/shortlength
MidAvg = math.sum(close, midlength)/midlength
LongAvg = math.sum(close, longlength)/longlength

// Trend
basePeriods = input.int(8, minval=1, title="趨勢基準線")
basePeriods_Short = input.int(26, "做空基準線")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
baseLine = donchian(basePeriods)
baseLine_Short = donchian(basePeriods_Short)
trend = request.security(syminfo.tickerid, "D", baseLine)
isUptrend = false
isDowntrend = false
baseLine_D = request.security(syminfo.tickerid, "D", baseLine)
plot(baseLine_D, color=#B71C1C, title="趨勢基準線")
if close[0] > baseLine_D
    isUptrend := true
if close[0] < baseLine_Short
    isDowntrend := true
// Long
// Condition
// entry
con_a = low > lowest_price ? 1 : 0
con_b = high > highest_price ? 1 : 0
con_c = close[0] > ta.sma(close, TrendLength_L) ? 1 : 0
con_d = isUptrend ? 1 : 0
con_e = rrr_L > 3 ? 1 : 0
con_a1 = close[0] > ShortAvg[shortlength] ? 1 : 0
con_b1 = close[0] > MidAvg[midlength] ? 1 : 0

// close
con_f = ta.crossunder(close, SMA1) and ta.crossunder(close, SMA2) ? 1 : 0
con_g = close < ta.lowest(low, sl_length_L)[1] * (1 - 0.005) ? 1 : 0

// exit
con_h = tp_target_L

// Main calculation
LongOpen = false
AddPosition_L = false

if con_a + con_b + con_c + con_e + con_a1 + con_b1 >= 4 and con_d >= 1
    LongOpen := true
// Short
// Condition
// entry
con_1 = high < highest_price ? 1 : 0
con_2 = low < lowest_price ? 1 : 0
con_3 = close[0] < ta.sma(close, TrendLength_S) ? 1 : 0
con_4 = isDowntrend ? 1 : 0
con_5 = rrr_S > 3 ? 1 : 0
con_11 = close[0] < ShortAvg[shortlength] ? 1 : 0
con_12 = close[0] < MidAvg[midlength] ? 1 : 0

// close
con_6 = ta.crossover(close, SMA1_S) and ta.crossover(close, SMA2_S) ? 1 : 0
con_7 = close > ta.highest(high, sl_length_S)[1] * (1 + 0.005) ? 1 : 0

// exit
con_8 = tp_target_S

// Main calculation
ShortOpen = false
AddPosition_S = false

if con_1 + con_2 + con_3 + con_4 + con_5 + con_11 + con_12 >= 5
    ShortOpen := true

//
// execute
//
strategy.initial_capital = 50000
if strategy.position_size == 0
    if LongOpen
        strategy.entry("Long Open" , strategy.long , comment= "Long Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])

if strategy.position_size > 0
    if (con_f > 0 or con_g > 0 or ShortOpen) and close <= baseLine_D
        strategy.close_all(comment="Close Long " + str.tostring(close[0]))

if strategy.position_size == 0
    if ShortOpen
        strategy.entry("Short Open" , strategy.short , comment= "Short Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])

if strategy.position_size < 0
    if (con_6 > 0 or con_7 > 0 or LongOpen) and close >= baseLine_D
        strategy.close_all(comment="Close Short " + str.tostring(close[0]))


plot(ta.sma(close, TrendLength_L), color=#e5c212, title="LTradeTrend")
plot(ta.sma(close, TrendLength_S), color=#1275e5, title="STradeTrend")
plot(SMA1, "SMA1", color = color.lime, linewidth = 2)
plot(SMA2, "SMA2", color = color.rgb(255, 0, 255), linewidth = 2)