Strategi Terobosan Volatilitas

Penulis:ChaoZhang, Tanggal: 2023-12-13 14:36:04
Tag:

img

Gambaran umum

Strategi Terobosan Volatilitas adalah strategi yang membuat operasi beli dan jual ketika harga menerobos level support atau resistance kunci dalam pola volatilitas.

Prinsip Strategi

Strategi ini terutama didasarkan pada Bollinger Middle Band, 48 hari Simple Moving Average (SMA), MACD dan ADX empat indikator teknis.

  1. Pertimbangkan peluang perdagangan ketika harga penutupan melintasi SMA 48 hari atau di bawahnya;

  2. Ketika harga penutupan melewati Bollinger Middle Band, ini berfungsi sebagai sinyal masuk;

  3. MACD lebih besar atau kurang dari 0, berfungsi sebagai indikator tambahan untuk menentukan arah tren;

  4. ADX lebih besar dari 25 untuk menyaring pasar non-trending.

Ketika empat kondisi di atas terpenuhi, pergi panjang atau pergi pendek.

Keuntungan dari Strategi

Ini adalah strategi yang menggabungkan indikator tren dan volatilitas.

  1. SMA 48 hari menyaring perdagangan yang terlalu sering dan mengunci tren jangka menengah dan panjang;

  2. Bollinger Middle Band breakout menangkap titik-titik utama support/resistance breakout dengan fungsi stop loss yang kuat;

  3. MACD menilai arah tren utama, menghindari perdagangan melawan tren;

  4. ADX menyaring pasar non-trending dan meningkatkan tingkat kemenangan strategi.

Singkatnya, strategi ini telah membuat optimasi dalam mengendalikan frekuensi perdagangan, memahami poin kunci, menentukan arah tren dan menyaring gerakan yang tidak valid, sehingga memiliki tingkat kemenangan yang relatif tinggi.

Risiko dari Strategi

Risiko utama dari strategi ini adalah:

  1. Di pasar yang tidak stabil, Bollinger Middle Band dapat memicu terlalu banyak peluang perdagangan, yang mengarah pada perdagangan yang berlebihan;

  2. Indikator ADX juga memiliki beberapa kesalahan dalam menentukan tren dan gerakan yang tidak valid;

  3. Risiko penarikan yang relatif besar, cocok untuk investor yang dapat menanggung tingkat risiko tertentu.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Tambahkan indikator ATR untuk mengatur titik stop loss dan mengurangi per stop loss;

  2. Mengoptimalkan parameter Bollinger untuk mengurangi frekuensi pemicu garis tengah;

  3. Tambahkan indikator volume perdagangan atau kekuatan tren untuk menentukan kekuatan tren, menghindari perdagangan pembalikan yang lemah.

Ringkasan

Singkatnya, Strategi Terobosan Volatilitas ini relatif matang secara keseluruhan, secara efektif menangkap titik perdagangan utama di pasar yang volatile. Ini menggabungkan indikator tren dan volatilitas, menyeimbangkan antara risiko dan pengembalian. Dengan optimalisasi lebih lanjut, diharapkan untuk mendapatkan hasil yang lebih stabil.


/*backtest
start: 2023-12-11 00:00:00
end: 2023-12-12 00:00:00
period: 10m
basePeriod: 1m
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/
// © 03.freeman
//Volatility Traders Minds Strategy (VTM Strategy)
//I found this startegy on internet, with a video explaingin how it works.
//Conditions for entry:
//1 - Candles must to be above or bellow the 48 MA (Yellow line)
//2 - Candles must to break the middle of bollinger bands
//3 - Macd must to be above or bellow zero level;
//4 - ADX must to be above 25 level
//@version=4
strategy("Volatility Traders Minds Strategy (VTM Strategy)", shorttitle="VTM",overlay=true)
source = input(close)
//MA
ma48 = sma(source,48)
//MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

MACD = ema(source, fastLength) - ema(source, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

//BB

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)

basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

//ADX
adxThreshold = input(title="ADX Threshold", type=input.integer, defval=25, minval=1)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

sig = adx(dilen, adxlen)

//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => close>ma48 and close>basis and delta>0 and sig>adxThreshold  // functions can be used to wrap up and work out complex conditions
//exitLong() => jaw>teeth or jaw>lips or teeth>lips
strategy.entry(id = "Buy", long = true, when = enterLong() )    // use function or simple condition to decide when to get in
//strategy.close(id = "Buy", when = exitLong() )                  // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => close<ma48 and close<basis and delta<0 and sig>adxThreshold
//exitShort() => jaw<teeth or jaw<lips or teeth<lips
strategy.entry(id = "Sell", long = false, when = enterShort())
//strategy.close(id = "Sell", when = exitShort() )

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

Lebih banyak