Strategie zur Überschneidung von Doppel gleitenden Durchschnitten mit mehrstufigen gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2023-09-19 21:27:31
Tags:

Übersicht

Diese Strategie erzeugt Handelssignale durch die Berechnung von Crossover von mehreren Arten von gleitenden Durchschnitten, die Umsetzung von doppelten MA-Crossover lang und kurz.

Strategie Logik

  1. Berechnen Sie zwei MA: MA1 und MA2, die sich aus SMA, EMA, VWMA usw. auswählen lassen. Die Längen sind anpassbar.

  2. Bestimmung der MA-Überschneidung: Long gehen, wenn MA1 über MA2 überschreitet, Close Position, wenn MA1 unter MA2 überschreitet.

  3. (Optional) Berechnen Sie einen dritten MA - MA3, normalerweise mit einer längeren Periode wie 50. Oben MA3 ist Aufwärtstrend, unten ist Abwärtstrend. Handel nur, wenn der Preis MA3 bricht.

  4. Kombinieren Sie die Regeln mit dem Backtest-Zeitrahmen, um Handelssignale zu generieren.

  5. Füll Farbe in die Kreuzungsflächen für die visuelle Unterstützung.

Die Strategie kombiniert die Trendverfolgung von MA und Crossover Long/Short mit einer dritten MA zur Risikokontrolle.

Analyse der Vorteile

  1. Der Dual-MA-Crossover folgt dem Trend.

  2. Unterstützt mehrere MA-Typkombinationen, kann für verschiedene Zeiträume optimiert werden.

  3. Die dritte MA kontrolliert Risiken und verringert unnötige Verluste.

  4. Visuelle Hilfsmittel verbessern das Charthandelserlebnis.

  5. Einstellbare Parameter können für verschiedene Zyklen optimiert werden.

  6. Einfache und klare Logik, leicht zu verstehen und zu befolgen.

Risikoanalyse

  1. Dual MA hat Probleme mit Szenarien mit Range-bound und Trendumkehrung.

  2. Dual MA kann manchmal falsche Signale oder Überreaktion erzeugen. Kann MA-Perioden verlängern oder Parameter optimieren.

  3. Der dritte MA kann fortgeschrittene Trends verpassen und seine Periode verkürzen, um mehr Gewinne zu erzielen.

  4. Kann nicht garantieren Siege für jeden Handel, benötigen ordnungsgemäße Stop-Loss-Management.

Optimierungsrichtlinien

  1. Versuche verschiedene MA-Typen und -Perioden für das beste Parameterpaar.

  2. Optimierung der dritten MA-Periode, um Risikokontrolle und Gewinngewinnung auszugleichen.

  3. Hinzufügen einer Stop-Loss-Strategie zur Kontrolle des Betrags eines einzelnen Verlustes.

  4. Betrachten Sie Algorithmen des maschinellen Lernens, um optimale Parameter zu finden, die auf Big Data basieren.

  5. Kombination mit anderen Indikatoren wie KD, MACD zur Signalfilterung und -bestätigung.

Zusammenfassung

Diese doppelte gleitende Durchschnitts-Crossover-Strategie mit Multi-Type-MAs beinhaltet Trend-Folgen, Risikokontrolle, Parameteroptimierung, visuelle Hilfsmittel und mehr. Mit kontinuierlichem Testen und Optimieren, Einführung anderer Indikatoren oder maschinelles Lernen usw. kann sie sich besser an den Markt anpassen und hat einen großen praktischen Wert. Zusammenfassend ist dies eine einfache, praktische und leicht optimierbare Strategie, die es zu einem großartigen Ausgangspunkt für algorithmischen Handel macht.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
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/
// © HAMIDBOX

//@version=4
strategy("Multi-X by HAMID-BOX", overlay=true)

maType(source , length, type)   =>
    type    == "SMA"            ? sma(source , length)  :
     type   == "EMA"            ? ema(source , length)  :
     type   == "RMA"            ? rma(source, length)   : 
     type   == "WMA"            ? wma(source, length)   :
     type   == "VWMA"           ? vwma(source, length)  :
     na
     
////////////////////////////////////////////////////////////////////////////////
colorup             = #11ff00
colordn             = #e91e63

