Strategi Dagangan Pecah Petunjuk MACD


Tarikh penciptaan: 2023-09-12 15:32:12 Akhirnya diubah suai: 2023-09-12 15:32:12
Salin: 1 Bilangan klik: 789
1
fokus pada
1617
Pengikut

Strategi ini menggunakan perbezaan kurva MACD untuk membuat keputusan perdagangan. MACD terdiri daripada EMA cepat dan lambat, menghasilkan isyarat perdagangan apabila kurva perbezaan melintasi paksi sifar. Strategi ini adalah strategi perdagangan kuantitatif tipikal.

Prinsip-prinsip strategi:

  1. Hitung EMA garis laju dan EMA garis perlahan, perbezaan antara kedua-duanya membentuk kurva MACD.

  2. EMA melonggarkan kurva MACD untuk mendapatkan garis isyarat MACD.

  3. Apabila MACD melakukan lebih banyak ketika melintasi jalur isyarat, kosong ketika melintasi jalur isyarat.

  4. Tetapkan peratusan stop loss untuk pengurusan risiko.

Kelebihan strategi ini:

  1. Indeks MACD lebih baik daripada EMA tunggal, dan dapat menilai trend dengan lebih jelas.

  2. Menerobos kaedah dagangan untuk menangkap peluang pertukaran tepat pada masanya.

  3. Mekanisme Hentikan Kerosakan membantu mengawal risiko perdagangan.

Risiko strategi ini:

  1. Lebih banyak isyarat pecah palsu mungkin berlaku berhampiran sumbu sifar kurva MACD.

  2. Parameter perlu dioptimumkan untuk menyesuaikan dengan jenis dagangan yang berbeza.

  3. Perdagangan trend terdedah kepada kejadian yang tidak dijangka, dan anda mesti menetapkan Hentian Kerosakan.

Ringkasnya, strategi ini menggunakan hubungan penembusan pada keluk nilai MACD untuk menilai. Kelebihan indikator MACD membantu meningkatkan keberkesanan, tetapi perlu berhati-hati terhadap risiko penembusan palsu dan mengambil langkah-langkah pengurusan risiko yang sesuai untuk mendapatkan pulangan yang stabil dalam jangka panjang.

Kod sumber strategi
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3 
strategy("uray MACD", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=2, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) 

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
inTimeframe()  => true


isPosLong    = strategy.position_size > 0
isPosShort   = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0

fastLength    = input(12, minval = 1, title = "MACD fast")
slowlength    = input(26, minval = 1, title = "MACD slow")
MACDLength    = input( 9, minval = 1, title = "MACD length")
stopLoss      = input( 10, minval = 1, title = "Stop Loss (price %)", type=float)
takeProfit    = input( 50, minval = 1, title = "Take Profit (price %)", type=float)
src           = close   // Source of Calculations (Close of Bar)

MACD  = ta.ema(src, fastLength) - ta.ema(src, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD
stopLossValue      = close*(stopLoss/100)/syminfo.mintick
takeProfitValue    = close*(takeProfit/100)/syminfo.mintick
switchLongTrigger  = ta.crossover(delta, 0)
switchShortTrigger = ta.crossunder(delta, 0)
closeLongTrigger   = ta.crossunder(delta, 0)
closeShortTrigger  = ta.crossover(delta, 0)
entryLongTrigger   = ta.crossover(delta, 0)
entryShortTrigger  = ta.crossunder(delta, 0)

// if inTimeframe()
//     if isNoMarginPos
//         if entryLongTrigger
//             strategy.entry("Long", strategy.long,  comment="Entry Long")
//             strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//         if entryShortTrigger
//             strategy.entry("Short", strategy.short, comment="Entry Short")  
//             strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//     if isPosShort
//         if switchLongTrigger
//             strategy.close_all()    
//             strategy.entry("Long", strategy.long, comment="switch Long")
//             strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//         if closeLongTrigger
//             strategy.close_all()    
//     if isPosLong 
//         if switchShortTrigger
//             strategy.close_all()   
//             strategy.entry("Short", strategy.short, comment="switch Short")
//             strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) 
//         if closeShortTrigger
//             strategy.close_all()   

if inTimeframe()
    strategy.entry("Long", strategy.long,  comment="Entry Long", when=entryLongTrigger)
    strategy.close("Long", when=entryShortTrigger)
    strategy.entry("Short", strategy.short,  comment="Entry Short", when=entryShortTrigger)
    strategy.close("Short", when=entryLongTrigger)
    strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShortTrigger) 
    strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLongTrigger)