Strategi perdagangan pembalikan purata bergerak berganda menghasilkan isyarat perdagangan dengan mengira purata bergerak mudah dari dua tempoh yang berbeza - jangka pendek dan jangka panjang. Ia menjadi panjang apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang, dan menjadi pendek apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang. Strategi ini tergolong dalam kategori strategi trend berikut.
Strategi ini menetapkan dua purata bergerak mudah dengan panjang tempoh yang berbeza melalui parameter input, dengan MA jangka pendek yang dirujuk sebagai garis pantas, dan MA jangka panjang yang dirujuk sebagai garis perlahan. Garis pantas bertindak balas lebih cepat terhadap perubahan harga dan menangkap trend jangka pendek, sementara garis perlahan bertindak balas lebih perlahan terhadap perubahan harga dan menapis bunyi pasaran jangka pendek, menangkap trend utama. Apabila garis pantas melintasi di atas garis perlahan, ia menunjukkan bahawa trend menaik semakin kuat dan kedudukan panjang diambil. Apabila garis pantas melintasi di bawah garis perlahan, ia menunjukkan bahawa trend menurun semakin kuat dan kedudukan pendek diambil.
Secara khusus, strategi ini mengira kedua-dua MAs menggunakan fungsi sma(), menetapkan hasilnya kepada xSMA (garis perlahan) dan garisan pantas. MAs dikira berdasarkan harga penutupan. Apabila harga penutupan melintasi di atas xSMA, kedudukan panjang diambil. Apabila harga penutupan melintasi di bawah xSMA, kedudukan pendek diambil. Strategi ini juga menetapkan had julat masa perdagangan, sehingga isyarat perdagangan hanya dihasilkan dalam julat masa yang ditentukan.
Titik mengambil keuntungan dan stop loss ditetapkan untuk setiap perdagangan, dan keuntungan diambil atau stop loss diaktifkan dengan segera apabila harga mencapai tahap mengambil keuntungan atau stop loss. Sementara itu, strategi merangka hubungan harga vs MA pada bar menggunakan fungsi barcolor - bar berwarna hijau semasa kedudukan panjang, merah semasa kedudukan pendek, dan biru apabila rata.
Risiko boleh dikurangkan dengan menyesuaikan parameter MA, mengoptimumkan mengambil keuntungan / strategi stop loss, menghilangkan batasan masa atau menetapkan tempoh masa perdagangan yang lebih munasabah.
Strategi perdagangan pembalikan purata bergerak berganda secara keseluruhan adalah strategi trend berikut yang mudah dan praktikal. Ia mengambil kesempatan penuh daripada kesan pelemahan MA untuk mengenal pasti arah trend, dan menggunakan MA cepat / perlahan untuk menjana isyarat perdagangan. Strategi ini mudah dilaksanakan dengan logik yang jelas, sesuai untuk dimengerti oleh pemula. Walau bagaimanapun, ia boleh menjana isyarat palsu yang berlebihan dan masalah kelewatan. Penambahbaikan boleh dibuat melalui pengoptimuman parameter, menambah penunjuk tambahan dan lain-lain untuk menjadikan strategi lebih mantap. Jika digunakan dengan betul, strategi ini dapat memberikan keuntungan yang stabil dan bernilai pengujian dan pengoptimuman 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)