বলিঙ্গার ব্যান্ড ব্রেকআউট ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-09-12 16:23:12 অবশেষে সংশোধন করুন: 2023-09-12 16:23:12
অনুলিপি: 0 ক্লিকের সংখ্যা: 815
1
ফোকাস
1617
অনুসারী

এই কৌশলটি ব্রিন বন্ডের চ্যানেলের উপর মূল্য নির্ধারণের মাধ্যমে ট্রেড করা হয়। এই কৌশলটি চ্যানেল ব্রেকিংয়ের একটি শ্রেণীর কৌশল, যার উদ্দেশ্য হল মূল্য ব্রেকিং চ্যানেল তৈরির ট্রেন্ড ট্রেডিংয়ের সুযোগ ধরা।

নীতিমালাঃ

  1. বুলিন বেল্ট ট্রানজিট গণনা করা হয়, মধ্যম রেলটি n দিনের সরল চলমান গড়, এবং উপরের এবং নীচের রেলটি মধ্যম রেলের উপরে এবং নীচে বেশ কয়েক গুণ স্ট্যান্ডার্ড পার্থক্য।

  2. যখন দাম উপরে থেকে নীচে নেমে আসে তখন শর্ট পজিশনে প্রবেশ করুন। যখন দাম নীচে থেকে উপরে উঠে যায় তখন মাল্টি পজিশনে প্রবেশ করুন।

  3. ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লিনাকে বিপরীত দিকের রেললাইনের বাইরে সেট করুন।

  4. সর্বাধিক প্রত্যাহারের পরিস্থিতি অনুসারে চ্যানেলের ব্যান্ডউইথ সামঞ্জস্য করুন, প্যারামিটারগুলি অনুকূলিত করুন

  5. ট্রেডিং ভলিউম ফিল্টারিংয়ের সাথে যুক্ত, ভুয়া ব্রেকডাউন এড়াতে।

এই কৌশলটির সুবিধাঃ

  1. চ্যানেল ভেঙে ট্রেন্ডের পালা নির্ধারণ করা যায়।

  2. ব্রিনের প্যারামিটার অপ্টিমাইজেশান খুবই সহজ এবং ব্যবহারিক।

এই কৌশলের ঝুঁকিঃ

  1. বুলিন বন্ডের পিছনে সমস্যাটি আরও বেশি দেখা যায় এবং সম্ভবত সেরা প্রবেশের জায়গাটি মিস করে।

  2. বিপর্যয় ঘটতে পারে, এবং যুক্তিসঙ্গত ক্ষতি বন্ধ করতে হবে।

  3. “অনুসন্ধানের সময়, আপনি একটি সুযোগ হারাতে পারেন।

সংক্ষেপে, এই কৌশলটি বুলিন-ব্যান্ডের ব্রেকিংয়ের বিচার করে ট্রেড করা হয়, এটি একটি আদর্শ চ্যানেল ব্রেকিং কৌশল। আপেক্ষিক সহজ নিয়মগুলি প্যারামিটার অপ্টিমাইজেশনের পক্ষে সহায়ক, তবে দীর্ঘমেয়াদী স্থিতিশীল লাভের জন্য এখনও পিছিয়ে পড়া এবং স্টপ লস সেটিংয়ের বিষয়ে সতর্কতা অবলম্বন করা দরকার।

কৌশল সোর্স কোড
/*backtest
start: 2023-08-12 00:00:00
end: 2023-09-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy("ChannelBreakOutStrategyV2.1", commission_type = "percent", commission_value = 0.1, calc_on_order_fills = true, overlay=true)

length = input(title="Length",  minval=1, maxval=1000, defval=40)
maxR = input(title = "R",  minval = 1.0, maxval = 10, defval = 3, step = 0.1)
adoptR = input(title = "Auto Adjust R",  defval = false)
stepR = input(title = "Step in R",  minval = 0.01, maxval = 0.1, step = 0.01, defval = 0.02)
baseYear = input(title = "Base Year",  minval = 2000, maxval = 2016, defval = 2000)
volumeTh = input(title = "Volume Threadhold",  minval = 100.0, maxval = 200, defval = 120, step = 5)
hasLong = input(title = "Include Long",  defval = true)
hasShort = input(title = "Include Short",  defval = true)
usePositionSizing = input(title = "Enable Position Sizing",  defval = true)

getTrailStop(val, current) => 
    s = val > 1.6 ? 0.8 : val >= 1.4 ? 0.85 : val >= 1.3 ? 0.9 : 0.93
    s * current


upBound = highest(high, length)
downBound = lowest(low, length)
hasVol = (volume / sma(volume, length) * 100 >= volumeTh) ? 1 : 0

hasPos = strategy.position_size != 0 ? 1 : 0

trailstop = atr(length) * 3
ptvalue = syminfo.pointvalue
equity = strategy.openprofit > 0 ? strategy.equity - strategy.openprofit : strategy.equity
curR = adoptR == false ? maxR : n == 0 ? maxR : hasPos == 1 ? curR[1] : (rising(equity,1) > 0? curR[1] + stepR : falling(equity, 1) > 0 ? curR[1] <= 2.0 ? 2.0 : curR[1] - stepR : curR[1])
contracts = usePositionSizing == false ? 20 : floor(equity / 100 * curR / (trailstop * ptvalue))

realbuystop = close - trailstop
realsellstop = close + trailstop

isPFst = (hasPos[1] == 0 and hasPos == 1) ? 1 : 0
isPOn = (hasPos[1] + hasPos == 2) ? 1 : 0
largestR = hasPos == 0 or isPFst == 1 ? -1 : nz(largestR[1]) < close ? close : largestR[1]
pctRise =  largestR / strategy.position_avg_price

rbs = strategy.position_size <= 0 ? realbuystop : isPFst ? strategy.position_avg_price - trailstop : pctRise >= 1.3 ? getTrailStop(pctRise, largestR) : (isPOn and realbuystop > rbs[1] and close > close[1]) ? realbuystop : rbs[1]
rss = strategy.position_size >= 0 ? realsellstop : isPFst ? strategy.position_avg_price + trailstop : (isPOn and realsellstop < rss[1] and close < close[1]) ? realsellstop : rss[1]

isStart = na(rbs) or na(rss) ? 0 : 1
buyARun = close - open > 0 ? 0 : open - close
sellARun = open - close > 0 ? 0 : close - open

if (strategy.position_size > 0 and buyARun >= trailstop / 3 * 2 and pctRise < 1.3)
    strategy.close("buy")
    strategy.cancel("exit")
if (strategy.position_size < 0 and sellARun >= trailstop / 3 * 2)
    strategy.close("sell")
    strategy.cancel("exit")

strategy.cancel("buy")
strategy.cancel("sell")
conLong = hasLong == true and hasPos == 0 and year > baseYear and (isStart + hasVol) == 2
strategy.order("buy", strategy.long, qty = contracts, stop=upBound + syminfo.mintick * 5, comment="BUY", when = conLong)
if (rbs > high)
    strategy.close("buy")
strategy.exit("exit", "buy", stop = rbs, when = hasPos == 1 and isStart == 1)

conShort = hasShort == true and hasPos == 0 and year > baseYear and (isStart + hasVol) == 2
strategy.order("sell", strategy.short, qty = contracts, stop=downBound - syminfo.mintick * 5, comment="SELL", when = conShort)
if (rss < low)
    strategy.close("sell")
strategy.exit("exit", "sell", stop = rss, when = hasPos == 1 and isStart == 1)

plot(series = rbs, color=blue)
plot(series = realbuystop, color=green)
plot(series = rss, color=red)
plot(series = realsellstop, color=yellow)