Robot Perdagangan Pakar Neurologi

EMA BB MACD RSI DCA
Tarikh penciptaan: 2025-10-20 15:48:05 Akhirnya diubah suai: 2025-10-20 15:48:05
Salin: 0 Bilangan klik: 216
2
fokus pada
329
Pengikut

Robot Perdagangan Pakar Neurologi Robot Perdagangan Pakar Neurologi

Ini bukan strategi DCA biasa, tetapi robot perdagangan yang berfikir

Setelah melihat ribuan kod Pine Script, “Master Trading Bot” ini memang mempunyai dua sikat. Penulis memainkan DCA ke tahap yang baru: bukan pertaruhan tanpa otak, tetapi sistem penambahan simpanan pintar berdasarkan petunjuk teknikal.

Kuncinya adalah syarat pemicu DCA: harga mesti jatuh di bawah harga kos purata, dan penurunan harus mencapai 2% + langkah × 4% penurunan dinamik. DCA pertama memerlukan penurunan 2%, kedua memerlukan penurunan 6%, ketiga memerlukan penurunan 10%. Reka bentuk ini mengelakkan kenaikan harga yang kerap dalam turun naik kecil, dan hanya meningkat dalam pemulihan sebenar.

Kombinasi pelbagai teknologi, tetapi logik yang jelas dan tidak berlebihan

Strategi ini menggunakan 3 / 7 / 18 kitaran EMA untuk membina rangka trend, dengan 20 kitaran Brin Belt untuk menentukan kedudukan harga, 52/200/3 MACD parameter untuk menetapkan isyarat jangka panjang dan jangka panjang, 14 kitaran RSI untuk membuat keputusan overbought dan oversold. Kombinasi ini merangkumi tiga dimensi trend, momentum, dan turun naik, lebih dipercayai daripada strategi penunjuk tunggal.

Syarat pembelian ketat: EMA cepat> EMA perlahan+MACD garpu emas+harga di atas rel tengah Brin+RSI <65 ⋅ keempat-empat syarat ini dipenuhi secara serentak untuk membuka kedudukan, menyaring kebanyakan isyarat palsu ⋅ Syarat jual sama ketat: mestilah minimum 2% keuntungan + trend melemah + garpu mati MACD ⋅ reka bentuk “menjual dengan keuntungan” ini mengelakkan kerugian berhenti yang tidak masuk akal ⋅

Pengaturan 100% Stop Loss nampak radikal, tetapi ia masuk akal.

100% stop loss dalam kod nampaknya berlebihan, tetapi ulasan itu jelas: “Harga mesti jatuh ke 0 untuk mencetuskan”. Ini sebenarnya menutup stop loss tradisional, sepenuhnya bergantung pada indikator teknikal dan sasaran keuntungan untuk menguruskan risiko.

Kawalan risiko yang sebenar adalah: isyarat penurunan harga 2% + penurunan nilai DCA dinamik + pengeluaran keuntungan yang dipaksa. Strategi akan menjejaki harga tertinggi dalam 500 kitaran dan akan mencetuskan isyarat jual apabila harga turun lebih dari 2% dari paras tertinggi semasa. Ini lebih fleksibel daripada berhenti tetap dan dapat menyesuaikan diri dengan keadaan pasaran yang berbeza.

Pengurusan wang adalah daya saing utama dalam strategi ini

Setiap kali membeli jumlah = hak semasa × peratus DCA ÷ harga semasa, reka bentuk ini mengikut peratusan hak dan bukan jumlah tetap, membolehkan strategi untuk mengembangkan kedudukan dengan pertumbuhan akaun. Posisi awal 5% mengawal risiko sekali, sementara kenaikan kedudukan secara beransur-ansur memastikan terdapat cukup api di hadapan peluang yang sebenar.

Manajemen status “just_sold” yang paling canggih: tidak akan membeli semula setelah dijual kecuali ada isyarat bullish yang kuat. Ini mengelakkan perdagangan yang kerap dalam pasaran yang bergolak, mengurangkan kos bayaran dan risiko tindakan emosi.

Jelaskan Skenario, Bukan Strategi Keseluruhan

Strategi ini paling sesuai untuk pembelian balik dalam trend menaik jangka menengah dan panjang, dan biasanya berlaku dalam pasaran beruang atau jangka panjang. Pengaturan parameter MACD 52200 memutuskan bahawa ia lebih sesuai untuk penilaian trend yang lebih besar, tidak sesuai untuk perdagangan garis pendek.

RSI oversell diletakkan pada 25 dan bukannya 30, menunjukkan kecenderungan strategi untuk membeli dalam penyesuaian yang lebih mendalam. Reka bentuk ini boleh mendapatkan tempat membeli yang lebih baik dalam pasaran lembu, tetapi mungkin “mengambil alih pisau” dalam pasaran beruang.

Pelaksanaan pelacuran perlu memberi perhatian kepada pengeluaran maksimum dan kerugian berterusan

Logik teori strategi adalah sempurna, tetapi prestasi sebenar juga bergantung pada data retesting tertentu. Perlu memberi perhatian kepada: sama ada penarikan balik maksimum dalam julat yang boleh diterima, sama ada terlalu banyak kerugian berturut-turut, perbezaan prestasi dalam keadaan pasaran yang berbeza.

Ciri semula jadi strategi DCA adalah untuk terus menambah kedudukan semasa penurunan, yang bermaksud nilai bersih akaun akan jatuh terlebih dahulu dan kemudian naik. Pelabur perlu mempunyai daya tahan psikologi dan rizab modal yang mencukupi. Adalah disyorkan untuk menguji terlebih dahulu dengan modal kecil, mengesahkan ciri-ciri strategi dan kemudian meningkatkan skala pelaburan secara beransur-ansur.

Nasihat risiko: Mana-mana strategi kuantitatif mempunyai risiko kerugian, pengiraan semula sejarah tidak mewakili keuntungan masa depan, dan memerlukan pengurusan risiko yang ketat dan peruntukan dana yang sesuai.

Kod sumber strategi
/*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)