
Strategi ini adalah berdasarkan pada prinsip garpu emas rata-rata bergerak untuk perdagangan. Strategi ini menggunakan dua rata-rata bergerak, menghasilkan isyarat beli apabila rata-rata bergerak jangka pendek menembusi rata-rata bergerak jangka panjang dari arah bawah.
Strategi ini menggunakan kitaran purata bergerak jangka pendek yang disesuaikan oleh pengguna, kitaran purata bergerak jangka panjang, kitaran purata bergerak keluar, dan cara mengira purata bergerak.
Apabila purata bergerak jangka pendek melangkaui purata bergerak jangka panjang dari arah bawah, ia menghasilkan isyarat beli. Ini menunjukkan bahawa trend jangka pendek ditukar menjadi trend ke atas dan boleh dibeli.
Apabila harga penutupan jatuh dan keluar dari purata bergerak, ia menghasilkan isyarat jual. Ini menunjukkan bahawa trend berbalik dan anda harus keluar dari kedudukan.
Oleh itu, isyarat perdagangan untuk strategi ini berasal dari persilangan purata bergerak jangka pendek dan purata bergerak jangka panjang dan hubungan antara harga penutupan dan keluar dari purata bergerak.
Strategi ini mempunyai kelebihan berikut:
Mudah difahami, mudah dilaksanakan.
Parameter yang boleh disesuaikan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Menggunakan purata bergerak untuk menyaring bunyi bising dan menangkap trend utama.
Indikator teknikal seperti trend, sokongan dan rintangan boleh dioptimumkan lebih lanjut.
Peratusan kerugian boleh dikawal, dengan mekanisme hentikan kerugian.
Strategi ini juga mempunyai risiko:
Dalam pasaran yang tidak menonjol, ia mudah untuk menghasilkan isyarat palsu.
Tetapan parameter yang tidak betul boleh menyebabkan kehilangan trend atau terlalu banyak perdagangan yang tidak sah.
Tetapan kedudukan stop loss yang tidak munasabah boleh meningkatkan kerugian.
Kegagalan penembusan boleh menyebabkan kerugian.
Perlu menyesuaikan parameter mengikut perubahan pasaran.
Penyelesaian untuk menghadapi risiko termasuk: menetapkan parameter optimum, menggabungkan isyarat penapis indikator lain, menyesuaikan kedudukan hentian, menentukan trend dan kemudian terlibat.
Strategi ini boleh dioptimumkan dengan:
Membangunkan mekanisme untuk menilai trend, menentukan trend dan menghasilkan isyarat perdagangan.
Menapis isyarat dengan jumlah dagangan atau indikator turun naik.
Parameter kitaran purata bergerak yang dioptimumkan secara dinamik.
Mengoptimumkan mekanisme penangguhan kerugian, mewujudkan penangguhan kerugian bergerak.
Dalam kombinasi dengan sokongan dan rintangan dan petunjuk lain, isyarat perdagangan disahkan lebih lanjut.
Parameter penyesuaian mengikut jenis dan tempoh yang berbeza.
Strategi perdagangan garpu garis garpu bergerak secara keseluruhan adalah strategi penjejakan trend yang mudah dan praktikal. Ia dapat menyesuaikan parameter mengikut keadaan pasaran, menangkap arah trend utama dalam keadaan trend. Tetapi juga berhati-hati untuk melindungi risiko seperti kesalahan penilaian trend, perlu terus dioptimumkan untuk menyesuaikan diri dengan perubahan pasaran.
/*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()