
Strategi ini membentuk indikator MACD dengan menghitung diferensial antara rata-rata bergerak cepat dan rata-rata bergerak lambat, kemudian menggabungkan garis sinyal untuk menilai tren pasar keuangan dan zona overbought dan oversold. Dalam MACD dan garis sinyal, bentuk multiheaded fork terjadi saat harga berada di atas garis rata-rata 200 hari, dan bentuk empty headed fork terjadi saat harga berada di bawah garis rata-rata 200 hari.
Prinsip dasarnya adalah menghitung perbedaan antara rata-rata bergerak cepat dan rata-rata bergerak lambat membentuk indikator MACD untuk menentukan arah tren pasar, dan kemudian menggunakan jalur sinyal untuk menilai area overbought dan oversold. Ketika MACD dan jalur sinyal membentuk garpu emas, sinyal multihead lebih banyak, dan ketika garpu mati terbentuk, sinyal kosong kosong.
Cara menghitungnya adalah sebagai berikut:
Bila MACD di atas melewati sinyal dan MACD dan sinyalnya sama-sama berada di bawah 0, maka akan ada sinyal yang lebih banyak untuk Gold Forks. Bila MACD di bawah melewati sinyal dan MACD dan sinyalnya sama-sama berada di atas 0, maka akan ada sinyal yang lebih banyak untuk Gold Forks.
Risiko dapat dikurangi dengan mengurangi siklus rata-rata, menambahkan penilaian indikator lainnya, dan menambahkan langkah-langkah stop loss.
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 sederhana dan praktis, menghasilkan sinyal perdagangan dengan probabilitas tinggi melalui penilaian indikator ganda dan penyaringan harga, margin keuntungan yang tinggi, menggunakan kombinasi parameter klasik MACD, tidak terlalu dioptimalkan. Ruang optimasi masih sangat besar, dengan menyesuaikan kombinasi parameter rata-rata, menambahkan penilaian indikator lainnya dan langkah-langkah penghentian kerugian dapat meningkatkan kinerja strategi lebih lanjut. Secara keseluruhan, ini adalah strategi kuantitatif khas yang didasarkan pada dasar.
/*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)