Strategi Pelanggaran Momentum Berdasarkan Amplitude Dalaman Stop Loss

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

img

Ringkasan

Strategi ini mengenal pasti garis K yang meningkat secara tidak normal untuk menilai sama ada terdapat pasaran satu sisi dengan turun naik yang meletup. Apabila garis K yang meningkat secara tidak normal dikenal pasti, ia akan menetapkan pesanan had keuntungan berhampiran tinggi K-line itu, sementara juga menetapkan stop loss berhampiran rendah K-line sebelumnya, membentuk kedudukan panjang dengan kawalan risiko leverage yang tinggi. Strategi ini 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 terutamanya menilai pembentukan K-line yang meningkat secara tidak normal. Apabila K-line dengan dekat> terbuka dan tinggi rendah[1] muncul, ia percaya terdapat tempoh pasaran yang meningkat secara tidak normal. Isyarat masuk panjang akan dihasilkan, dengan harga masuk berhampiran harga tertinggi K-line semasa. Harga stop loss juga ditetapkan berhampiran harga terendah K-line sebelumnya untuk membentuk model kawalan risiko leverage yang tinggi. Kawalan risiko dicapai dengan terus memantau pecah harga garis stop loss.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa ia dapat menangkap turun naik jangka pendek di pasaran untuk mencapai perdagangan frekuensi yang sangat tinggi. Pada masa yang sama, dengan menetapkan julat stop loss yang lebih besar, leverage tinggi boleh digunakan untuk perdagangan terkawal risiko untuk mendapatkan pulangan yang lebih besar. Di samping itu, strategi ini merealisasikan pemantauan automatik garis stop loss. Apabila harga memecahkan garis stop loss ke bawah, ia dapat dengan cepat menghentikan kerugian untuk mengawal risiko perdagangan dengan berkesan.

Analisis Risiko

Risiko utama strategi ini adalah bahawa penghakiman lonjakan yang tidak normal tidak tepat, dan ia tidak dapat menangkap secara berkesan turun naik pasaran, yang mengakibatkan kemungkinan lebih tinggi salah menilai isyarat perdagangan. Di samping itu, penetapan kedudukan stop loss juga akan memberi kesan yang besar terhadap risiko dan pulangan perdagangan. Jika stop loss terlalu longgar, risiko kerugian perdagangan akan meningkat. Jika stop loss terlalu ketat, ia mungkin tidak dapat menjejaki keuntungan di pasaran dengan berkesan. Sebilangan besar pengujian belakang diperlukan untuk mengoptimumkan kedudukan stop loss.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Kriteria untuk menilai lonjakan yang tidak normal boleh memperkenalkan lebih banyak penunjuk atau model pembelajaran mendalam untuk membantu penilaian untuk meningkatkan ketepatan penilaian isyarat perdagangan dalam strategi.

  2. Tetapan kedudukan stop loss boleh menjalani banyak analisis statistik dan pengoptimuman untuk mencari kedudukan stop loss yang lebih baik untuk mengimbangi risiko perdagangan dan tahap pulangan.

  3. Mekanisme kawalan risiko perdagangan yang lebih kerap boleh diperkenalkan, seperti penapisan jumlah urus niaga, pengesahan penembusan julat, dll., untuk mengelakkan kemungkinan terperangkap.

  4. Kriteria kemasukan strategi boleh disesuaikan dan tidak perlu terhad kepada garis K yang tidak normal.

Ringkasan

Strategi ini adalah strategi perdagangan frekuensi tinggi biasa, yang tergolong dalam strategi breakout jangka pendek. Ia menangkap turun naiknya pergerakan pasaran untuk mencapai perdagangan frekuensi ultra tinggi. Pada masa yang sama, ia menggunakan kawalan risiko stop loss dan mekanisme leverage tinggi untuk mengawal risiko. Strategi ini mempunyai ruang yang besar untuk pengoptimuman, dan boleh diselaraskan dan dioptimumkan dari pelbagai sudut. Matlamat utama adalah untuk mendapatkan pulangan yang lebih tinggi dari perdagangan frekuensi ultra tinggi sambil mengawal 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 lanjut