Strategi perdagangan reversal moving average ganda menghasilkan sinyal perdagangan dengan menghitung moving average sederhana dari dua periode yang berbeda - jangka pendek dan jangka panjang. Ini menjadi panjang ketika rata-rata bergerak jangka pendek melintasi di atas rata-rata bergerak jangka panjang, dan menjadi pendek ketika rata-rata bergerak jangka pendek melintasi di bawah rata-rata bergerak jangka panjang.
Strategi ini menetapkan dua rata-rata bergerak sederhana dengan panjang periode yang berbeda melalui parameter input, dengan MA jangka pendek yang disebut sebagai garis cepat, dan MA jangka panjang yang disebut sebagai garis lambat. Garis cepat bereaksi lebih cepat terhadap perubahan harga dan menangkap tren jangka pendek, sementara garis lambat bereaksi lebih lambat terhadap perubahan harga dan menyaring kebisingan pasar jangka pendek, menangkap tren utama. Ketika garis cepat melintasi di atas garis lambat, itu menunjukkan bahwa tren naik menguat dan posisi panjang diambil. Ketika garis cepat melintasi di bawah garis lambat, itu menunjukkan bahwa tren menurun menguat dan posisi pendek diambil.
Secara khusus, strategi menghitung dua MAs menggunakan fungsi sma (), menetapkan hasilnya ke xSMA (line lambat) dan line cepat. MAs dihitung berdasarkan harga penutupan. Ketika harga penutupan melintasi di atas xSMA, posisi panjang diambil. Ketika harga penutupan melintasi di bawah xSMA, posisi pendek diambil. Strategi juga menetapkan batas rentang waktu perdagangan, sehingga sinyal perdagangan hanya dihasilkan dalam rentang waktu yang ditentukan.
Take profit dan stop loss point ditetapkan untuk setiap perdagangan, dan profit diambil atau stop loss dipicu segera ketika harga mencapai level take profit atau stop loss. sementara itu, strategi memetakan hubungan harga vs MA pada bar menggunakan fungsi barcolor - bar berwarna hijau selama posisi panjang, merah selama posisi pendek, dan biru ketika datar.
Risiko dapat dikurangi dengan menyesuaikan parameter MA, mengoptimalkan strategi take profit/stop loss, menghapus keterbatasan waktu atau menetapkan periode waktu perdagangan yang lebih wajar.
Strategi perdagangan pembalikan rata-rata bergerak ganda secara keseluruhan adalah strategi trend berikut yang sederhana dan praktis. Ini memanfaatkan sepenuhnya efek pelembab MAs untuk mengidentifikasi arah tren, dan menggunakan MAs cepat / lambat untuk menghasilkan sinyal perdagangan. Strategi ini mudah diterapkan dengan logika yang jelas, cocok untuk dimengerti pemula. Namun, ini dapat menghasilkan sinyal palsu yang berlebihan dan masalah lag. Perbaikan dapat dilakukan melalui optimasi parameter, menambahkan indikator bantu dll untuk membuat strategi lebih kuat. Jika digunakan dengan benar, strategi ini dapat memberikan keuntungan yang stabil dan layak pengujian dan optimasi yang komprehensif.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h 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/ // © HPotter // Simple SMA strategy // // WARNING: // - For purpose educate only // - This script to change bars colors //@version=4 timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0 strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true) Resolution = input(title="Resolution", type=input.resolution, defval="D") Source = input(title="Source", type=input.source, defval=close) xSeries = security(syminfo.tickerid, Resolution, Source) Length = input(title="Length", type=input.integer, defval=14, minval=2) TriggerPrice = input(title="Trigger Price", type=input.source, defval=close) TakeProfit = input(50, title="Take Profit", step=0.01) StopLoss = input(20, title="Stop Loss", step=0.01) UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false) BarColors = input(title="Painting bars", type=input.bool, defval=true) ShowLine = input(title="Show Line", type=input.bool, defval=true) UseAlerts = input(title="Use Alerts", type=input.bool, defval=false) timeframe = input(title="Time Frame", defval="15") timerange = input(title="Time Range", defval="2300-0800") reverse = input(title="Trade Reverse", type=input.bool, defval=false) pos = 0 xSMA = sma(xSeries, Length) pos := iff(TriggerPrice > xSMA, 1, iff(TriggerPrice < xSMA, -1, nz(pos[1], 0))) nRes = ShowLine ? xSMA : na alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY') alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL') alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position') possig =iff(pos[1] != pos, iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)), 0) if (possig == 1 and timeinrange(timeframe, timerange)) strategy.entry("Long", strategy.long) if (possig == -1 and timeinrange(timeframe, timerange)) strategy.entry("Short", strategy.short) if (timeinrange(timeframe, timerange) == 0) strategy.close_all() if (UseTPSL) strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit") strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss") strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit") strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss") nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na barcolor(nColor) plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)