Momentum Breakout Strategy Berdasarkan Amplitude Internal Stop Loss

Penulis:ChaoZhang, Tanggal: 2023-11-23 14:14:58
Tag:

img

Gambaran umum

Strategi ini mengidentifikasi garis K yang melonjak secara abnormal untuk menilai apakah ada pasar satu sisi dengan volatilitas yang meledak. Ketika garis K yang melonjak secara abnormal diidentifikasi, itu akan menetapkan pesanan batas keuntungan dekat titik tertinggi dari garis K itu, sementara juga menetapkan stop loss dekat titik rendah dari garis K sebelumnya, membentuk posisi panjang dengan kontrol risiko leverage yang tinggi. Strategi terus memantau garis stop loss, dan akan segera membatalkan pesanan untuk menghentikan kerugian jika harga melanggar di bawah garis stop loss.

Prinsip Strategi

Strategi ini terutama menilai pembentukan K-line yang melonjak secara abnormal. Ketika K-line dengan close>open dan highlow[1] muncul, ia percaya bahwa ada periode pasar yang melonjak secara abnormal. Sinyal masuk panjang akan dihasilkan, dengan harga masuk dekat dengan harga tertinggi dari K-line saat ini. Harga stop loss juga ditetapkan dekat dengan harga terendah dari K-line sebelumnya untuk membentuk model pengendalian risiko leverage tinggi. Pengendalian risiko dicapai dengan terus memantau price breakout dari stop loss line.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa ia dapat menangkap volatilitas bursting jangka pendek di pasar untuk mencapai perdagangan frekuensi ultra-tinggi. Pada saat yang sama, dengan menetapkan rentang stop loss yang lebih besar, leverage tinggi dapat digunakan untuk perdagangan yang dikendalikan risiko untuk mendapatkan pengembalian yang lebih besar. Selain itu, strategi ini mewujudkan pemantauan otomatis dari garis stop loss. Ketika harga menembus garis stop loss ke bawah, ia dapat dengan cepat menghentikan kerugian untuk secara efektif mengendalikan risiko perdagangan.

Analisis Risiko

Risiko utama dari strategi ini adalah bahwa penilaian lonjakan abnormal tidak akurat, dan tidak dapat secara efektif menangkap volatilitas pasar yang meledak, yang mengakibatkan kemungkinan kesalahan penilaian sinyal perdagangan yang lebih tinggi. Selain itu, pengaturan posisi stop loss juga akan berdampak besar pada risiko dan pengembalian perdagangan. Jika stop loss terlalu longgar, risiko kerugian perdagangan akan meningkat. Jika stop loss terlalu ketat, mungkin tidak dapat secara efektif melacak keuntungan di pasar. Sejumlah besar backtesting diperlukan untuk mengoptimalkan posisi stop loss.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Kriteria untuk menilai lonjakan abnormal dapat memperkenalkan lebih banyak indikator atau model pembelajaran mendalam untuk membantu penilaian untuk meningkatkan keakuratan penilaian sinyal perdagangan dalam strategi.

  2. Penentuan posisi stop loss dapat menjalani sejumlah besar analisis statistik dan optimalisasi untuk menemukan posisi stop loss yang lebih baik untuk menyeimbangkan risiko perdagangan dan tingkat pengembalian.

  3. Mekanisme pengendalian risiko perdagangan frekuensi tinggi yang lebih dapat diperkenalkan, seperti penyaringan volume transaksi, verifikasi penembusan kisaran, dll., untuk menghindari kemungkinan terjebak.

  4. Kriteria masuk strategi dapat disesuaikan dan tidak perlu terbatas pada garis K yang tidak normal. Lebih banyak indikator dan model dapat dikombinasikan untuk membuat penilaian dan membentuk mekanisme verifikasi ganda.

Ringkasan

Strategi ini adalah strategi perdagangan frekuensi tinggi yang khas, yang termasuk dalam strategi breakout jangka pendek. Strategi ini menangkap volatilitas ledakan dalam pergerakan pasar untuk mencapai perdagangan frekuensi ultra tinggi. Pada saat yang sama, strategi ini menggunakan kontrol risiko stop loss dan mekanisme leverage tinggi untuk mengendalikan risiko. Strategi ini memiliki ruang besar untuk optimasi, dan dapat disesuaikan dan dioptimalkan dari berbagai sudut. Tujuan utama adalah untuk mendapatkan pengembalian yang lebih tinggi dari perdagangan frekuensi ultra tinggi sambil mengendalikan risiko.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 08:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
// I needed to test/verify the functionality for canceling an open limit order in a strategy and also work thru the pieces needed to set the position sizing so each loss is a set amount. 
// This is not meant to be dropped into a chart but rather gives the code/logic in order to use in your own script w/alerts or strategy. Hope it helps. 
 
