
Strategi ini diberi nama Heikin Ashi ROC Percentage Based Trading Strategy, yang bertujuan untuk menyediakan kerangka perdagangan yang mudah digunakan berdasarkan Heikin Ashi ROC dan persentase digitalnya.
Strategi ini menghasilkan track up and down yang digunakan untuk perdagangan dengan menghitung ROC dari harga penutupan Heikin Ashi dan nilai tertinggi dan terendahnya dalam berbagai periode waktu. Secara khusus, ia menghitung ROC dari harga penutupan Heikin Ashi pada periode rocLength yang lalu. Kemudian menghitung rocHigh dan rocLow dari ROC tertinggi dan terendah selama 50 periode.
Keuntungan terbesar dari strategi ini adalah memanfaatkan kemampuan pelacakan tren yang kuat dari indikator ROC, yang bekerja sama dengan Heikin Ashi untuk meluruskan informasi harga, yang dapat mengidentifikasi perubahan tren secara efektif. Dibandingkan dengan indikator seperti rata-rata bergerak sederhana, ROC memiliki respons yang lebih tajam terhadap perubahan harga, yang memungkinkan strategi untuk masuk lebih awal. Selain itu, dengan menggunakan tren naik turun yang dihasilkan oleh persentase, dapat secara efektif memfilter getaran dan menghindari terobosan palsu yang menyebabkan perdagangan yang tidak perlu.
Risiko utama dari strategi ini adalah bahwa pengaturan parameter yang tidak tepat dapat menyebabkan perdagangan yang sering atau tidak cukup sensitif. RocLength dan siklus perhitungan persentase perlu diatur dengan hati-hati, atau dapat menyebabkan naik turun terlalu lemah atau kaku, sehingga kehilangan peluang perdagangan atau menimbulkan kerugian yang tidak perlu. Selain itu, pengaturan persentase juga perlu disesuaikan dengan pengujian berulang di berbagai pasar untuk menemukan kombinasi parameter terbaik.
Strategi ini dapat dioptimalkan dalam beberapa cara: 1) dengan kombinasi indikator lain yang memfilter sinyal masuk seperti RSI dan lain-lain; 2) menggunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara dinamis; 3) dengan pengaturan mekanisme stop loss untuk keluar kasar dari stop loss otomatis; 4) dengan kombinasi dengan strategi non-trending lainnya untuk menyeimbangkan risiko strategi.
Singkatnya, strategi ini memanfaatkan kemampuan pelacakan tren yang kuat dari indikator ROC, bekerja dengan karakteristik Heikin Ashi untuk penilaian dan pelacakan tren, dan melakukan penyaringan stop-loss melalui tren atas dan bawah yang dibentuk oleh persentase ROC, sehingga realistis. menunjukkan efek pelacakan tren yang lebih baik. Kelebihannya adalah mengidentifikasi perubahan tren dan melacak tren besar pada waktu yang tepat, sambil menyaring guncangan melalui filter lintasan atas dan bawah. Namun, pengaturan parameter yang tidak tepat dapat mempengaruhi kinerja strategi, dan menghadapi risiko pembalikan tren. Dengan lebih mengoptimalkan pilihan parameter dan pengaturan stop loss, stop loss, strategi ini dapat memperoleh efek yang lebih stabil.
/*backtest
start: 2023-09-22 00:00:00
end: 2023-10-22 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/
// © jensenvilhelm
//@version=5
strategy("Heikin Ashi ROC Percentile Strategy", shorttitle="ROC ON" , overlay=false)
// User Inputs
zerohLine = input(0, title="Midline") // Zero line, baseline for ROC (customer can modify this to adjust midline)
rocLength = input(100, title="roc Length") // Lookback period for SMA and ROC (customer can modify this to adjust lookback period)
stopLossLevel = input(2, title="Stop Loss (%)") // Level at which the strategy stops the loss (customer can modify this to adjust stop loss level)
startDate = timestamp("2015 03 03") // Start date for the strategy (customer can modify this to adjust start date)
// Heikin Ashi values
var float haClose = na // Define Heikin Ashi close price
var float haOpen = na // Define Heikin Ashi open price
haClose := ohlc4 // Calculate Heikin Ashi close price as average of OHLC4 (no customer modification needed here)
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2 // Calculate Heikin Ashi open price (no customer modification needed here)
// ROC Calculation
roc = ta.roc(ta.sma(haClose, rocLength), rocLength) // Calculate Rate of Change (ROC) (customer can modify rocLength in the inputs)
rocHigh = ta.highest(roc, 50) // Get the highest ROC of the last 50 periods (customer can modify this to adjust lookback period)
rocLow = ta.lowest(roc, 50) // Get the lowest ROC of the last 50 periods (customer can modify this to adjust lookback period)
upperKillLine = ta.percentile_linear_interpolation(rocHigh, 10, 75) // Calculate upper kill line (customer can modify parameters to adjust this line)
lowerKillLine = ta.percentile_linear_interpolation(rocLow, 10, 25) // Calculate lower kill line (customer can modify parameters to adjust this line)
// Trade conditions
enterLong = ta.crossover(roc, lowerKillLine) // Define when to enter long positions (customer can modify conditions to adjust entry points)
exitLong = ta.crossunder(roc, upperKillLine) // Define when to exit long positions (customer can modify conditions to adjust exit points)
enterShort = ta.crossunder(roc, upperKillLine) // Define when to enter short positions (customer can modify conditions to adjust entry points)
exitShort = ta.crossover(roc, lowerKillLine ) // Define when to exit short positions (customer can modify conditions to adjust exit points)
// Strategy execution
if(time >= startDate) // Start strategy from specified start date
if (enterLong)
strategy.entry("Long", strategy.long) // Execute long trades
if (exitLong)
strategy.close("Long") // Close long trades
if (enterShort)
strategy.entry("Short", strategy.short) // Execute short trades
if (exitShort)
strategy.close("Short") // Close short trades
// Plotting
plot(zerohLine,title="Zeroline") // Plot zero line
plot(roc, "RSI", color=color.rgb(248, 248, 248)) // Plot ROC
plot(rocHigh, "Roc High", color = color.rgb(175, 78, 76)) // Plot highest ROC
plot(rocLow, "Roc Low", color = color.rgb(175, 78, 76)) // Plot lowest ROC
plot(upperKillLine, "Upper Kill Line", color = color.aqua) // Plot upper kill line
plot(lowerKillLine, "Lower Kill Line", color = color.aqua) // Plot lower kill line