Choppiness K-line Strategi Terobosan

Penulis:ChaoZhang, Tanggal: 2023-10-07 15:59:26
Tag:

Gambaran umum

Choppiness K-line Breakthrough Strategy adalah strategi perdagangan kuantitatif yang memanfaatkan pola K-line dan indikator momentum untuk menentukan entri dan keluar untuk perdagangan saham. Strategi ini menggabungkan beberapa indikator teknis untuk mengidentifikasi tren harga dan sinyal momentum, mengambil posisi di titik terobosan dan mengatur stop loss dan mengambil keuntungan untuk secara efektif mengendalikan risiko perdagangan.

Logika Strategi

Konsep inti dari Strategi Terobosan K-line Choppiness adalah:

  1. Menggunakan Indeks Saluran Komoditas (CCI) untuk menentukan apakah harga berada di zona overbought atau oversold.

  2. Mengidentifikasi pola garis K untuk mendeteksi sinyal terobosan. Garis K merah dengan penutupan lebih tinggi dari terbuka menunjukkan tren naik, sementara garis K hijau yang ditutup lebih rendah dari terbuka menunjukkan tren menurun.

  3. Menggabungkan volume perdagangan untuk hanya mempertimbangkan sinyal beli dan jual ketika volume meningkat.

  4. Mengambil posisi panjang ketika tren naik diidentifikasi dan CCI menunjukkan oversold. Mengambil posisi pendek ketika tren menurun diidentifikasi dan CCI menunjukkan overbought.

  5. Mengatur stop loss dan mengambil poin keuntungan untuk mengontrol risiko dan mengunci keuntungan.

Secara khusus, strategi ini menggunakan CCI untuk analisis overbought/oversold, pola K-line untuk arah tren, dan volume untuk momentum.

Analisis Keuntungan

Strategi Terobosan K-line Choppiness memiliki keuntungan berikut:

  1. Kombinasi beberapa indikator meningkatkan keandalan sinyal perdagangan. CCI mengidentifikasi zona perdagangan, K-line menentukan arah tren, dan volume mencerminkan momentum pasar.

  2. Menggunakan pola K-line membantu mengidentifikasi dengan akurat pembalikan tren.

  3. Stop loss and take profit secara efektif mengendalikan risiko dan kunci dalam keuntungan.

  4. Hanya mempertimbangkan sinyal pada volume meningkat menghindari sinyal palsu.

  5. Logika strategi jelas dan parameter fleksibel untuk optimasi di seluruh saham dan lingkungan pasar.

  6. Strategi dapat ditingkatkan lebih lanjut melalui lebih banyak faktor, pembelajaran mesin dll, meningkatkan stabilitas dan profitabilitas.

Analisis Risiko

Risiko potensial dari strategi ini meliputi:

  1. Parameter CCI dapat disetel untuk sensitivitas yang lebih tinggi.

  2. Penembusan palsu dalam pola garis K dapat menyebabkan kerugian yang tidak perlu. Lebih banyak indikator dapat ditambahkan untuk konfirmasi, atau persentase stop loss disesuaikan.

  3. Lonjakan volume juga dapat dimanipulasi, jadi penting untuk memperhatikan perbedaan volume-harga.

  4. Stop loss / take profit statis dapat keluar lebih awal atau melewatkan tren lebih lanjut.

  5. Parameter yang dipasang untuk satu stok mungkin tidak sesuai dengan yang lain.

  6. Hasil backtest mungkin tidak mewakili pertunjukan langsung.

Arahan Optimasi

Strategi ini dapat ditingkatkan melalui:

  1. Mengoptimalkan parameter CCI untuk generasi sinyal yang lebih cepat.

  2. Menambahkan lebih banyak indikator seperti MACD, Bollinger Bands untuk meningkatkan akurasi sinyal.

  3. Menggunakan model pembelajaran mesin yang dilatih pada data historis untuk memprediksi titik masuk/keluar.

  4. Menggunakan stop loss dinamis dan mengambil keuntungan berdasarkan volatilitas pasar.

  5. Memperbaiki logika lonjakan volume untuk mendeteksi divergensi volume-harga.

  6. Penyesuaian parameter untuk berbagai stok dan rezim pasar untuk meningkatkan stabilitas.

  7. Mengintegrasikan mekanisme tren untuk kinerja yang lebih baik di seluruh tahap pasar.

  8. Modularisasi strategi untuk fleksibilitas dan ekstensibilitas yang lebih besar.

Kesimpulan

Choppiness K-line Breakthrough Strategy adalah strategi perdagangan jangka pendek yang relatif lurus ke depan. Ini menggabungkan indikator teknis umum untuk logika yang jelas dan pengendalian risiko melalui stop loss dan take profit. Strategi dapat dioptimalkan secara fleksibel berdasarkan kebutuhan untuk menangkap pembalikan jangka pendek dan tren jangka menengah.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © vikris

//@version=4
strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01    

trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50)

oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25)

overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75)

// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
//Vol Confirmation
vol = volume > volume[1]

//Engulfing candle confirm
bullishEC = close > open[1] and close[1] < open[1]
bearishEC = close < open[1] and close[1] > open[1]

//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
upper = sum(volume * (change(src) <= 0 ? 0 : src), length)
lower = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(upper, lower) =>
    100.0 - (100.0 / (1.0 + upper / lower))
mf = _rsi(upper, lower)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)

//tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC)




//Final Long/Short Condition
longCondition =  redCandle and mf < oversold and ci <trendFactor and vol
shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Lebih banyak