Strategi ini menjana penunjuk MACD dengan mengira perbezaan antara garis purata bergerak pantas dan perlahan, dan menilai trend dan kawasan overbought / oversold pasaran kewangan bersama-sama dengan garis isyarat.
Logik asasnya adalah menggunakan penunjuk MACD yang dihasilkan dari perbezaan MA cepat dan perlahan untuk menentukan arah trend pasaran, dan garis isyarat untuk menilai tahap overbought / oversold. Apabila MACD dan garis isyarat membentuk salib emas, ia adalah isyarat panjang untuk pergi lama. Apabila membentuk salib mati, ia adalah isyarat pendek untuk pergi pendek. Sementara itu, ia menggunakan hubungan harga dengan MA 200 hari untuk menapis isyarat, hanya mengambil isyarat panjang apabila harga di atas MA 200 hari dan isyarat pendek apabila harga di bawah MA 200 hari, untuk mengelakkan whipsaws semasa trend yang kuat.
Kaedah pengiraan khusus ialah:
Apabila MACD melintasi di atas garis isyarat sementara kedua-duanya di bawah 0, ia adalah isyarat panjang salib emas. Apabila MACD melintasi di bawah garis isyarat sementara kedua-duanya di atas 0, ia adalah isyarat pendek salib mati. Sementara itu, hanya mengambil masa yang lama apabila harga di atas 200 hari MA, dan pendek apabila harga di bawah 200 hari MA.
Boleh mengurangkan risiko dengan memendekkan tempoh MA, menambah penunjuk lain, dan menambah stop loss.
1.Diuji pada jangka masa yang berbeza dari 15m hingga 1D, hasil yang optimum pada 4H dalam pulangan yang disesuaikan dengan risiko
2.Optimize MA pantas dan perlahan supaya MACD menangkap kitaran, 7-21 baik untuk 15m
3.Hull MA untuk MACD memberikan hasil yang baik
4.Penghentian kerugian menyempurnakan pengurusan risiko
Ini secara keseluruhan adalah strategi yang sangat mudah dan praktikal, menghasilkan isyarat perdagangan kebarangkalian tinggi melalui sistem penunjuk berganda dan penapisan harga. Ia mempunyai margin keuntungan yang agak tinggi, menggunakan kombinasi parameter MACD klasik untuk mengelakkan pengoptimuman berlebihan. Masih ada ruang yang besar untuk pengoptimuman dengan menyesuaikan parameter MA, menambahkan penunjuk lain dan mekanisme hentian kerugian untuk meningkatkan prestasi. Secara keseluruhan, ini adalah strategi kuantitatif biasa 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)