Diese Strategie konzipiert eine langfristige Handelsstrategie, die das Risiko jedes Handels auf der Grundlage des MACD-Indikators kontrolliert. Im Vergleich zu traditionellen Long-Short-Flipping-Strategien konzentriert sich diese Strategie mehr auf die Kontrolle des Risikos jedes Handels. Durch die Berechnung angemessener Stop-Loss- und Take-Profit-Levels und die Festlegung geeigneter Positionsgrößen begrenzt sie den maximalen Verlust für jeden Handel. Dies kann die Ziehungen effektiv kontrollieren und langfristig stabile Gewinne erzielen.
Die Strategie berechnet zunächst die MACD-Linie und die Signallinie des MACD-Indikators. Wenn die MACD-Linie über die Signallinie kreuzt, wird sie als Kaufsignal bestimmt. Um falsche Ausbrüche auszufiltern, benötigt die Strategie Barsince ((crossover ((macd_line, signal_line)) <= 5, was bedeutet, dass der Ausbruch innerhalb der letzten 5 Bars stattgefunden hat. Sie benötigt auch, dass sowohl die MACD- als auch die Signallinien unter 0 liegen, was eine Überverkaufszone anzeigt, und der Close über der WMA-Linie liegt, was einen Aufwärtstrend anzeigt. Wenn die oben genannten Bedingungen erfüllt sind, wird eine Long-Position eröffnet.
Für jeden Trade berechnet die Strategie einen angemessenen Stop-Loss und Take-Profit-Level. Der Stop-Loss wird auf das niedrigste der letzten 3 Bars gesetzt. Der Take-Profit wird auf den Einstiegspreis plus das Vierfache der Entfernung zwischen dem Stop-Loss und dem Einstiegspreis gesetzt.
Der Schlüssel ist, dass die Strategie die spezifische Positionsgröße anhand des maximalen erschwinglichen Risikos berechnet. Der Parameter capital_risk legt den Prozentsatz des Gesamtkapitals fest, der für jeden Handel verloren gehen kann. Die Positionsgröße in USD wird dann anhand des Stop-Loss-Bereichs berechnet. Sie wird dann in Verträge zur Ausführung umgewandelt.
Das Risiko eines jeden Handels wird innerhalb von 1% des Gesamtkapitals kontrolliert, wodurch Effektivität der Abzüge kontrolliert werden kann.
Mögliche Verbesserungen:
Diese Strategie bestimmt die Trendrichtung mithilfe des MACD und nimmt die Risikokontrolle als Priorität für den Handel mit einer optimierten Positionsgröße. Die Schlüssel sind die Risikokontrolle und die Positionsgröße, die langfristig stabile Gewinne erzielen können. Aber der MACD hat einige Mängel, und die Stop-Loss/Take-Profit-Mechanismen müssen weiter optimiert werden. Eine weitere Optimierung der Indikatornutzung, Stop-Loss/Take-Profit-Einstellungen und die Verringerung der Handelsfrequenz können die Strategie noch leistungsfähiger machen.
/*backtest start: 2022-10-19 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD ) capital_risk = input( 1.0, "% capital risk per trade" ) / 100 r_exit = input( 4.0, "Take Profit in 'R'" ) wma_length = input( 150, 'WMA Bias Length' ) [macd_line, signal_line, hist ] = macd(close, 12, 26, 9) w_line = wma( close, wma_length ) golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0 float stop = na float tp = na // For a stop, use a recent low stop := golong ? lowest(low, 3)[1] : stop[1] range = abs(close - stop) tp := golong ? close + (r_exit * range) : tp[1] // This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity` how_much_willing_to_lose = strategy.equity * capital_risk // Spread the risk across the stop range position_size_in_usd = how_much_willing_to_lose / (range / close) // Sized specified in base contract position_size_in_contracts = position_size_in_usd / close // Enter the position if golong strategy.entry("long", strategy.long, qty=position_size_in_contracts) strategy.exit("long exit","long", stop=stop, limit=tp) // experimental exit strategy // hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' ) // if hist < 0 and hist_strength == 'strong' and falling( hist, 8 ) // strategy.close("long") plot( strategy.equity, color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )