
Strategi ini disebut strategi DEMA dan EMA short-cross combined ATR volatility strategy. Strategi ini menghasilkan strategi perdagangan short-line yang efisien dengan menghitung sinyal silang DEMA dan EMA, yang dikombinasikan dengan indikator volatilitas ATR.
Perhitungan indikator DEMA DEMA adalah moving average dari EMA ganda, dengan menghitung EMA ganda dalam periode tertentu, dapat secara efektif menyaring kebisingan pasar jangka pendek dan meningkatkan akurasi sinyal.
Menghitung indikator EMA. EMA adalah rata-rata bergerak indeks yang dapat bereaksi lebih cepat terhadap perubahan harga.
ATR merupakan indikator dari amplitudo fluktuasi yang sebenarnya, yang dapat mencerminkan volatilitas pasar dan tingkat risiko. Ketika ATR naik, maka akan terjadi peningkatan fluktuasi pasar, yang dapat menyebabkan perubahan garis pendek.
Ketika DEMA turun melalui EMA, dan ATR berfluktuasi lebih besar dari parameter yang ditetapkan, menunjukkan bahwa harga saham mulai turun, pasar risk off, dan pada saat ini melakukan shorting.
Ketika DEMA kembali naik memakai EMA, menunjukkan bahwa harga membentuk support dan mulai rebound ke atas, saat ini bernegosiasi.
Dua EMA digabungkan dengan EMA, dapat secara efektif meningkatkan akurasi sinyal.
Indikator tingkat fluktuasi ATR dapat mengecualikan sinyal whipsaw berisiko rendah.
Operasi jangka pendek, cocok untuk pelacakan garis pendek, dapat menghindari jangka panjang.
Logika transaksi sederhana dan jelas, mudah dipahami dan diterapkan.
ATR parameter yang tidak tepat dapat kehilangan peluang perdagangan.
Perlu untuk memperhatikan sinyal dua sisi udara pada saat yang sama, operasi lebih sulit.
ffected by short-term market volatility.
Solusi: pengujian optimasi parameter, penyesuaian parameter; menyederhanakan logika perdagangan, hanya fokus pada sinyal unilateral; memperluas jangkauan stop loss secara tepat.
Mengoptimalkan parameter DEMA dan EMA, mencari kombinasi parameter yang optimal.
Optimalkan parameter periodik ATR untuk menentukan indikator terbaik untuk mengukur volatilitas pasar.
Menambahkan indikator tambahan lainnya, seperti saluran BOLL, meningkatkan akurasi sinyal.
Menambahkan aturan stop loss dan stop loss untuk mengunci keuntungan yang lebih stabil.
Strategi ini menggunakan indikator volatilitas DEMA, EMA cross, dan ATR untuk membangun strategi perdagangan jangka pendek yang sederhana dan efisien. Strategi ini memiliki logika perdagangan yang jelas, mudah dioperasikan, dan dapat disesuaikan dengan perdagangan garis pendek frekuensi tinggi. Langkah selanjutnya adalah dengan optimasi parameter dan optimasi aturan, diharapkan untuk mendapatkan keuntungan tambahan yang lebih stabil.
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 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
// 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("Qorban: DEMA/EMA & VOL Short ONLY", shorttitle="DEMA/EMA & VOL SHORT", 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)
// get ATR VALUE
atr = atr(14)
//ATRP (Average True Price in precentage)
// 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)
slType = input(title="Stop Loss ATR / %", type=input.float, defval=5.0, step=0.1)
slMulti = input(title="SL Multiplier", type=input.float, defval=1.0, step=0.1)
minimumProfitPercent = input(title="Minimum profit %", type=input.float, defval=20.00)
// 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))
// Determine percentage of open profit
var entry = 0.0
distanceProfit = low - entry
distanceProfitPercent = distanceProfit / entry
//Determin if we have a long entry signal OR a sell position signal
profitSignal = minimumProfitPercent == 0.0 or distanceProfitPercent >= minimumProfitPercent
shortSignal = crossunder(dema1, ema1) and atrp > maFilter and strategy.position_size == 0 and not na(atr)
exitSignal = profitSignal and strategy.position_size !=0 and crossover(dema1, ema1)
// === 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)
//Invert trade direction & flipping
//tradInvert = input(defval = false, title = "invert trade direction")
//MOM_MR = input(defval=1, title = "MOM = 1 / MR = -1", minval=-1, maxval=1)
//plots=input(false, title="Show plots?")
// Get stop loss (in pips AND percentage distance)
shortStop = highest(high, 4) - (atr * slMulti)
shortStopPercent = close - (close * slMulti)
// Save long stop & target prices (used for drawing data to the chart & deetermining profit)
var shortStopSaved = 0.0
var shortTargetSaved = 0.0
enterShort = false
if shortSignal
shortStopSaved := slType ? shortStop : shortStopPercent
enterShort:= true
entry := close
// long conditions
//enterLong = crossover(dema1, ema1) and atrp < maFilter
//exitSignal => crossunder(dema1, ema1)
//Enter trades when conditions are met
strategy.entry("short", strategy.short, when=enterShort, comment="SHORT")
//place exit orders (only executed after trades are active)
strategy.exit(id="Short exit",
from_entry="short",
limit=exitSignal ? close : na,
stop=shortStopSaved,
when=strategy.position_size > 0,
comment="end short")
//short strategy
//goShort() => crossunder(dema1, ema1) and atrp > maFilter
//KillShort() => crossover(dema1, ema1)
//strategy.entry("SHORT", strategy.short, when = goShort())
//strategy.close("COVER", when = KillShort())