Strategi pemecahan momentum jangka pendek berdasarkan hentian keuntungan dalaman


Tarikh penciptaan: 2023-11-23 14:14:58 Akhirnya diubah suai: 2023-11-23 14:14:58
Salin: 0 Bilangan klik: 675
1
fokus pada
1617
Pengikut

Strategi pemecahan momentum jangka pendek berdasarkan hentian keuntungan dalaman

Gambaran keseluruhan

Strategi ini menilai apakah terdapat keadaan unilateral yang mendadak di pasaran semasa dengan mengenal pasti garis K yang meningkat secara tidak normal. Apabila garis K yang meningkat secara tidak normal dikenal pasti, ia akan menetapkan pesanan beli dan beli di dekat titik tinggi garis K ini, dan ia akan menetapkan pesanan hentikan di dekat titik rendah garis K sebelumnya.

Prinsip Strategi

Strategi ini terutama menilai pembentukan garis K yang tidak normal apabila terdapat close>open dan highlow[1] garis K, menganggap bahawa terdapat masa kenaikan harga yang tidak biasa dalam kitaran semasa. Pada masa ini akan menetapkan isyarat masuk tunggal yang panjang, harga masuk adalah harga tertinggi di sekitar garis K semasa. Pada masa yang sama, menetapkan harga hentian adalah harga terendah di sekitar garis K teratas, membentuk mod kawalan risiko yang tinggi.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah dapat menangkap keadaan luar biasa yang luar biasa, untuk melakukan perdagangan frekuensi yang sangat tinggi. Pada masa yang sama, dengan menetapkan marjin stop yang lebih besar, anda boleh melakukan perdagangan kawalan risiko dengan menggunakan leverage yang tinggi, untuk mendapatkan keuntungan yang lebih besar. Selain itu, strategi ini dapat memantau secara automatik garis stop, dapat menghentikan dengan cepat dan mengawal risiko perdagangan dengan berkesan apabila harga menembusi garis stop.

Analisis risiko

Risiko utama strategi ini adalah bahawa penilaian kenaikan harga yang tidak biasa tidak tepat, tidak dapat menangkap pergerakan yang tiba-tiba, menyebabkan kemungkinan besar kesalahan dalam keputusan isyarat perdagangan. Selain itu, tetapan posisi hentian juga mempunyai kesan yang besar terhadap risiko dan keuntungan perdagangan. Jika hentian terlalu longgar, risiko kerugian perdagangan akan meningkat, dan jika hentian terlalu sempit, mungkin tidak dapat mengesan keuntungan dengan berkesan.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Kriteria penilaian kenaikan yang luar biasa boleh memperkenalkan lebih banyak penunjuk atau penilaian pembantu model pembelajaran mendalam, meningkatkan ketepatan penilaian isyarat perdagangan strategi.

  2. Tetapan kedudukan hentian boleh melakukan banyak analisis statistik dan pengoptimuman untuk mencari kedudukan hentian yang lebih baik untuk menyeimbangkan risiko perdagangan dan tahap keuntungan.

  3. Lebih banyak mekanisme kawalan aliran perdagangan frekuensi tinggi boleh diperkenalkan, seperti penapisan jumlah transaksi, pengesahan penembusan selang, dan sebagainya, untuk mengelakkan kemungkinan terkurung.

  4. Kriteria kemasukan strategi boleh disesuaikan, tidak perlu terhad kepada garis K yang tidak normal, dan boleh digabungkan dengan lebih banyak petunjuk dan model untuk menentukan, membentuk mekanisme pengesahan berganda.

ringkaskan

Strategi ini secara keseluruhan adalah strategi perdagangan frekuensi tinggi yang tipikal, termasuk dalam kategori strategi terobosan garis pendek. Ia mencapai perdagangan frekuensi tinggi dengan menangkap turun naik yang luar biasa secara tiba-tiba dalam pasaran.

Kod sumber strategi
/*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 //