Hein Ashu dan Strategi Tren Super


Tanggal Pembuatan: 2023-11-02 16:15:18 Akhirnya memodifikasi: 2023-11-02 16:15:18
menyalin: 1 Jumlah klik: 1214
1
fokus pada
1621
Pengikut

Hein Ashu dan Strategi Tren Super

Ringkasan

Strategi Hype dan Supertrend adalah strategi pelacakan tren yang menggabungkan grafik Hype dan indikator Supertrend. Strategi ini bertujuan untuk mengidentifikasi arah tren, melakukan perdagangan di zona tren, dan keluar dengan cepat ketika tren berbalik, untuk meminimalkan kerugian yang ditimbulkan oleh perdagangan non-trend.

Prinsip Strategi

Diagram Hyundai adalah sebuah grafik K-line khusus yang menggunakan nilai rata-rata harga buka, tutup, harga tertinggi, dan harga terendah untuk memetakan entitas berlian, sehingga dapat menyaring kebisingan pasar dan membuat grafik lebih jelas. Indikator Supertrend terdiri dari dua kurva, yang menilai arah tren melalui garis dukungan dan resistensi yang dinamis.

Strategi ini pertama-tama menghitung grafik Huygens dan kemudian menghitung indikator tren super berdasarkan garis Huygens dan K. Ketika harga melewati indikator tren super, sinyal perdagangan dihasilkan. Secara khusus, strategi ini menggunakan garis Huygens dan K untuk menghitung amplitudo aktual, kemudian menggabungkan amplitudo dan harga rata-rata untuk mendapatkan uptrend dan downtrend dari tren super.

Strategi ini juga melakukan optimasi parameter untuk indikator supertrend, menggunakan kombinasi parameter terbaik, sehingga meningkatkan sensitivitas indikator. Selain itu, strategi ini menambahkan mekanisme stop loss, yang dapat mengontrol risiko sambil menjamin keuntungan.

Analisis Keunggulan

  • Dengan menggunakan peta Heine-Asio, sinyal dapat disaring agar lebih jelas.
  • Indikator supertrend dapat menangkap perubahan tren dengan cepat dan mengirimkan sinyal perdagangan tepat waktu.
  • Optimasi parameter meningkatkan keandalan indikator.
  • Ada juga sistem stop-loss built-in yang dapat mengontrol risiko secara efektif.
  • Dengan kombinasi trend tracking dan sistem perdagangan mekanis, tingkat otomatisasi yang tinggi.

Analisis risiko

  • Sistem perdagangan sangat otomatis dan perlu dipantau secara ketat untuk menghindari ketidaknormalan.
  • Meskipun peta Heinz dapat menyaring kebisingan, namun juga dapat melewatkan sinyal bolak-balik yang sangat kecil.
  • Indikator supertrend dapat menghasilkan sinyal yang salah, yang menyebabkan masuk atau berhenti prematur.
  • Stop loss yang tidak tepat juga dapat menyebabkan kerugian yang tidak perlu.
  • Data retesting yang tidak memadai dapat menyebabkan overmatch. Hasil retesting dengan hard disk dapat memiliki deviasi yang lebih besar.

Arah optimasi

  • Uji lebih banyak kombinasi parameter untuk mengoptimalkan indikator supertrend.
  • Cobalah indikator lain untuk mengkonfirmasi sinyal indikator supertrend, mengurangi tingkat sinyal yang salah.
  • Optimalkan strategi stop loss untuk meminimalkan kerugian yang tidak perlu, dengan asumsi bahwa keuntungan akan terjamin.
  • Meningkatkan kemampuan algoritma pembelajaran mesin untuk mendeteksi tren yang sebenarnya menggunakan pelatihan data besar.
  • Dengan menggunakan periode waktu yang lebih lama dan data historis dari lebih banyak pasar yang berbeda untuk melakukan retrospeksi, meningkatkan keandalan.

Meringkaskan

Strategi Hype dan Supertrend adalah strategi pelacakan tren. Strategi ini dapat mengidentifikasi arah tren, melakukan perdagangan di bawah tren besar, dan berhenti dengan cepat saat berbalik. Strategi ini mengintegrasikan penyaringan kebisingan dari grafik Hype dan kemampuan untuk menangkap perubahan tren dengan cepat dari indikator supertrend.

Kode Sumber Strategi
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("Heiken Ashi & Super Trend_ARM", overlay=true,  pyramiding=1,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.02)

///////////////////////////////////////////////////
////////////////////Function///////////////////////
///////////////////////////////////////////////////


heikinashi_open = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_high = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, high)
heikinashi_low  = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, low)
heikinashi_close= request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_color = heikinashi_open < heikinashi_close ? #53b987 : #eb4d5c
// plotbar(heikinashi_open, heikinashi_high, heikinashi_low, heikinashi_close, color=heikinashi_color)

