
Der Master Trading Bot hat tatsächlich zwei Brushes. Der Autor spielt DCA auf eine neue Ebene: nicht ein gedankenloses Wetten, sondern ein intelligentes Auflagerungssystem, das auf technischen Indikatoren basiert. Die anfängliche Position beträgt 5%, und jeder DCA-Zuwachs beträgt 2,5%, bis zu 100%.
Der Schlüssel liegt in den DCA-Triggerbedingungen: Die Preise müssen unter dem durchschnittlichen Kostenpreis fallen, und der Rückgang muss einen dynamischen Wert von 2% + Schritt × 4% erreichen. Die erste DCA-Werte müssen um 2%, die zweite um 6% und die dritte um 10% fallen. Diese Konstruktion vermeidet häufige Positionserhöhungen bei kleinen Schwankungen und erhöht sich nur bei echten Rückschlägen.
Die Strategie verwendet die 3 / 7 / 18-Perioden-EMA, um einen Trendrahmen zu erstellen, mit der 20-Perioden-Brin-Band, um die Preisposition zu bestimmen, die MACD-Parameter von 52/200/3 für die bevorzugte mittlere und langfristige Signal, und der 14-Perioden-RSI für die Überkauf-Überverkauf-Bestimmen. Diese Kombination deckt die drei Dimensionen Trend, Dynamik und Volatilität ab und ist zuverlässiger als eine einzelne Indikatorstrategie.
Die Kaufbedingungen sind streng: schnelle EMA>langsame EMA+MACD Goldfork+Preis oberhalb des mittleren Kurses von Brin+RSI<65 . Diese vier Bedingungen sind gleichzeitig erfüllt, um eine Position zu eröffnen und die meisten falschen Signale zu filtern . Die Verkaufsbedingungen sind genauso streng: es muss mindestens 2% Gewinn geben + Trendwende + MACD-Todor . Diese “Lobby-Sell-Design” vermeidet sinnlose Stop-Losses .
Der Stopp von 100% im Code scheint übertrieben, aber die Anmerkung sagt es deutlich: “Der Preis muss auf 0 fallen, um ausgelöst zu werden”. Das bedeutet, dass die traditionellen Stopps geschlossen sind und das Risiko ausschließlich durch technische Indikatoren und Gewinnziele verwaltet wird. Für die DCA-Strategie ist diese Konzeption sinnvoll, da die traditionellen Stopps bei einem Rückgang nicht mehr sinnvoll sind.
Die wahre Risikokontrolle besteht aus: 2% Preisrückgang + dynamischer DCA-Verschwächung + Zwangsgewinn-Exit. Die Strategie verfolgt den höchsten Preis innerhalb von 500-Zyklen und löst ein Verkaufssignal aus, sobald der aktuelle Preis von seinem Höchstpunkt um mehr als 2% fällt. Dies ist flexibler als ein fester Stop-Loss und kann sich an unterschiedliche Marktumgebungen anpassen.
Die Strategie, bei der der Betrag pro Kauf = der aktuelle Zinssatz × der DCA-Prozentsatz × der aktuelle Preis, anstelle eines festen Betrages, nach Zinssätzen erweitert die Position, wenn das Konto wächst. Eine anfängliche Position von 5% kontrolliert das einmalige Risiko, während ein schrittweises Verlagern sicherstellt, dass vor einer echten Gelegenheit genug Feuer ist.
Am besten ist die “just_sold”-Status-Verwaltung: Einmal verkauft, wird nicht sofort wieder gekauft, es sei denn, es gibt ein starkes Positivsignal. Dies vermeidet häufige Geschäfte in einem wackligen Markt und reduziert die Kosten für die Verarbeitung und das Risiko von emotionalen Handlungen.
Diese Strategie eignet sich am besten für Rückkaufkäufe in mittleren und langen Aufwärtstrends und ist in der Regel in einer Bären- oder langfristigen Overschreibung geeignet. Die MACD-Parameter-Einstellung 52⁄200 entscheidet, dass sie für eine größere Tendenzbeurteilung geeignet ist und nicht für einen kurzen Handel geeignet ist.
Der RSI-Überverkaufsschwellenwert liegt bei 25 anstelle von 30, was darauf hindeutet, dass die Strategie dazu neigt, bei tieferen Rückschlägen zu kaufen. Diese Konstruktion ermöglicht einen besseren Kaufpunkt in einem Bullenmarkt, kann jedoch in einem Bärenmarkt “die Klinge übernehmen”. Es wird empfohlen, sie in einem eindeutigen Aufwärtstrend zu verwenden und zu vermeiden, sie an der Spitze des Marktes oder in einem Abwärtstrend zu starten.
Die theoretische Logik der Strategie ist gut, aber die tatsächliche Leistung hängt von den konkreten Rückmeldedaten ab. Es ist wichtig zu beachten, ob die maximale Rücknahme im akzeptablen Bereich liegt, ob die Anzahl der Verluste in Folge zu hoch ist und ob die Leistung unter verschiedenen Marktbedingungen unterschiedlich ist.
Die DCA-Strategie ist von Natur aus geprägt, indem sie während des Niedergangs fortgesetzt wird, was bedeutet, dass der Nettowert des Kontos zuerst sinkt und dann steigt. Der Anleger muss über ausreichende psychologische Belastbarkeit und Geldreserven verfügen. Es wird empfohlen, zuerst mit einem kleinen Kapital zu testen, um die Eigenschaften der Strategie zu bestätigen und dann schrittweise die Investitionsspanne zu erhöhen.
Risikotipp: Bei jeder quantifizierten Strategie besteht das Risiko eines Verlustes, die historische Rückführung ist nicht repräsentativ für zukünftige Erträge und erfordert ein strenges Risikomanagement und eine angemessene Kapitalbereitstellung.
/*backtest
start: 2024-10-20 00:00:00
end: 2025-10-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/
// This Pine Script™ code is subject to the terms of the MPL 2.0 at https://mozilla.org/MPL/2.0/
// © MTB by Neurodoc
// By Nicolás Astorga
//@version=5
strategy("Master Trading Bot by Neurodoc",
shorttitle="MTB Adaptation",
overlay=true,
initial_capital=10000,
pyramiding=100,
commission_value=0.1,
commission_type=strategy.commission.percent,
default_qty_type = strategy.cash)
// —————— CONFIGURATION (Based on ve.env) ——————
// Purchase and DCA Percentages
var GRP_DCA = "DCA Configuration"
start_percentage = input.float(5.0, "Initial Buy Percentage (%)", group=GRP_DCA)
increment_percentage = input.float(2.5, "Increment per DCA Buy (%)", group=GRP_DCA)
max_percentage = input.float(100.0, "Maximum Buy Percentage (%)", group=GRP_DCA)
min_profit_percent = input.float(2.0, "Minimum Profit for Sell (%)", group=GRP_DCA)
// Stop Loss and Drop Signal
var GRP_RISK = "Risk Management"
stop_loss_percent = input.float(100.0, "Stop Loss (%)", group=GRP_RISK, tooltip="A value of 100 means there’s no real stop loss, as price would have to go to 0.")
drop_percent_signal = input.float(2.0, "Price Drop for Sell Signal (%)", group=GRP_RISK)
// Indicator Parameters
var GRP_INDICATORS = "Indicator Parameters"
ema_fast_period = input.int(3, "Fast EMA", group=GRP_INDICATORS)
ema_mid_period = input.int(7, "Medium EMA", group=GRP_INDICATORS)
ema_slow_period = input.int(18, "Slow EMA", group=GRP_INDICATORS)
bb_length = input.int(20, "Bollinger Bands Length", group=GRP_INDICATORS)
bb_stddev = input.float(2.0, "BB Standard Deviation", group=GRP_INDICATORS)
macd_fast = input.int(52, "MACD Fast", group=GRP_INDICATORS)
macd_slow = input.int(200, "MACD Slow", group=GRP_INDICATORS)
macd_signal = input.int(3, "MACD Signal", group=GRP_INDICATORS)
rsi_length = input.int(14, "RSI Length", group=GRP_INDICATORS)
rsi_oversold_threshold = input.int(25, "RSI Oversold (for divergence)", group=GRP_INDICATORS)
// —————— INDICATOR CALCULATIONS ——————
// EMAs
ema_fast = ta.ema(open, ema_fast_period)
ema_mid = ta.ema(open, ema_mid_period)
ema_slow = ta.ema(open, ema_slow_period)
// Bollinger Bands
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bb_length, bb_stddev)
bb_width = (bb_upper - bb_lower) / bb_middle * 100
is_bb_expanding = bb_width > bb_width[1]
// MACD
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
// RSI
rsi = ta.rsi(close, rsi_length)
// Price drop signal from highest price (similar to `cummax` in Python)
highest_price = ta.highest(high, 500) // Using 500-bar lookback to approximate the high
price_drop_percent = ((highest_price - close) / highest_price) * 100
is_price_drop_signal = price_drop_percent >= drop_percent_signal
// —————— TRADING LOGIC ——————
// Trend Conditions
is_bullish = ema_fast > ema_slow and macd_line > signal_line and close > bb_middle
is_bearish = ema_fast < ema_slow and macd_line < signal_line and close < bb_middle
is_weakening = rsi < rsi[1]
// Variables to manage strategy state
var bool just_sold = false
var int dca_step = 0
// Determine next buy percentage of capital
dca_buy_percentage = start_percentage + (dca_step * increment_percentage)
if dca_buy_percentage > max_percentage
dca_buy_percentage := max_percentage
avg_buy_price = strategy.position_avg_price
// Initial Long Condition
long_signal_initial = strategy.position_size == 0 and is_bullish and macd_line > signal_line and rsi < 65
// DCA Condition
price_drop_from_avg = ((avg_buy_price - close) / avg_buy_price) * 100
dca_required_drop = 2.0 + (dca_step * 4.0) // DCA price drop start and increment logic
long_signal_dca = strategy.position_size > 0 and is_bearish and close < avg_buy_price and price_drop_from_avg >= dca_required_drop
// Manage `just_sold` state
if strategy.position_size > 0
just_sold := false
if strategy.position_size == 0 and strategy.position_size[1] > 0
just_sold := true
// Avoid immediate repurchase after sell unless bullish condition is strong
long_signal = (just_sold and is_bullish) ? long_signal_initial : (not just_sold ? (long_signal_initial or long_signal_dca) : false)
// Sell (Close) Condition
current_profit_percent = ((close - avg_buy_price) / avg_buy_price) * 100
has_min_profit = current_profit_percent >= min_profit_percent
stop_loss_price = avg_buy_price * (1 - stop_loss_percent / 100)
is_stoploss_triggered = close <= stop_loss_price
short_signal = strategy.position_size > 0 and has_min_profit and ((is_bearish and is_weakening) or is_price_drop_signal or is_stoploss_triggered or (macd_line < signal_line))
// —————— ORDER EXECUTION ——————
if (long_signal)
// Calculate how much MONEY (USDT) to invest in this trade
cash_to_invest = (strategy.equity * dca_buy_percentage / 100) / close
strategy.entry("Buy", strategy.long, qty=cash_to_invest)
dca_step := dca_step + 1
if (short_signal)
strategy.close_all(comment="Sell")
dca_step := 0 // Reset DCA counter after selling
// —————— VISUALIZATION ——————
// Background color by trend
bgcolor(is_bullish ? color.new(color.green, 90) : is_bearish ? color.new(color.red, 90) : na)
// Plot EMAs and Bollinger Bands
plot(ema_fast, "Fast EMA", color.blue)
plot(ema_slow, "Slow EMA", color.orange)
p1 = plot(bb_upper, "Upper BB", color=color.gray)
p2 = plot(bb_lower, "Lower BB", color=color.gray)
fill(p1, p2, color=color.new(color.gray, 90))
// Plot average buy price when in position
plot(strategy.position_size > 0 ? avg_buy_price : na, "Average Buy Price", color.yellow, style=plot.style_linebr, linewidth=2)
// Plot Take Profit target
plot(strategy.position_size > 0 ? avg_buy_price * (1 + min_profit_percent / 100) : na, "Sell Price (TP)", color.aqua, style=plot.style_linebr, linewidth=2)
// Plot Stop Loss level
plot(strategy.position_size > 0 ? stop_loss_price : na, "Stop Loss", color.fuchsia, style=plot.style_linebr, linewidth=2)