Heikin Ashi ROC Percentile Trading Strategy

Penulis:ChaoZhang, Tarikh: 2023-10-23 15:41:40
Tag:

img

Ringkasan

Strategi ini dipanggil Heikin Ashi ROC Percentile Trading Strategy. Ia bertujuan untuk menyediakan kerangka perdagangan yang mudah digunakan berdasarkan Heikin Ashi ROC dan percentilesnya.

Logika Strategi

Strategi ini mengira ROC harga penutupan Heikin Ashi dalam tempoh rocLength yang lalu. Kemudian ia mengira nilai rocLow tertinggi dan rocLow terendah ROC dalam tempoh 50 tempoh yang lalu. Upper rail upperKillLine dan lower rail lowerKillLine dihasilkan berdasarkan percentile tertentu rocHigh dan rocLow. Apabila ROC melintasi di atas lowerKillLine, kedudukan panjang dibuka. Apabila ROC melintasi di bawah upperKillLine, kedudukan panjang ditutup. Sebaliknya, apabila ROC melintasi di bawah upperKillLine, kedudukan pendek dibuka. Apabila ROC melintasi di atas lowerKillLine, kedudukan pendek ditutup.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah menggunakan keupayaan pengesanan trend yang kuat dari penunjuk ROC, digabungkan dengan ciri maklumat harga yang halus dari Heikin Ashi. Ini membolehkan strategi untuk mengenal pasti perubahan trend dengan berkesan dan memasuki perdagangan dengan tepat pada masanya. Berbanding dengan purata bergerak mudah, ROC bertindak balas dengan lebih sensitif terhadap perubahan harga. Di samping itu, rel atas dan bawah yang dihasilkan dari percentiles dapat menapis penyatuan dengan berkesan dan mengelakkan perdagangan yang tidak perlu dari pecah palsu. Secara keseluruhan, strategi ini menggabungkan kedua-dua trend berikut dan penapis osilasi untuk mencapai nisbah risiko-balasan yang baik dalam trend utama.

Analisis Risiko

Risiko utama strategi ini adalah bahawa tetapan parameter yang tidak betul boleh membawa kepada overtrading atau kepekaan yang tidak mencukupi. RocLength dan tempoh persepsi persepsi perlu ditetapkan dengan berhati-hati, jika tidak, rel mungkin menjadi terlalu kusam atau kaku, menyebabkan perdagangan yang terlepas atau kerugian yang tidak perlu. Di samping itu, tetapan persepsi perlu berulang kali diuji dan diselaraskan untuk pasaran yang berbeza untuk mencari kombinasi yang optimum. Strategi ini juga tertakluk kepada kerugian tertentu apabila trend berbalik, kerana bergantung pada penunjuk trend. Posisi harus ditutup tepat pada masanya, atau menghentikan kerugian yang ditetapkan untuk mengawal risiko.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut: 1) Tambah penapis dengan penunjuk lain seperti RSI; 2) Optimumkan parameter secara dinamik dengan pembelajaran mesin; 3) Tetapkan stop loss dan ambil keuntungan untuk pengurusan risiko automatik; 4) Gabungkan dengan strategi bukan trend untuk mengimbangi risiko.

Ringkasan

Ringkasnya, strategi ini menggunakan keupayaan pengesanan trend yang kuat dari penunjuk ROC, digabungkan dengan Heikin Ashi untuk pengenalan trend dan mengikuti. Rel atas dan bawah yang dihasilkan dari persentil ROC membolehkan penapisan kerugian yang berkesan. Ini mencapai prestasi pengesanan trend yang baik. Kelebihannya terletak pada pengenalan perubahan trend yang tepat pada masanya dan mengikuti trend utama, sambil menapis penyatuan dengan rel. Walau bagaimanapun, tetapan parameter yang tidak betul boleh memberi kesan kepada prestasi, dan risiko pembalikan trend tetap ada. Mengoptimumkan lagi pemilihan parameter dan berhenti dapat membantu mendapatkan hasil yang lebih konsisten.


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


Lebih lanjut