
Diese Strategie erzeugt Kauf- und Verkaufssignale durch den Vergleich von Schnell- und Langzeilenkreuzungen des MACD-Indikators. Beim Erstellen eines Kaufsignals wird eine Position mit einem bestimmten Prozentsatz an Kontointeressen eröffnet. Anschließend werden Positionen zu bestimmten Rücknahmepunkten hinzugefügt.
Die Kernlogik dieser Strategie besteht darin, die Trends durch den Vergleich von MACD-Schnell- und Schnelllinie-Kreuzungen zu bestimmen. Die MACD ist die Differenz zwischen den Moving Averages, die Markttrends und -energien durch die Berechnung der Differenz zwischen den kurz- und langfristigen Durchschnittswerten bestimmen. Die Schnell- und Schnelllinie-Kreuzungen sind die Gold- und die Todesforken.
Wenn die schnelle Linie die langsame Linie durchbricht, entsteht ein Goldfork, was bedeutet, dass der Markt in einem rückläufigen Trend ist, und die Strategie wird mehr Positionen eröffnen. Wenn die schnelle Linie die langsame Linie durchbricht, entsteht ein Todesfork, was eine rückläufige Tendenz bedeutet, und die Strategie wird leer sein.
Nach der Eröffnung der Position, die Strategie wird in bestimmten Rückzugspunkten zu übernehmen oder zu kürzen. Dies kann durch die Martingale-Prinzip gewinnbringende Raum erhöhen. Wenn die Positionen die kumulierte Gewinn erreicht die konfigurierte Stop-Through-Punkt, die Strategie wird alles zu verkaufen oder zu kaufen, um die Position zu beenden.
Diese Strategie hat folgende Vorteile:
Der MACD ist ein klassischer und zuverlässiger Indikator für die technische Analyse.
Die Risiken eines einzelnen Handels können durch die Einführung von Lagerstätten in Gruppen kontrolliert werden.
Die zusätzlichen Positionen erweitern die Gewinnspanne durch den Martingale-Prinzip.
Die Konfigurierung von Stop-Points zur Verringerung von Verlusten.
Es gibt einige Risiken bei dieser Strategie:
Der MACD-Indikator ist nicht perfekt in der Vorhersage der Marktentwicklung und kann falsche Signale geben.
Es besteht die Gefahr, dass die Positionen, die für die gesamte Position hinzugefügt wurden, zurückgezogen oder ausgeweitet werden. Der Prozentsatz der Positionen, die für jede zusätzliche Position hinzugefügt wurden, kann entsprechend angepasst werden.
Eine zu kleine Einstellung des Stopppunkts kann zu einer Einschränkung des Gewinnraums führen. Kann je nach Sorte angepasst werden.
Der Anteil der geöffneten Lagerbestände muss angemessen aufgeteilt werden, damit die Transaktionen für einzelne Sorten die Kontolimits nicht überschreiten.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Testen Sie MACD-Indikatoren mit verschiedenen Parametern, um die für bestimmte Handelsarten geeigneten Indikatoren zu finden.
Optimieren Sie den Prozentsatz der Gelder, die für jede zusätzliche Position eröffnet werden, und die Parameter für die Rücknahme, um die optimale Kombination zu finden.
Es werden die Parameter für die Betriebsstopppunkte für die langen und kurzen Linien getestet, um die optimale Stufenstufe zu bestimmen.
Beurteilung der Fähigkeit des Kontos, Gewinne zu erzielen und eine angemessene Höchstgrenze für eine einzelne Sorte festzulegen.
Steigerung der Stop-Loss-Logik. Wenn der Markt stark wechselt, kann der Stop-Loss die Verluste effektiv kontrollieren.
Diese Strategie ist eine typische Trend-Tracking-Strategie. Sie nutzt die MACD-Indikatoren, um die Richtung der Markttrends zu bestimmen. Sie nimmt die Trends in Form von Batch-Haufungen auf und verlässt den Markt, wenn die Gewinne ein bestimmtes Niveau erreicht haben.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
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/
// © TradingSoft_tech
//@version=5
strategy("MAPM-V1", overlay=true, default_qty_value=10, max_bars_back=5000,default_qty_type = strategy.percent_of_equity, commission_value=0.1, initial_capital = 100, pyramiding=6, currency=currency.USD)
///////// Options
SignalFast = input.int(300, step=10)
SignalSlow = input.int(600, step=10)
StepAddPurchases = input.float(2.5, step=0.1)
VolumePurchases = input.int(6,step=1)
Buy = input(true)
Sell = input(true)
longProfitPerc = input.float(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01
shortProfitPerc = input.float(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01
Martingale = input.float(1.6, minval = 1, step = 0.1)
VolumeDepo = input.int(100, step=1)
PercentOfDepo = input.float(10, step=1)
Close = (close)
EnterVolume = VolumeDepo*PercentOfDepo*0.01/Close
///////// Calculation indicator
fastAverage = ta.ema(close, 8)
slowAverage = ta.ema(close, 49)
macd = fastAverage - slowAverage
macdSignalF = ta.ema(macd,SignalFast)
macdSignalS = ta.ema(macd,SignalSlow)
// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)
//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)
timeRange = time > startTest and time < endTest ? true : false
///////// Plot Data
//plot(macd, style = plot.style_histogram)
//plot(macdSignalF*10000, style = plot.style_line, color=color.red)
//plot(macdSignalS*10000, style = plot.style_line, color=color.blue)
//plot(fastAverage, style = plot.style_line, color=color.red)
//plot(slowAverage, style = plot.style_line, color=color.blue)
///////// Calculation of the updated value
var x = 0.0
if strategy.opentrades>strategy.opentrades[1]
x := x + 1
else if strategy.opentrades==0
x := 0
y = x+1
///////// Calculation of reference price data
entryPrice = strategy.opentrades==0? 0 : strategy.opentrades.entry_price(0)
limitLong = strategy.position_avg_price * (1 + longProfitPerc)
limitShort = strategy.position_avg_price * (1 - shortProfitPerc)
SteplimitLong = entryPrice[0]*(1-StepAddPurchases*y/100)
SteplimitShort = entryPrice[0]*(1+StepAddPurchases*y/100)
///////// Conditions for a long
bool EntryLong = ta.crossover(macdSignalF, macdSignalS) and Buy and strategy.opentrades==0 and strategy.position_size==0
bool PurchasesLong = Buy and strategy.opentrades==x and strategy.position_size>0 and x<=VolumePurchases
bool CancelPurchasesLong = strategy.position_size==0 and strategy.opentrades==0
bool TPLong = strategy.position_size>0 and strategy.opentrades!=0
///////// Entry Long + add.purchases + cancel purchases + Take profit Long
switch
EntryLong => strategy.entry("Entry Long", strategy.long, qty = EnterVolume)
PurchasesLong => strategy.entry("PurchasesLong", strategy.long, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitLong)
CancelPurchasesLong => strategy.cancel("PurchasesLong")
switch
TPLong => strategy.exit("TPLong", qty_percent = 100, limit = limitLong)
///////// Conditions for a Short
bool EntryShort = ta.crossunder(macdSignalF, macdSignalS) and Sell and strategy.opentrades==0 and strategy.position_size==0
bool PurchasesShort = Sell and strategy.opentrades==x and strategy.position_size<0 and x<=VolumePurchases
bool CancelPurchasesShort = strategy.position_size==0 and strategy.opentrades==0
bool TPShort = strategy.position_size<0 and strategy.opentrades!=0
///////// Entry Short + add.purchases + cancel purchases + Take profit Short
switch
EntryShort => strategy.entry("Entry Short", strategy.short, qty = EnterVolume)
PurchasesShort => strategy.entry("PurchasesShort", strategy.short, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitShort)
CancelPurchasesShort => strategy.cancel("PurchasesShort")
switch
TPShort => strategy.exit("TPShort", qty_percent = 100, limit = limitShort)
/////////Calculation of conditions and reference data for level drawing
InTradeLong = strategy.position_size<0
InTradeShort = strategy.position_size>0
PickInLong = strategy.opentrades.entry_price(0)*(1-StepAddPurchases*y/100)
PickInShort = strategy.opentrades.entry_price(0)*(1+StepAddPurchases*y/100)
/////////Displaying the level of Take Profit
plot(InTradeLong ? na : limitLong, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1)
plot(InTradeShort ? na : limitShort, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1)
/////////Displaying the level of add.purchases
plot(InTradeLong ? na : PickInLong, color=color.white, style=plot.style_linebr, linewidth=1)
plot(InTradeShort ? na : PickInShort, color=color.white, style=plot.style_linebr, linewidth=1)