Strategi Perdagangan Crossover Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-11-06 16:38:22
Tag:

img

Ringkasan

Strategi ini berdasarkan prinsip persilangan purata bergerak untuk berdagang. Ia menggunakan dua purata bergerak, menjana isyarat beli apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang dari bawah. Isyarat jual dihasilkan apabila harga pecah di bawah purata bergerak lain. Strategi ini sesuai untuk pasaran trend, mampu menapis beberapa perdagangan bunyi secara berkesan dan menangkap trend utama.

Logika Strategi

Strategi ini menggunakan tempoh purata bergerak jangka pendek dan jangka panjang yang boleh disesuaikan oleh pengguna, tempoh purata bergerak keluar, dan kaedah pengiraan purata bergerak.

Apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang dari bawah, isyarat beli dihasilkan. Ini menunjukkan trend jangka pendek telah beralih ke trend menaik, dan kita boleh membeli.

Apabila harga penutupan pecah di bawah purata bergerak keluar, isyarat jual dihasilkan. Ini menunjukkan pembalikan trend, jadi kita harus keluar dari kedudukan.

Oleh itu, isyarat perdagangan strategi berasal dari persilangan purata bergerak jangka pendek dan jangka panjang, dan hubungan antara harga penutupan dan purata bergerak keluar.

Analisis Kelebihan

Kelebihan strategi ini ialah:

  1. Sederhana dan mudah dilaksanakan.

  2. Parameter yang boleh disesuaikan sesuai dengan keadaan pasaran yang berbeza.

  3. Purata bergerak menapis bunyi bising dan menangkap trend utama.

  4. Boleh menggabungkan penunjuk teknikal lain seperti trend, sokongan / rintangan untuk mengoptimumkan lebih lanjut.

  5. Nisbah risiko-balasan yang boleh dikawal, mempunyai mekanisme stop loss.

Analisis Risiko

Risiko adalah:

  1. Rendah kepada isyarat palsu di pasaran konsolidasi yang tidak trend.

  2. Tetapan parameter yang tidak betul boleh menyebabkan trend yang hilang atau terlalu banyak perdagangan yang tidak sah.

  3. Penempatan stop loss yang tidak betul boleh meningkatkan kerugian.

  4. Kegagalan melarikan diri boleh menyebabkan kerugian.

  5. Parameter perlu disesuaikan tepat pada masanya untuk menyesuaikan perubahan pasaran.

Penyelesaian termasuk mengoptimumkan parameter, menggabungkan penapis lain, menyesuaikan berhenti, menunggu pengesahan trend sebelum perdagangan, dan lain-lain.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dengan:

  1. Membangunkan mekanisme penentuan trend dan hanya berdagang selepas pengesahan trend.

  2. Menambah penapis seperti jumlah atau volatiliti untuk menapis isyarat.

  3. Pengoptimuman dinamik tempoh purata bergerak.

  4. Mengoptimumkan mekanisme Stop Loss untuk menggunakan trailing stop.

  5. Memasukkan sokongan/tahan dan penunjuk lain untuk mengesahkan isyarat lebih lanjut.

  6. Penyesuaian parameter berdasarkan produk dan jangka masa yang berbeza.

Kesimpulan

Secara keseluruhan strategi crossover purata bergerak ini adalah sistem trend berikut yang mudah dan praktikal. Ia boleh disesuaikan dengan keadaan pasaran dengan mengubah parameter dan menangkap arah trend utama di pasaran trend. Tetapi risiko seperti salah mengenal pasti trend harus diperhatikan, dan pengoptimuman berterusan diperlukan untuk menyesuaikan diri dengan pasaran yang berubah. Secara umum, strategi ini mempunyai daya maju yang baik.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © TwoChiefs

//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

//CREATE USER-INPUT VARIABLES

periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])


src1 = close
pivot = (high + low + close) / 3

//MA CALCULATION FUNCTION
ma(smoothing, src, length) => 
    if smoothing == "RMA"
        rma(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        else 
            if smoothing == "EMA"
                ema(src, length)
            else 
                if smoothing == "WMA"
                    wma(src, length)
				else
					if smoothing == "VWMA"
						vwma(src, length)
					else
						if smoothing == "SMMA"
							na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
						
						else
							if smoothing == "HullMA"
								wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))




//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)

//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")



//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na


strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)


if (not time_cond)
    strategy.close_all()


Lebih lanjut