Myo_LS_D Stratégie quantitative

Auteur:ChaoZhang est là., Date: 2024-01-15 14:56:03 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie quantitative Myo_LS_D est une stratégie double piste de suivi stop-profit basée sur des positions longues et courtes. La stratégie combine plusieurs indicateurs tels que les moyennes mobiles, les percées de prix et les ratios risque-rendement pour construire des signaux de trading.

Principe

La stratégie se compose principalement d'un module de jugement de tendance, d'un module de position longue, d'un module de position courte, d'un module de suivi du stop profit, etc.

  1. Le module de jugement de tendance utilise le canal Donchain pour déterminer la direction générale de la tendance.

  2. Le module de position longue prend en compte des facteurs tels que les nouveaux sommets, les sommets, les positions moyennes mobiles longues, etc. Le module de position courte prend en compte les nouveaux sommets, les sommets, les positions moyennes mobiles courtes et d'autres facteurs.

  3. Le module de suivi stop profit utilise deux moyennes mobiles SMA de cycles différents pour suivre les changements de prix en temps réel. Lorsque le prix franchit la ligne moyenne mobile, la position est fermée pour le profit. Ce type de suivi en temps réel peut maximiser les profits de la tendance.

  4. Le paramètre de stop loss prend en compte le stop loss élargi pour maintenir le point de stop loss loin du niveau de support afin d'éviter d'être éliminé.

Analyse des avantages

L'avantage majeur de cette stratégie est la construction et le suivi séparés des positions longues et courtes et la stratégie d'arrêt des bénéfices.

  1. Les positions longues et courtes séparées peuvent maximiser les opportunités de profit en saisissant les opportunités de négociation de tendance unilatérale.

  2. Le suivi du stop profit permet d'obtenir une marge bénéficiaire plus élevée grâce à un ajustement en temps réel.

  3. Les arrêts élargis peuvent réduire la probabilité d'être éliminé et réduire le risque de pertes.

Risque et solutions

Les principaux risques de cette stratégie se concentrent sur les points suivants:

  1. L'optimisation peut être réalisée en ajustant de manière appropriée les paramètres de Donchain ou en ajoutant d'autres indicateurs pour le jugement.

  2. Le suivi du stop profit est trop agressif et peut arrêter prématurément le profit sans pouvoir maintenir les gains.

  3. La plage de stop loss est trop petite, ce qui peut augmenter la probabilité d'être éliminé.

Directions d'optimisation

Les principales orientations d'optimisation de cette stratégie sont les suivantes:

  1. Optimiser le module de jugement de tendance pour améliorer la précision du jugement.

  2. Ajustez la méthode de suivi du stop profit pour élargir davantage l'espace de profit. Par exemple, déplacer les lignes de stop profit proportionnellement.

  3. L'élargissement de la plage d'arrêt de perte ou l'examen des arrêts de rétrécissement peuvent réduire davantage la probabilité d'être éliminé.

  4. Les différentes variétés ont des paramètres différents. Des combinaisons optimales de paramètres peuvent être obtenues par la formation pour améliorer encore les rendements de la stratégie.

Résumé

En général, la stratégie Myo_LS_D est une stratégie quantitative de stop-profit à double piste relativement mature et stable. Elle présente des avantages évidents et des risques contrôlables. C'est l'une des solutions quantitatives qui méritent d'être maintenues à long terme. Les optimisations futures peuvent permettre une amélioration continue des performances pour en faire une stratégie quantitative encore plus supérieure.


/*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)

Plus de