Strategi Penjejakan Kotak Peratus Dinamik


Tarikh penciptaan: 2023-11-23 10:32:39 Akhirnya diubah suai: 2023-11-23 10:32:39
Salin: 1 Bilangan klik: 605
1
fokus pada
1617
Pengikut

Strategi Penjejakan Kotak Peratus Dinamik

Gambaran keseluruhan

Strategi ini menggunakan peratusan perubahan harga untuk menetapkan garis beli dan garis henti, untuk membina kedudukan berdasarkan harga yang melanggar garis beli dan berhenti di bawah garis henti. Ciri utamanya adalah mengambil risiko hanya satu unit, iaitu hanya apabila kedudukan sebelumnya mencapai sasaran keuntungan yang ditetapkan.

Prinsip Strategi

Strategi ini mula-mula menetapkan harga rujukan, dengan 10% dari harga ini sebagai satu julat harga, tepi atas sebagai garis beli, tepi bawah sebagai garis henti. Apabila harga menembusi garis beli, beli dengan jumlah tetap. Apabila harga jatuh ke bawah garis henti, hentikan kedudukan.

Satu lagi perkara penting dalam strategi ini adalah mengambil risiko hanya satu unit. Iaitu, hanya selepas kedudukan semasa telah mencapai matlamat keuntungan, kedudukan baru akan ditempatkan. Kedudukan baru juga akan ditetapkan dengan garis beli dan garis henti baru.

Analisis kelebihan

Strategi ini menggabungkan kelebihan pengesanan terhad dan pengurusan simpanan untuk mengawal risiko dengan berkesan dan menghasilkan keuntungan.

  1. Dengan menggunakan peratusan untuk menetapkan garis beli dan garis henti, trend dapat dikesan secara automatik
  2. Mengendalikan risiko kepada satu digit, mengurangkan kerugian
  3. Berbelanja hanya selepas mendapat keuntungan, dan mengelakkan kehilangan.
  4. Pindah ke garisan hentian selepas keuntungan, kunci keuntungan

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Jarak peratusan terlalu besar, garis beli dan garis henti terlalu jauh dari satu sama lain, risiko meningkat
  2. Peratusan terlalu kecil, garis beli dan garis henti terlalu dekat, ruang untuk keuntungan terhad
  3. Penetapan yang tidak betul boleh menyebabkan kerugian yang lebih awal
  4. Terlalu radikal, boleh menyebabkan kerugian besar

Risiko ini boleh dielakkan dengan penyesuaian parameter, seperti penyesuaian saiz peratusan, penyesuaian syarat penambahan kedudukan dan sebagainya.

Arah pengoptimuman

Strategi ini masih boleh dioptimumkan lagi:

  1. Anda boleh menggunakan indikator trend untuk menentukan arah trend dan kemudian anda boleh meletakkan saham.
  2. Anda boleh menambah model pembelajaran mesin untuk membuat baris masuk dan baris berhenti lebih pintar.
  3. Anda boleh menetapkan pelbagai syarat untuk mengurangkan risiko.
  4. Anda boleh menguji tempoh pegangan yang berbeza untuk mencari tempoh pegangan yang optimum.

ringkaskan

Ini adalah strategi untuk berdagang menggunakan peratusan. Ia mudah, praktikal, dan mengawal risiko dengan berkesan. Dengan penyesuaian parameter dan pengoptimuman model, strategi ini boleh menjadi sistem pengesanan trend yang boleh dipercayai dan menghasilkan pulangan tambahan yang stabil untuk pelabur.

Kod sumber strategi
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HermanBrummer 4 April 2021

strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true)

///     Designed for LONG only on Daily, 2D or 3D Charts
///     Uses fixed investment risk amount, meaning you're willing to lose that amount per trade
///     Limit buy to not overpay

RiskPerTrade            = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price")
TradeAboveMAFilterPer   = input(50, "The System won't trade if price is below this MA")

UpBoxSize               = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up
DnBoxSize               = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn


var FirstBar            = close > 0 ? close : na
var FirstTop            = FirstBar * UpBoxSize
var FirstBot            = FirstBar * DnBoxSize


var top                 = sma(FirstTop, 1)
var bot                 = sma(FirstBot, 1)

///     The Box Calcs
if  high[2] > top
    top                 := top * UpBoxSize
    bot                 := bot * UpBoxSize
if  low[1]  < bot
    top                 := top * DnBoxSize
    bot                 := bot * DnBoxSize

 
plot(bot,   "Bot",      #ff0000) // Green
plot(top,   "Top",      #00ff00) // Red

mid                     = ((top-bot)/2)+bot 
plot(mid,   "Mid", color.gray)

TradeAboveMAFilter      = sma(close, TradeAboveMAFilterPer)
plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles)

// col = high[1] < top and high >= top ? color.white : na
// bgcolor(col)


///     Shares
RiskRange                   = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB
Shares                      = RiskPerTrade / RiskRange 
//plot(close-RiskRange, "RiskRange", color.fuchsia)

Enter   =   high >= top
             and close[1] > TradeAboveMAFilter
             and strategy.opentrades[0] == strategy.opentrades[1]
             and strategy.opentrades[1] == strategy.opentrades[2] 
             and strategy.opentrades[2] == strategy.opentrades[3]
             and strategy.opentrades[3] == strategy.opentrades[4] 
             and strategy.opentrades[4] == strategy.opentrades[5]
             and strategy.opentrades[5] == strategy.opentrades[6]
             // won't enter if new positon was taken in the last 6 bars
             // need better code for this.

///     Buy & Sell
//  (new highs)    and  (Close above moving average filter) and (No new trades were taken receently)
if  Enter //(high >= top)  and  (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] 
    strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top)
    
//barcolor(strategy.position_size != 0 ? #00ff00 : color.gray)


// ///     If ONE Position THEN this Stop Because: 
// if  strategy.position_size == 1
//     strategy.exit("Ex", "En", stop=bot)
///     If it has more than one trad OPEN
if  strategy.position_size > 0
    strategy.exit("Ex", "En", stop=bot[2] )   // puts stop on old bot

//plot(strategy.position_avg_price, "Avg Price", color.yellow)