Myo_LS_D Quantitative Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-15 14:56:03
Tags:

img

Übersicht

Die Myo_LS_D-Quantitative Strategie ist eine doppelspurige Stop-Profit-Strategie, die auf Long- und Short-Positionen basiert. Die Strategie kombiniert mehrere Indikatoren wie gleitende Durchschnitte, Preisdurchbrüche und Risiko-Rendite-Verhältnisse, um Handelssignale zu erstellen. Sie erzielt eine hohe Gewinnrate und Gewinnrate auf der Grundlage eines genauen Trendurteils.

Grundsätze

Die Strategie besteht hauptsächlich aus einem Trendbeurteilungsmodul, einem Long-Positionsmodul, einem Short-Positionsmodul, einem Stop-Profit-Tracking-Modul usw.

  1. Das Trendbeurteilungsmodul verwendet den Donchain-Kanal, um die allgemeine Trendrichtung zu bestimmen.

  2. Das Long-Positionsmodul berücksichtigt Faktoren wie neue Höchstwerte, Tiefstände, lange gleitende Durchschnittspositionen usw. Das Short-Positionsmodul berücksichtigt neue Höchstwerte, Tiefstände, kurze gleitende Durchschnittspositionen und andere Faktoren. Dies stellt die Eröffnung von Positionen bei einem Durchbruch kritischer Preispunkte nach oben oder unten sicher.

  3. Das Tracking-Stop-Profit-Modul verwendet zwei SMA- gleitende Durchschnitte verschiedener Zyklen, um Preisänderungen in Echtzeit zu verfolgen.

  4. Die Einstellung des Stop-Loss berücksichtigt einen vergrößerten Stop-Loss, um den Stop-Loss-Punkt weit von der Unterstützungsstufe entfernt zu halten, um zu vermeiden, dass er ausgeschlagen wird.

Analyse der Vorteile

Der größte Vorteil dieser Strategie ist die getrennte Errichtung und Verfolgung von Long- und Short-Positionen sowie die Stop-Profit-Strategie.

  1. Trennung von Long- und Short-Positionen kann die Gewinnchancen maximieren, indem einseitige Trendhandelsmöglichkeiten genutzt werden.

  2. Durch die Echtzeit-Anpassung kann durch das Tracking von Stop-Profit eine höhere Gewinnspanne erzielt werden.

  3. Erweiterte Stopps können die Wahrscheinlichkeit verringern, dass man ausgeschaltet wird und das Risiko von Verlusten verringern.

Risiken und Lösungen

Die wichtigsten Risiken dieser Strategie konzentrieren sich auf folgende Punkte:

  1. Eine falsche Trendbeurteilung kann zu entgegengesetzten Positionen und Verlusten führen.

  2. Die Verfolgung von Stop-Profit ist zu aggressiv und kann den Gewinn vorzeitig stoppen, ohne dass Gewinne aufrechterhalten werden können.

  3. Der Stop-Loss-Bereich ist zu klein, was die Wahrscheinlichkeit erhöhen kann, dass Sie ausgeschaltet werden.

Optimierungsrichtlinien

Die wichtigsten Optimierungsrichtungen für diese Strategie sind:

  1. Optimieren Sie das Trendbeurteilungsmodul, um die Richtigkeit der Beurteilung zu verbessern.

  2. Anpassen der Stop-Profit-Verfolgungsmethode, um den Gewinnraum weiter zu erweitern.

  3. Durch die Erweiterung des Stop-Loss-Bereichs oder die Berücksichtigung von Schrumpf-Stops kann die Wahrscheinlichkeit, ausgeschaltet zu werden, weiter reduziert werden.

  4. Dabei werden die verschiedenen Varietäten unterschiedliche Parameter aufweisen, wobei durch Schulungen optimale Parameterkombinationen erzielt werden können, um die Strategierenditen weiter zu verbessern.

Zusammenfassung

Im Allgemeinen ist die Myo_LS_D-Strategie eine relativ ausgereifte und stabile Dual-Track-Tracking-Stop-Profit-Quantitative-Strategie. Sie hat offensichtliche Vorteile und kontrollierbare Risiken. Sie ist eine der quantitativen Lösungen, die es wert sind, langfristig gehalten zu werden. Zukünftige Optimierungen können eine kontinuierliche Leistungsverbesserung ermöglichen, um sie zu einer noch überlegeneren quantitativen Strategie zu machen.


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

Mehr