/////////////////////////// MOVING AVERAGE №1 INPUTS ///////////////////////////
ma1_show            = input(title="MA №1", defval=true, type=input.bool, inline="ma1")
ma1type             = input(title="", defval="EMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma1")
ma1src              = input(title="", defval=close, type=input.source, inline="ma1")
ma1Len              = input(title="", defval=9, type=input.integer, inline="ma1")
ma1col              = input(colorup, "", type=input.color, inline="ma1")

ma1                 = maType(ma1src, ma1Len, ma1type)

ma1p = plot(ma1_show ? ma1 : na, linewidth=1, color=color.new(ma1col , 50))

/////////////////////////// MOVING AVERAGE №2 INPUTS ///////////////////////////
ma2_show            = input(title="MA №2", defval=true, type=input.bool, inline="ma2")
ma2type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma2")
ma2src              = input(title="", defval=close, type=input.source, inline="ma2")
ma2Len              = input(title="", defval=21, type=input.integer, inline="ma2")
ma2col              = input(colordn, "", type=input.color, inline="ma2")

ma2                 = maType(ma2src, ma2Len, ma2type)

ma2p = plot(ma2_show ? ma2 : na, linewidth=1, color=color.new(ma2col , 50))

/////////////////////////// MOVING AVERAGE №3 INPUTS ///////////////////////////

read                = input(title="For Safe Side = Read This >>>", defval=true, tooltip="If you want to play on the safe side, Check ON Moving Average № 3, MA №3 shows the major trend, its work as a Trend-Zone,\nRule: Do not open trades if the market is below MA № 3, WHY? because Trend is Bearish and it will make more Down, NOTE:: It is possible after adding MA № 3, it will give you a small profit. But the great advantage of that, it will reduce your loss and it will also increase your Profit Factor.\nAnd if you not have any issue with Risk then you can Leave Moving Average No 3")
ma3_show            = input(title="MA №3", defval=false, type=input.bool, inline="ma3")
ma3type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma3")
// ma3srcH          = input(title="", defval=high, type=input.source, inline="ma3")
// ma3srcL          = input(title="", defval=low, type=input.source, inline="ma3")
ma3Len              = input(title="", defval=50, type=input.integer, inline="ma3")
ma3col              = input(colordn, "", type=input.color, inline="ma3")

ma3H                = maType(high, ma3Len, ma3type)
ma3L                = maType(low, ma3Len, ma3type)

ma3p                = plot(ma3_show ? ma3H : na, linewidth=1, color=color.new(ma3col , 50))
ma3p2               = plot(ma3_show ? ma3L : na, linewidth=1, color=color.new(ma3col , 50))

Bigcross_zone_color = if ma3_show and close > ma3H
    color.new(colorup , 90)
else
    if ma3_show and close < ma3L
        color.new(colordn , 90)
fill(ma3p , ma3p2, color=Bigcross_zone_color, title="Cross Background Color")

BigCrossSignal      = close > ma3H
ZoneCrossover       = crossover(close , ma3H)
///////////////////////////// BACK TESTING INPUTS //////////////////////////////
startTime           = input(title="Start Time", type=input.time, defval= timestamp("01 Jan 2021"))
endTime             = input(title="End Time", type=input.time, defval= timestamp("01 Jan 2100"))
inDateRange         = true

//////////////////////////// PLOTING AND COOLORING /////////////////////////////
Cross               = input(true, "Cross Sign ON/OFF") 
maCrossOver         = crossover(ma1 , ma2)
maCrossUnder        = crossunder(ma1 , ma2)
cross_zone_color    = ma1 > ma2 ? color.new(colorup , 85) : color.new(colordn , 85)

plotshape(Cross ? maCrossOver : na, title="CrossUP Sign", style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(Cross ? maCrossUnder : na, title="CrossDN Sign", style=shape.xcross, location=location.abovebar, color=#e91e63, size=size.tiny)

fill(ma1p , ma2p, color=cross_zone_color, title="Cross Background Color")

///////////////////////////////// (CONDITIONS) /////////////////////////////////

if maCrossOver and inDateRange
    if ma3_show
        strategy.entry("BUY", strategy.long, when=BigCrossSignal)
    else    
        strategy.entry("BUY", strategy.long)

if  ma3_show
    strategy.entry("BUY", strategy.long, when=ZoneCrossover)

if maCrossUnder and inDateRange
    strategy.close("BUY", comment="Exit")
if (not inDateRange)
    strategy.close_all()





Mehr