x_sma(x, y) =>
    sumx = 0.0
    for i = 0 to y - 1
        sumx := sumx + x[i] / y
    sumx

x_rma(src, length) =>
	alpha = 1/length
	sum = 0.0
	sum := na(sum[1]) ? x_sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])

x_atr(length) =>
    trueRange = na(heikinashi_high[1])? heikinashi_high-heikinashi_low : math.max(math.max(heikinashi_high - heikinashi_low, math.abs(heikinashi_high - heikinashi_close[1])), math.abs(heikinashi_low - heikinashi_close[1]))
    //true range can be also calculated with ta.tr(true)
    x_rma(trueRange, length)

x_supertrend(factor, atrPeriod) =>
	src = (heikinashi_high+heikinashi_low)/2
	atr = x_atr(atrPeriod)
	upperBand = src + factor * atr
	lowerBand = src - factor * atr
	prevLowerBand = nz(lowerBand[1])
	prevUpperBand = nz(upperBand[1])

	lowerBand := lowerBand > prevLowerBand or heikinashi_close[1] < prevLowerBand ? lowerBand : prevLowerBand
	upperBand := upperBand < prevUpperBand or heikinashi_close[1] > prevUpperBand ? upperBand : prevUpperBand
	int direction = na
	float superTrend = na
	prevSuperTrend = superTrend[1]
	if na(atr[1])
		direction := 1
	else if prevSuperTrend == prevUpperBand
		direction := heikinashi_close > upperBand ? -1 : 1
	else
		direction := heikinashi_close < lowerBand ? 1 : -1
	superTrend := direction == -1 ? lowerBand : upperBand
	[superTrend, direction]
	

///////////////////////////////////////////////////
////////////////////Indicators/////////////////////
///////////////////////////////////////////////////

factor = input.float(3.0, "Factor", step = 0.01)
atrPeriod = input(10, "ATR Length")


[supertrend, direction] = x_supertrend(factor, atrPeriod)

bodyMiddle = plot((heikinashi_open + heikinashi_close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

///////////////////////////////////////////////////
////////////////////Strategy///////////////////////
///////////////////////////////////////////////////

var bool longCond                    = na, var bool shortCond                   = na, longCond := nz(longCond[1]), shortCond := nz(shortCond[1])
var int CondIni_long                 = 0, var int CondIni_short                 = 0, CondIni_long := nz(CondIni_long[1]), CondIni_short := nz(CondIni_short[1])
var float open_longCondition         = na, var float open_shortCondition   = na


long  = ta.change(direction) < 0
short = ta.change(direction) > 0


longCond        :=                                                              long
shortCond       :=                                                              short

CondIni_long    :=                                                              longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_long[1])
CondIni_short   :=                                                              longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_short[1])
longCondition   =                                                               (longCond[1] and nz(CondIni_long[1]) == -1)
shortCondition  =                                                               (shortCond[1] and nz(CondIni_short[1]) == 1)


open_longCondition             :=                                          long ? close[1] :                                                      nz(open_longCondition[1])
open_shortCondition            :=                                          short ? close[1] :                                                     nz(open_shortCondition[1])


//TP
tp                    = input.float(1.1  , "TP [%]",                      step = 0.1) 

//BACKTESTING inputs --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

testStartYear       =                   input.int(2000,                             title="start year",                                         minval = 1997, maxval = 3000,                                                   group= "BACKTEST") 
testStartMonth      =                   input.int(01,                               title="start month",                                        minval = 1, maxval = 12,                                                        group= "BACKTEST")
testStartDay        =                   input.int(01,                               title="start day",                                          minval = 1, maxval = 31,                                                        group= "BACKTEST")
testPeriodStart     =                   timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear        =                   input.int(3333,                             title="stop year",                                          minval=1980, maxval = 3333,                                                     group= "BACKTEST")
testStopMonth       =                   input.int(12,                               title="stop month",                                         minval=1, maxval=12,                                                            group= "BACKTEST")
testStopDay         =                   input.int(31,                               title="stop day",                                           minval=1, maxval=31,                                                            group= "BACKTEST")
testPeriodStop      =                   timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod          =                   time >= testPeriodStart and time <= testPeriodStop ? true : false

// Backtest  ==================================================================================================================================================================================================================================================================================================================================


if longCond
    strategy.entry("L", strategy.long, when=testPeriod)

if shortCond
    strategy.entry("S", strategy.short, when=testPeriod)
    

strategy.exit("TP_L", "L", profit =((open_longCondition   *       (1+(tp/100))) - open_longCondition)/syminfo.mintick)

strategy.exit("TP_S", "S", profit =((open_shortCondition  *       (1+(tp/100))) - open_shortCondition)/syminfo.mintick)