Strategi Penembusan Volatiliti

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

img

Ringkasan

Strategi Penembusan Volatiliti adalah strategi yang membuat operasi beli dan jual apabila harga menembusi tahap sokongan atau rintangan utama dalam corak turun naik. Strategi ini menggabungkan beberapa penunjuk teknikal untuk mengenal pasti peluang perdagangan utama.

Prinsip Strategi

Strategi ini terutamanya berdasarkan Bollinger Middle Band, 48 hari Simple Moving Average (SMA), MACD dan ADX empat penunjuk teknikal.

  1. Pertimbangkan peluang perdagangan apabila harga penutupan melintasi di atas atau di bawah SMA 48 hari;

  2. Apabila harga penutupan menembusi Bollinger Middle Band, ia berfungsi sebagai isyarat kemasukan;

  3. MACD lebih besar daripada atau kurang daripada 0, berfungsi sebagai penunjuk tambahan untuk menentukan arah trend;

  4. ADX lebih besar daripada 25 untuk menapis pasaran bukan trend.

Apabila empat syarat di atas dipenuhi, pergi panjang atau pergi pendek.

Kelebihan Strategi

Ini adalah strategi yang menggabungkan penunjuk trend dan turun naik.

  1. SMA 48 hari menapis perdagangan yang terlalu kerap dan mengunci trend jangka sederhana dan panjang;

  2. Penembusan Bollinger Middle Band merangkumi titik-titik penembusan sokongan / rintangan utama dengan fungsi stop loss yang kuat;

  3. MACD menilai arah trend utama, mengelakkan perdagangan terhadap trend;

  4. ADX menapis pasaran bukan trend dan meningkatkan kadar kemenangan strategi.

Ringkasnya, strategi ini telah membuat pengoptimuman dalam mengawal kekerapan perdagangan, memahami titik utama, menentukan arah trend dan menapis pergerakan yang tidak sah, dengan itu mempunyai kadar kemenangan yang agak tinggi.

Risiko Strategi

Risiko utama strategi ini ialah:

  1. Dalam pasaran yang tidak menentu, Bollinger Middle Band boleh mencetuskan terlalu banyak peluang perdagangan, yang membawa kepada perdagangan berlebihan;

  2. Indikator ADX juga mempunyai beberapa kesilapan dalam menentukan trend dan pergerakan yang tidak sah;

  3. Risiko pengambilan yang agak besar, sesuai untuk pelabur yang boleh menanggung tahap risiko tertentu.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah penunjuk ATR untuk menetapkan titik stop loss dan mengurangkan setiap stop loss;

  2. Mengoptimumkan parameter Bollinger untuk mengurangkan frekuensi mencetuskan garis tengah;

  3. Menambah jumlah dagangan atau penunjuk kekuatan trend untuk menentukan kekuatan trend, mengelakkan perdagangan pembalikan yang lemah.

Ringkasan

Ringkasnya, Strategi Terobosan Volatiliti ini agak matang secara keseluruhan, dengan berkesan menangkap titik perdagangan utama di pasaran yang tidak menentu. Ia menggabungkan penunjuk trend dan turun naik, menyeimbangkan antara risiko dan pulangan. Dengan pengoptimuman lanjut, ia dijangka memperoleh pulangan lebihan yang lebih mantap.


/*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 lanjut