
Strategi ini digunakan untuk mengenal pasti trend dengan mengira pergerakan EMA berganda dan pergerakan DEMA berganda untuk mengenal pasti trend, dan untuk menyaring penembusan palsu dalam kombinasi dengan indikator kadar turun naik ATR, mewujudkan strategi perdagangan kuantitatif dengan penyaring kadar turun naik dan indikator kadar turun naik.
Strategi ini terdiri daripada beberapa bahagian:
EMA dan DEMA yang dikira harga sebagai penunjuk momentum ganda. Di mana EMA yang lebih berkala mencerminkan trend jangka panjang, DEMA sebagai penunjuk momentum jangka pendek yang lebih sensitif.
Mengira indikator kadar turun naik ATR. Dengan ukuran ATR, anda boleh menilai kadar turun naik dan kecairan pasaran. Apabila kadar turun naik terlalu besar, anda boleh memfilterkan isyarat indikator turun naik untuk mengelakkan pecah palsu.
Kadar ATR berfluktuasi dinilai berdasarkan parameter pergerakan rata-rata. Apabila kadar ATR berfluktuasi lebih rendah daripada purata bergerak, isyarat penunjuk pergerakan dibenarkan.
Dengan parameter, anda boleh mengawal kitaran masa ATR, panjang ATR, jenis dan panjang purata bergerak ATR, dan sebagainya.
Menubuhkan peraturan untuk menghentikan, menghentikan dan menjejaki kerugian dalam kedudukan berbilang kepala.
Strategi penapisan EMA ganda ini dapat mengurangkan isyarat palsu dan perdagangan yang kerap dalam strategi EMA Gold Fork Dead Fork biasa. Dengan penambahan indikator kadar turun naik ATR, ia dapat menapis isyarat yang menyesatkan yang disebabkan oleh turun naik kecil dan mengelakkan penangkapan.
Strategi ini menggunakan reka bentuk dua indikator yang dapat meningkatkan keputusan berbanding dengan satu indikator dinamik. Sebagai indikator dinamik jangka pendek yang lebih sensitif, DEMA bekerjasama dengan EMA garis panjang yang stabil, membentuk isyarat gabungan yang lebih dipercayai.
Dengan menyesuaikan parameter ATR, anda boleh menetapkan keadaan kadar turun naik yang sesuai untuk objek yang berbeza, meningkatkan kebolehgunaan strategi.
Risiko terbesar dalam strategi ini adalah bahawa parameter yang tidak betul boleh menyebabkan isyarat perdagangan menjadi terlalu jarang. Panjang DEMA dan EMA yang terlalu panjang, atau had kadar turun naik ATR yang terlalu tinggi, dapat melemahkan keberkesanan operasi sebenar strategi. Ini perlu disesuaikan dengan kombinasi parameter yang terbaik melalui ujian berulang.
Risiko lain yang berpotensi adalah bahawa dalam keadaan yang melampau, turun naik harga mungkin melampaui batasan parameter ATR dan menyebabkan kerugian. Ini memerlukan pemantauan manusia terhadap keadaan luar biasa di pasaran dan menangguhkan operasi strategi.
Uji kombinasi parameter indikator momentum yang berbeza untuk mencari parameter terbaik.
Cuba untuk menyesuaikan penunjuk momentum dengan MACD atau penunjuk lain daripada dua EMA.
Uji pelbagai set indikator turun naik, seperti ATR sejarah keseluruhan, indeks turun naik pasaran, dan sebagainya.
Menambah penapisan untuk jumlah transaksi, mengelakkan risiko harga yang tidak nyata.
Mengoptimumkan mekanisme penghentian kerugian untuk meningkatkan keuntungan daripada kerugian.
Strategi ini mengintegrasikan penunjuk dinamik dan analisis kadar turun naik, direka berdasarkan asas teori yang kukuh. Dengan penyesuaian parameter dan pengoptimuman peraturan, ia boleh menjadi strategi perdagangan kuantitatif yang stabil dan boleh dipercayai.
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
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/
// © Qorbanjf
//@version=4
strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true)
// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)
//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)
// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
//longLossPerc = input(title="Long Stop Loss (%)",
// type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
longTrailPerc = input(title="Trail stop loss (%)",
type=input.float, minval=0.0, step=0.1, defval=50) * 0.01
longProfitPerc = input(title="Long Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=3000) / 100
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30)
atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100
// Moving Average Logic
ma(maType, src, length) =>
maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))
// variables for enter position
enterLong = crossover(dema1, ema1) and atrp < maFilter
// variables for exit position
sale = crossunder(dema1, ema1)
// stop loss
//longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
// trail stop
// Determine trail stop loss prices
longStopTrail = 0.0
longStopTrail := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopTrail[1])
else
0
//Take profit Percentage
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
//Enter trades when conditions are met
strategy.entry(id="long",
long=strategy.long,
when=enterLong,
comment="long")
//
strategy.close("long", when = sale, comment = "Sell")
//place exit orders (only executed after trades are active)
strategy.exit(id="sell",
limit = longExitPrice,
stop = longStopTrail,
comment = "SL/TP")