Strategi ini dipanggil Strategi Dagangan Robot MACD. Ia menentukan masa membeli dan menjual di pasaran dengan mengira hubungan antara garis cepat dan garis perlahan penunjuk MACD, dan menggunakan stop loss untuk mengawal risiko.
Strategi ini terutamanya dibangunkan berdasarkan indikator MACD. Indikator MACD terdiri daripada garis pantas dan garis perlahan. Garis pantas adalah purata bergerak jangka pendek dan garis perlahan adalah purata bergerak jangka panjang. Hubungan antara kedua-duanya mencerminkan keadaan membeli dan menjual di pasaran. Apabila garis pantas melintasi di atas garis perlahan, ia adalah isyarat beli, dan apabila ia melintasi di bawah, ia adalah isyarat jual.
Dalam strategi ini, garis pantas dan garis perlahan dikira menggunakan algoritma EMA masing-masing, dan tempoh boleh disesuaikan. Untuk meningkatkan kualiti isyarat, garis isyarat ditambahkan, yang menggunakan algoritma EMA untuk meluruskan nilai MACD lagi.
Apabila menentukan masa membeli, periksa bukan sahaja salib emas garis cepat dan perlahan, tetapi juga sama ada nilai mutlak MACD lebih besar daripada garis beli yang disesuaikan.
Apabila menentukan masa penjualan, persilangan kematian garis cepat dan perlahan dan garis isyarat positif dikehendaki dipenuhi pada masa yang sama, maka isyarat jual dikeluarkan untuk menutup kedudukan.
Strategi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai beberapa risiko:
Risiko ini boleh dikurangkan dengan menyesuaikan parameter dengan sewajarnya, menggabungkan penunjuk lain, dll.
Strategi ini boleh dioptimumkan ke arah berikut:
Secara keseluruhan, ini adalah strategi trend-mengikuti dengan kebolehpercayaan yang tinggi. Dengan menilai trend melalui penunjuk MACD dan mengawal risiko dengan kehilangan berhenti, pulangan pelaburan yang stabil dapat diperoleh.
/*backtest start: 2022-12-11 00:00:00 end: 2023-12-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD MACD") fastMA = input(title="Fast moving average", defval = 12, minval = 7) slowMA = input(title="Slow moving average", defval = 26, minval = 7) lastColor = yellow [currMacd,_,_] = macd(close[0], fastMA, slowMA, 9) [prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9) plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red plot(currMacd, style = histogram, color = plotColor, linewidth = 3) plot(0, title = "Zero line", linewidth = 1, color = gray) //MACD // Getting inputs fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) src = input(title="Source", defval=close) signal_length = input(title="Signal Smoothing", minval = 1, maxval = 50, defval =9) sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=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 //plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) plot(macd, title="MACD", color=col_macd, transp=0) plot(signal, title="Signal", color=col_signal, transp=0) ///END OF MACD //Long and Close Long Lines linebuy = input(title="Enter Long", type=float, defval=-0.00045) linesell = input(title="Close Long", type=float, defval=0.0001) //Plot Long and Close Long Lines plot(linebuy,color=green),plot(linesell,color=red) //Stop Loss Input sl_inp = input(0.05, title='Stop Loss %', type=float)/100 //Order Conditions longCond = crossover(currMacd, linebuy) exitLong = crossover(currMacd, signal) and signal > 0 stop_level = strategy.position_avg_price * (1 - sl_inp) //Order Entries strategy.entry("long", strategy.long, when=longCond==true) strategy.close("long", when=exitLong==true) strategy.exit("Stop Loss", stop=stop_level)