Sumber dimuat naik... memuat...

Strategi Perdagangan Volume Momentum Berbilang Sasaran Pintar

Penulis:ChaoZhang, Tarikh: 2024-12-12 14:45:04
Tag:SMARSITPSL

img

Strategi ini adalah sistem perdagangan pintar yang menggabungkan jumlah, momentum harga, dan pelbagai tahap mengambil keuntungan / berhenti-kerugian. Ia mengenal pasti peluang perdagangan berpotensi melalui gabungan pengesanan anomali jumlah, keuntungan harga, dan penunjuk momentum, menggunakan pengambilan keuntungan berlapis dan pengurusan berhenti-kerugian untuk mengoptimumkan nisbah risiko-balasan.

Prinsip Strategi

Strategi ini berdasarkan tiga isyarat perdagangan teras: 1) Penembusan jumlah - jumlah semasa melebihi 2x jumlah purata 20 tempoh; 2) Peningkatan harga - kenaikan harga baru-baru ini melebihi ambang yang ditetapkan; 3) Pengesahan momentum - RSI di atas 55 dan harga di atas SMA 50 tempoh. Apabila ketiga-tiga syarat ini dipenuhi secara serentak, sistem menghasilkan isyarat panjang. Strategi ini menggunakan tahap keuntungan tiga kali ganda (15%, 25%, 35%) dan tahap stop-loss tiga kali ganda (-2%, -5%, -10%) untuk pengurusan kedudukan, dengan ukuran kedudukan yang fleksibel di setiap peringkat.

Kelebihan Strategi

  1. Pengesahan isyarat berbilang meningkatkan ketepatan perdagangan
  2. Pendekatan mengambil keuntungan / hentian kerugian berlapis kedua-dua memastikan keuntungan dan mengawal risiko
  3. Parameter yang sangat disesuaikan menyesuaikan diri dengan keadaan pasaran yang berbeza
  4. Gabungan penunjuk teknikal dan analisis jumlah memberikan isyarat yang lebih boleh dipercayai
  5. Fungsi amaran masa nyata membolehkan menangkap peluang tepat pada masanya

Risiko Strategi

  1. Tetapan parameter yang tidak betul boleh membawa kepada overtrading
  2. Stop-loss yang kerap boleh mencetuskan semasa turun naik pasaran yang tinggi
  3. Kesukaran dalam melaksanakan keuntungan mengambil / hentikan kerugian di pasaran yang rendah kecairan
  4. Kelemahan faktor asas penting
  5. Kepercayaan berlebihan pada penunjuk teknikal mungkin gagal di pasaran pelbagai

Arahan pengoptimuman

  1. Memperkenalkan analisis keadaan pasaran untuk penyesuaian parameter
  2. Tambah analisis kualiti volum untuk menapis isyarat jumlah palsu
  3. Sertakan penunjuk kekuatan trend untuk meningkatkan keupayaan trend berikut
  4. Mengoptimumkan jarak mengambil keuntungan / berhenti kerugian untuk memenuhi turun naik pasaran
  5. Pertimbangkan untuk menambah kawalan pengambilan untuk meningkatkan kestabilan kurva ekuiti

Ringkasan

Ini adalah strategi perdagangan yang matang yang mengintegrasikan pelbagai elemen analisis teknikal. Melalui penapisan isyarat yang ketat dan pengurusan kedudukan yang fleksibel, ia menangkap peluang trend sambil mengekalkan kawalan risiko yang baik. Walaupun terdapat ruang untuk pengoptimuman, reka bentuk keseluruhan adalah baik dan layak disahkan dan dilaksanakan dalam perdagangan langsung.


