Strategi penembusan kejutan harga


Tarikh penciptaan: 2023-12-13 14:36:04 Akhirnya diubah suai: 2023-12-13 14:36:04
Salin: 3 Bilangan klik: 635
1
fokus pada
1621
Pengikut

Strategi penembusan kejutan harga

Gambaran keseluruhan

Strategi penembusan guncangan adalah strategi yang memanfaatkan bentuk guncangan harga untuk melakukan operasi jual beli apabila harga menembusi tahap sokongan atau rintangan utama. Strategi ini menggabungkan pelbagai petunjuk teknikal untuk mengenal pasti peluang perdagangan utama.

Prinsip Strategi

Strategi ini berdasarkan kepada empat penunjuk teknikal iaitu garis tengah Brin, 48 hari purata bergerak sederhana (SMA), MACD dan ADX. Logiknya ialah:

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

  2. Sebagai isyarat masuk apabila harga penutupan menembusi garis tengah Bollinger Bands;

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

  4. ADX lebih besar daripada 25 untuk menyaring pergerakan bukan trend.

Melakukan lebih atau kurang apabila memenuhi empat syarat di atas.

Kelebihan Strategik

Ini adalah strategi yang menggabungkan trend dan indikator getaran. Kelebihan utamanya ialah:

  1. 48 hari SMA menyaring perdagangan yang terlalu kerap dan mengunci trend garis tengah dan panjang;

  2. Brin Belt Midline Breakthrough menguasai titik penembusan rintangan sokongan utama, dengan fungsi penghentian kerosakan yang kuat;

  3. MACD menilai arah trend besar dan mengelakkan dagangan berlawanan;

  4. ADX menyaring pasaran yang tidak bergaya untuk meningkatkan peluang strategi.

Secara keseluruhannya, strategi ini telah dioptimumkan dalam pelbagai aspek seperti mengawal frekuensi dagangan, menangkap titik-titik penting, menilai trend dan menyaring tindakan yang tidak berkesan.

Risiko Strategik

Strategi ini mempunyai risiko utama:

  1. Dalam pasaran yang bergolak, BRI sering mencetuskan peluang dagangan yang mungkin berlebih-lebihan.

  2. Indeks ADX juga mempunyai kesilapan dalam menilai trend dan ketidakpatuhan.

  3. Penarikan balik adalah lebih berisiko dan sesuai untuk pelabur yang mempunyai kapasiti risiko tertentu.

Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Meningkatkan ATR, menetapkan titik hentian, mengurangkan hentian tunggal;

  2. Mengoptimumkan parameter pita Brin dan mengurangkan frekuensi pemicu saluran tengah;

  3. Meningkatkan jumlah dagangan atau penunjuk kekuatan trend untuk menilai trend yang kuat dan mengelakkan pembalikan kelemahan.

ringkaskan

Secara keseluruhannya, strategi penembusan gegaran ini lebih matang secara keseluruhan, dan berjaya menangkap titik-titik perdagangan utama dalam keadaan gegaran. Ia menggabungkan trend dan penunjuk gegaran, untuk memahami keseimbangan antara risiko dan keuntungan. Dengan pengoptimuman lanjut, diharapkan untuk mendapatkan keuntungan tambahan yang lebih stabil.

Kod sumber strategi
/*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()