//@version=4
strategy("Strategy Test - Cancel Limit Order and Position Sizing", overlay=true, precision=4)
 
/////////////////
// Backtest Period Selection
 
testStartYear = input(2020, "Backtest Start Year",minval=1980)
testStartMonth = input(2, "Backtest Start Month",minval=1,maxval=12)
testStartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
 
testStopYear = input(2020, "Backtest Stop Year",minval=1980)
testStopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
 
testPeriod() => time >= true
 
//////////////
// Inside Bar
bull_inside_bar = close>open and high<high[1] and low>low[1]

// Set Levels
bull_inside_bar_sl = valuewhen(bull_inside_bar, low[1], 0) - (1*syminfo.mintick)
bull_breakout_price = valuewhen(bull_inside_bar, high, 0) + (1*syminfo.mintick)
entry_buy   = high
inside_bar_dist = entry_buy - bull_inside_bar_sl
inside_bar_be = entry_buy + (inside_bar_dist * 1)
inside_bar_tgt = entry_buy + (inside_bar_dist * 2)

///////////////////
// Position Sizing 
//////////////////
// For each trade setup that fires in this scenario we want to set our total loss amount in USD, so every trade that loses is lets say $1 and the 2:1 target would be $2 in this example. 
// The math logic for this take the risk amount and divide by the stop percentage, take that number and divide by leverage amount chosen. Stop percentage is a variable below if questions on that. 
//
// Taken from @JoshuaMorris (shout out to the UK peeps) position sizing google doc so thank you sir. 
// Would be used if risking based on percentage of a portfolio. Leaving code snippets here in case that's the direction someone wants to go. 
// xbt_price = security("BITMEX:XBTUSD", "D", close)
// account_size_xbt = input(1, "Account Size (XBT)", type=input.float)
// account_size_usd = (account_size_xbt * xbt_price)
// percentage_risk = input(0.01, "Personal Risk Percent - Default is 1%", type=input.float)
// personal_risk = (account_size_usd * percentage_risk)
// position_size_usd = (personal_risk) / risk_percent
// leverage_req = position_size_usd / account_size_usd

// Will want to hard code leverage as 1x, 5x, 10x etc and dont need it to automagically be set as is above. If you're doing 100x you are gnarly haha. 
leverage_amount = input(title="Leverage Amount Desired", type=input.integer, defval=10, options=[1, 2, 3, 5, 10, 25, 50, 100])
risk_amount = input(title="Risk Total Per Trade in USD", type=input.integer, defval=1, minval=1, step=1)

// Reminder this is for Longs. Math needs to be changed a bit for Shorts. This is the information using the long/short tool would give us if doing manually. 
stop_percent = inside_bar_dist / (entry_buy)
pos_size_no_lev = risk_amount / stop_percent
pos_size_with_lev = pos_size_no_lev / leverage_amount 

//////////////
// Strategy Section

if testPeriod()
    strategy.entry(id="Long", long=true, qty=1, limit=9320.00, when=bull_inside_bar)
    strategy.cancel(id="Long", when = low < 9310)
// as a test swap the price to be above the limit or below to see the cancel in play.
 
//////////////
// Plot Section
plotchar(bull_inside_bar, title="bull_inside_bar", char="🐂", location=location.belowbar, offset=-0, color=color.green, transp=25)
plot(bull_inside_bar_sl, title="bull_inside_bar_sl", transp=100)
plot(entry_buy, title="entry_buy", transp=100)
plot(inside_bar_dist, title="inside_bar_dist", transp=100)
plot(stop_percent, title="stop_percent", transp=100)
plot(pos_size_no_lev, title="pos_size_no_lev", transp=100)
plot(pos_size_with_lev, title="pos_size_with_lev", transp=100)

// Hidden Plots // For Data Window Eyes Only // 
// plot(longCondition==true?1:0, title="Long Condition", transp=100)
// plot(xbt_price, title="XBT Price", transp=100)
// plot(account_size_usd, title="Account Size USD", transp=100)
// plot(risk_percent, title="risk_percent", transp=100)
// plot(position_size_usd, title="position_size_usd", transp=100)
// plot(leverage_req, title="leverage_req", transp=100)

// END //

Lebih banyak