/*backtest
start: 2024-11-11 00:00:00
end: 2024-12-10 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Volume Spike & Momentum Strategy with Alerts", overlay=true)

// Inputs for customization
priceGainPercent = input.float(5, title="Minimum Price Gain (%)", minval=1)
volumeLookback = input.int(20, title="Volume Lookback Period (Bars)", minval=1)
momentumSmaLength = input.int(50, title="SMA Length for Momentum (Bars)", minval=1)
rsiThreshold = input.float(55, title="RSI Threshold for Momentum", minval=1)

// Take Profit percentages
tp1Percent = input.float(15, title="Take Profit 1 (%)", minval=1)
tp2Percent = input.float(25, title="Take Profit 2 (%)", minval=1)
tp3Percent = input.float(35, title="Take Profit 3 (%)", minval=1)

// Percentage of position to close at each take-profit
tp1ClosePercent = input.float(30, title="Close % at TP1", minval=1, maxval=100)
tp2ClosePercent = input.float(40, title="Close % at TP2", minval=1, maxval=100)
tp3ClosePercent = input.float(30, title="Close % at TP3", minval=1, maxval=100)

// Stop-loss percentages
sl1Percent = input.float(2, title="Stop Loss 1 (%)", minval=0.1)
sl2Percent = input.float(5, title="Stop Loss 2 (%)", minval=0.1)
sl3Percent = input.float(10, title="Stop Loss 3 (%)", minval=0.1)

// Percentage of position to close at each stop-loss
sl1ClosePercent = input.float(30, title="Close % at SL1", minval=1, maxval=100)
sl2ClosePercent = input.float(40, title="Close % at SL2", minval=1, maxval=100)
sl3ClosePercent = input.float(30, title="Close % at SL3", minval=1, maxval=100)

// Detect volume spikes
avgVolume = ta.sma(volume, volumeLookback)   // Average volume over the last X bars (customizable)
volumeSpike = volume > avgVolume * 2         // Spike in volume if current volume is 2x the average

// Detect price gain over the recent period (e.g., 5-10% gain over the last X bars)
priceChangePercent = (close - ta.lowest(close, 5)) / ta.lowest(close, 5) * 100
priceGainCondition = priceChangePercent >= priceGainPercent

// Check for overall momentum using an SMA and RSI
longTermSma = ta.sma(close, momentumSmaLength)
rsi = ta.rsi(close, 14)
momentumCondition = close > longTermSma and rsi >= rsiThreshold

// Store the entry price on a new trade
var float entryPrice = na
if (strategy.opentrades == 0 and (volumeSpike and priceGainCondition and momentumCondition))
    entryPrice := close  // Capture the entry price on a new trade

// Calculate take-profit levels based on the entry price
tp1Price = entryPrice * (1 + tp1Percent / 100)
tp2Price = entryPrice * (1 + tp2Percent / 100)
tp3Price = entryPrice * (1 + tp3Percent / 100)

// Calculate stop-loss levels based on the entry price
sl1Price = entryPrice * (1 - sl1Percent / 100)
sl2Price = entryPrice * (1 - sl2Percent / 100)
sl3Price = entryPrice * (1 - sl3Percent / 100)

// Exit conditions for multiple take-profits
tp1Condition = high >= tp1Price  // Exit partial if price hits take-profit 1
tp2Condition = high >= tp2Price  // Exit partial if price hits take-profit 2
tp3Condition = high >= tp3Price  // Exit full if price hits take-profit 3

// Exit conditions for multiple stop-losses
sl1Condition = low <= sl1Price  // Exit partial if price hits stop-loss 1
sl2Condition = low <= sl2Price  // Exit partial if price hits stop-loss 2
sl3Condition = low <= sl3Price  // Exit full if price hits stop-loss 3

// Buy Condition: When volume spike, price gain, and momentum conditions are met
if (volumeSpike and priceGainCondition and momentumCondition)
    strategy.entry("Buy", strategy.long)

// Alerts for conditions
alertcondition(volumeSpike and priceGainCondition and momentumCondition, title="Entry Alert", message="Entry conditions met: Volume spike, price gain, and momentum detected!")

alertcondition(tp1Condition, title="Take Profit 1", message="Take Profit 1 hit!")
alertcondition(tp2Condition, title="Take Profit 2", message="Take Profit 2 hit!")
alertcondition(tp3Condition, title="Take Profit 3", message="Take Profit 3 hit!")

alertcondition(sl1Condition, title="Stop Loss 1", message="Stop Loss 1 hit!")
alertcondition(sl2Condition, title="Stop Loss 2", message="Stop Loss 2 hit!")
alertcondition(sl3Condition, title="Stop Loss 3", message="Stop Loss 3 hit!")

// Exit conditions: Multiple take-profits and stop-losses
if (tp1Condition)
    strategy.exit("Take Profit 1", "Buy", limit=tp1Price, qty_percent=tp1ClosePercent)

if (tp2Condition)
    strategy.exit("Take Profit 2", "Buy", limit=tp2Price, qty_percent=tp2ClosePercent)

if (tp3Condition)
    strategy.exit("Take Profit 3", "Buy", limit=tp3Price, qty_percent=tp3ClosePercent)

// Stop-loss exits
if (sl1Condition)
    strategy.exit("Stop Loss 1", "Buy", stop=sl1Price, qty_percent=sl1ClosePercent)

if (sl2Condition)
    strategy.exit("Stop Loss 2", "Buy", stop=sl2Price, qty_percent=sl2ClosePercent)

if (sl3Condition)
    strategy.exit("Stop Loss 3", "Buy", stop=sl3Price, qty_percent=sl3ClosePercent)

// Plotting take-profit and stop-loss levels on the chart
plot(tp1Price, color=color.green, style=plot.style_linebr, title="TP1 Level")
plot(tp2Price, color=color.green, style=plot.style_linebr, title="TP2 Level")
plot(tp3Price, color=color.green, style=plot.style_linebr, title="TP3 Level")

plot(sl1Price, color=color.red, style=plot.style_linebr, title="SL1 Level")
plot(sl2Price, color=color.red, style=plot.style_linebr, title="SL2 Level")
plot(sl3Price, color=color.red, style=plot.style_linebr, title="SL3 Level")


Berkaitan

Lebih lanjut