Strategi perdagangan lintas rata-rata bergerak

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

img

Gambaran umum

Strategi ini didasarkan pada prinsip crossover dari moving average untuk trading. Strategi ini menggunakan dua moving average, menghasilkan sinyal beli ketika moving average jangka pendek melintasi di atas moving average jangka panjang dari bawah. Sinyal jual dihasilkan ketika harga pecah di bawah moving average lain. Strategi ini cocok untuk pasar tren, mampu secara efektif menyaring beberapa perdagangan kebisingan dan menangkap tren utama.

Logika Strategi

Strategi ini menggunakan periode rata-rata bergerak jangka pendek dan jangka panjang yang dapat disesuaikan oleh pengguna, periode rata-rata bergerak keluar, dan metode perhitungan rata-rata bergerak.

Ketika rata-rata bergerak jangka pendek melintasi di atas rata-rata bergerak jangka panjang dari bawah, sinyal beli dihasilkan. Ini menunjukkan tren jangka pendek telah beralih ke tren naik, dan kita dapat membeli.

Ketika harga penutupan keluar di bawah rata-rata pergerakan keluar, sinyal jual dihasilkan. Ini menunjukkan pembalikan tren, jadi kita harus keluar dari posisi.

Oleh karena itu, sinyal perdagangan strategi berasal dari persilangan rata-rata bergerak jangka pendek dan jangka panjang, dan hubungan antara harga penutupan dan rata-rata bergerak keluar.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Sederhana dan mudah diterapkan.

  2. Parameter yang dapat disesuaikan sesuai dengan kondisi pasar yang berbeda.

  3. Rata-rata bergerak menyaring kebisingan dan menangkap tren utama.

  4. Dapat menggabungkan indikator teknis lainnya seperti tren, dukungan / resistensi untuk mengoptimalkan lebih lanjut.

  5. Rasio risiko-balasan yang terkontrol, memiliki mekanisme stop loss.

Analisis Risiko

Risiko adalah:

  1. Cenderung terhadap sinyal palsu di pasar konsolidasi non-trending.

  2. Pengaturan parameter yang tidak benar dapat menyebabkan hilangnya tren atau terlalu banyak perdagangan yang tidak valid.

  3. Penempatan stop loss yang tidak tepat dapat meningkatkan kerugian.

  4. Kegagalan melarikan diri dapat menyebabkan kerugian.

  5. Parameter perlu disesuaikan tepat waktu agar sesuai dengan perubahan pasar.

Solusi termasuk mengoptimalkan parameter, menggabungkan filter lain, menyesuaikan stop, menunggu konfirmasi tren sebelum perdagangan, dll.

Arahan Optimasi

Strategi ini dapat ditingkatkan dengan:

  1. Mengembangkan mekanisme penentuan tren dan hanya berdagang setelah konfirmasi tren.

  2. Menambahkan filter seperti volume atau volatilitas ke sinyal filter.

  3. Optimasi dinamis periode rata-rata bergerak.

  4. Mengoptimalkan mekanisme stop loss untuk menggunakan trailing stop.

  5. Menggabungkan dukungan/resistensi dan indikator lain untuk mengkonfirmasi sinyal lebih lanjut.

  6. Mengatur parameter berdasarkan produk yang berbeda dan kerangka waktu.

Kesimpulan

Secara keseluruhan strategi crossover rata-rata bergerak ini adalah sistem trend berikut yang sederhana dan praktis. Ini dapat disesuaikan dengan kondisi pasar dengan tweaking parameter dan menangkap arah tren utama di pasar tren. Tetapi risiko seperti kesalahan identifikasi tren harus dicatat, dan optimasi konstan diperlukan untuk beradaptasi dengan pasar yang berubah. Secara umum, strategi ini memiliki kelangsungan hidup 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 banyak