
Strategi ini membentuk indikator MACD dengan mengira perbezaan antara rata-rata bergerak cepat dan rata-rata bergerak perlahan, dan kemudian menggabungkan garis isyarat untuk menilai trend pasaran kewangan dan kawasan overbought dan oversold, melakukan lebih banyak apabila MACD dan garis isyarat membentuk garpu multihead sekaligus harga lebih tinggi daripada garis rata-rata 200 hari, membentuk garpu kosong sambil harga lebih rendah daripada garpu rata-rata 200 hari kosong, termasuk strategi penembusan garpu ganda yang tipikal.
Prinsip asasnya adalah mengira perbezaan antara rata-rata bergerak cepat dan rata-rata bergerak perlahan membentuk indikator MACD untuk menentukan arah trend pasaran, dan kemudian menggunakan garis isyarat untuk menentukan kawasan jual beli yang berlebihan. Apabila MACD dan garis isyarat membentuk garpu emas, sinyal bermulut lebih banyak, dan apabila garpu mati terbentuk, sinyal kosong kosong.
Kaedah pengiraan adalah seperti berikut:
Apabila MACD melintasi jalur isyarat dan MACD dan jalur isyarat pada masa yang sama berada di bawah 0, buatlah lebih banyak isyarat untuk garpu emas. Apabila MACD melintasi jalur isyarat dan MACD dan jalur isyarat pada masa yang sama berada di atas 0, buatlah isyarat kosong untuk garpu mati. Pada masa yang sama, buatlah lebih banyak isyarat untuk garpu emas apabila harga berada di atas garis rata-rata 200 hari dan buatlah kosong isyarat untuk garpu mati apabila harga berada di bawah garis rata-rata 200 hari.
Risiko boleh dikurangkan dengan mengurangkan kitaran purata yang sesuai, menambahkan penilaian indikator lain, dan menambahkan langkah-langkah hentikan kerugian.
1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns
2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart
3.also tested hull moving average for MACD which gave good results
4.stoploss can also be trailed for better risk management
Strategi ini secara keseluruhan sangat mudah dan praktikal, menghasilkan isyarat perdagangan yang berkemungkinan tinggi melalui penilaian indikator ganda dan penapisan harga, margin keuntungan yang tinggi, menggunakan kombinasi parameter klasik MACD, tidak terlalu dioptimumkan. Ruang pengoptimuman masih besar, dengan cara menyesuaikan kombinasi parameter rata-rata, menambahkan penilaian indikator lain dan langkah-langkah hentikan kerugian, dan lain-lain, prestasi strategi dapat ditingkatkan. Secara keseluruhan, strategi kuantitatif tipikal yang berdasarkan asas.
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Hurmun
//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
movinga2 = input(title="movinga 2", type=input.integer, defval=200)
movinga200 = sma(close, movinga2)
plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100
longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
if (strategy.position_size > 0 )
strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)
if (strategy.position_size < 0 )
strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)