Strategi ini menggunakan perubahan harga peratusan untuk menetapkan garis kemasukan dan baris stop loss. Ia memasuki kedudukan apabila harga menembusi garis kemasukan dan keluar kedudukan apabila harga jatuh di bawah garis stop loss. Ciri utamanya adalah bahawa ia hanya mengambil satu unit risiko, yang bermaksud bahawa kedudukan baru hanya akan ditambah selepas kedudukan sebelumnya mencapai sasaran keuntungan yang telah ditetapkan.
Strategi ini mula-mula menetapkan harga penanda aras dan menggunakan 10% daripada harga itu sebagai julat harga - batas atas adalah garisan kemasukan dan batas bawah adalah garisan stop loss. Apabila harga menembusi garisan kemasukan, kuantiti tetap akan dibeli. Apabila harga jatuh di bawah garisan stop loss, kedudukan akan ditutup. Selepas membuat keuntungan, garis kemasukan dan stop loss akan diselaraskan dengan peratusan untuk memperluaskan julat keuntungan. Ini membolehkan strategi untuk mengesan trend berjalan.
Satu lagi titik utama strategi adalah bahawa ia hanya mengambil satu unit risiko. iaitu, kedudukan baru hanya akan ditambahkan selepas kedudukan semasa mencapai sasaran keuntungan. Posisi baru juga akan mengikuti garis kemasukan dan stop loss baru. Ini mengehadkan risiko.
Strategi ini menggabungkan kelebihan hentian dan saiz kedudukan, yang membolehkan kawalan risiko yang berkesan sambil menguntungkan.
Terdapat juga beberapa risiko:
Risiko ini boleh dielakkan dengan menyesuaikan parameter seperti saiz julat, penapis masuk dan lain-lain.
Terdapat ruang untuk pengoptimuman lanjut:
Ini adalah sistem berasaskan julat peratusan yang mudah dan praktikal. Melalui penyesuaian parameter dan pengoptimuman model, strategi ini boleh menjadi alat penjejakan trend yang boleh dipercayai, menghasilkan prestasi yang lebih stabil untuk pelabur.
/*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)