বলিঙ্গার ব্যান্ড সীমাবদ্ধ বাজার তৈরির কৌশল


সৃষ্টির তারিখ: 2024-01-24 11:05:56 অবশেষে সংশোধন করুন: 2024-01-24 11:05:56
অনুলিপি: 0 ক্লিকের সংখ্যা: 949
1
ফোকাস
1617
অনুসারী

বলিঙ্গার ব্যান্ড সীমাবদ্ধ বাজার তৈরির কৌশল

ওভারভিউ

এই কৌশলটি একটি মার্কেটিং কৌশল যা ব্রিনের রেঞ্জকে এন্ট্রি হিসাবে ব্যবহার করে, চলমান গড়কে বন্ধ হিসাবে ব্যবহার করে এবং সহজ স্টপ লস শতাংশকে স্টপ লস হিসাবে ব্যবহার করে। এটি জুন ২০২২ সালে xtbtusd চুক্তিতে অত্যন্ত উচ্চ মুনাফা অর্জন করেছে।

কৌশল নীতি

এই কৌশলটি বুলিন-রেডের উপরের এবং নীচের রেলগুলিকে একটি সুযোগের অঞ্চল হিসাবে ব্যবহার করে। বিশেষত, যখন দামগুলি নীচের রেলের নীচে থাকে, তখন একাধিক স্টোর খোলা হয়; যখন দামগুলি উপরের রেলের উপরে থাকে, তখন একটি খালি স্টোর খোলা হয়।

উপরন্তু, এই কৌশলটি চলমান গড়কে প্লেইন পজিশনের জন্য একটি বেঞ্চমার্ক হিসাবে ব্যবহার করে। যখন একাধিক অর্ডার থাকে, তখন যদি দামটি চলমান গড়ের চেয়ে বেশি হয় তবে প্লেইন পজিশনটি বেছে নেওয়া হবে; একইভাবে, যখন খালি কার্ড থাকে, তখন যদি দামটি চলমান গড়ের চেয়ে কম হয় তবে প্লেইন পজিশনটি বেছে নেওয়া হবে।

স্টপ-এর জন্য, এই কৌশলটি প্রবেশের মূল্যের একটি নির্দিষ্ট শতাংশ দ্বারা এই সহজ রোলিং স্টপ পদ্ধতি ব্যবহার করে। এটি একতরফা পরিস্থিতিতে বিশাল ক্ষতি এড়াতে কার্যকর।

সামর্থ্য বিশ্লেষণ

এই কৌশলটির প্রধান সুবিধাগুলো হলঃ

  1. ব্রিন ব্যান্ডের ব্যবহার মূল্যের অস্থিরতাকে কার্যকরভাবে ক্যাপচার করতে পারে, যখন অস্থিরতা বাড়বে তখন আরও বেশি ব্যবসায়ের সুযোগ পাবে।
  2. মার্কেট মার্কেটিং এর মাধ্যমে আপনি দুই দিকের লেনদেনের মাধ্যমে ক্রেতার এবং বিক্রেতার কাছ থেকে কমিশন আয় পেতে পারেন।
  3. শতকরা ক্ষতির হার ব্যবহার করে, আপনি ঝুঁকি নিয়ন্ত্রণ করতে পারেন এবং একতরফা ব্যবস্থার অধীনে বিশাল ক্ষতি এড়াতে পারেন।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. ব্রিন বেল্ট সর্বদা একটি নির্ভরযোগ্য প্রবেশের সূচক নয়, কখনও কখনও এটি ভুল সংকেত দেয়।
  2. মার্কেটপ্লেস ব্যবসায়ের কৌশলগুলি ঝড়ের মধ্যে আটকে যেতে পারে।
  3. কিন্তু, এই ক্ষেত্রে, আপনি যদি একটি নির্দিষ্ট পরিমাণে অর্থ ব্যয় করেন, তবে আপনি একটি নির্দিষ্ট পরিমাণে অর্থ ব্যয় করতে পারেন।

এই ঝুঁকি কমানোর জন্য, আমরা অন্যান্য সূচকগুলির সাথে মিলিতভাবে ফিল্টারিং, অপ্টিমাইজড স্টপ লস কৌশল সেটআপ, বা যথাযথভাবে অবস্থান আকারের সীমাবদ্ধতা বিবেচনা করতে পারি।

অপ্টিমাইজেশান দিক

এই কৌশলটি আরও উন্নত করার সুযোগ রয়েছেঃ

  1. আপনি বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করতে পারেন এবং সর্বোত্তম প্যারামিটার খুঁজে পেতে পারেন।
  2. মাল্টি ফ্যাক্টর ভ্যালিডেট করার জন্য আরও ফিল্টারিং সূচক যুক্ত করা যেতে পারে।
  3. মেশিন লার্নিং পদ্ধতি ব্যবহার করে প্যারামিটারগুলিকে স্বয়ংক্রিয়ভাবে অপ্টিমাইজ করা যায়।
  4. প্যারালাইন স্টপিংয়ের মতো আরো সূক্ষ্ম ক্ষতির পদ্ধতি ব্যবহার করা যেতে পারে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle="BBL", title="BB limit", overlay = true)


length = input(200, minval=1)
src = input(hlc3, title="Source")
xmult = input(44, minval=0.001, maxval=5000, title = "bb mult (0.1%)")
s = input(title="Trend source", defval = "sma", options = ["ema", "sma", "rma", "wma"])
basis = s == "ema" ? ema(src, length) : s == "sma" ? sma(src, length) : s =="rma" ? rma(src, length) : wma(src, length)
sd = input(title="Dev source", defval = "stdev", options = ["stdev", "dev"])
mult = xmult / 10  
dev = sd == "stdev" ? mult * stdev(src, length) : mult * dev(src, length)
diff = input(0.5, title = "Spread")
LongPrice(p) =>
    LongPrice = diff == 0 ? p : floor(p / diff) * diff

ShortPrice(p) =>
    ShortPrice = diff == 0 ? p : ceil(p / diff) * diff

pyr = input(1, title = "Pyramiding")
useStopLoss = input(true)
stoploss_xmult = input(15, minval=0.001, maxval=5000, title = "StopLoss 0.1%")
stopLoss_mult = sd == "simple" ? 1 + stoploss_xmult / 10 / 100 : stoploss_xmult / 10  
dev2 = sd == "stdev" ? stopLoss_mult * stdev(src, length) : sd == "dev" ? stopLoss_mult * dev(src, length) : (stopLoss_mult - 1) * basis
upper = basis + (1*dev)
lower = basis - (1*dev)
plot(basis, color=fuchsia, linewidth=2)
plot(upper, color=green, linewidth=2)
plot(lower, color=green, linewidth=2)


strategy.cancel_all()

if strategy.position_size > 0 and close <= basis + diff * 2
    strategy.order("Close long", strategy.short, strategy.position_size, limit = ShortPrice(basis))
else 
    if strategy.position_size < 0 and close >= basis - diff * 2
        strategy.order("Close short", strategy.long, -strategy.position_size, limit = LongPrice(basis))
            
stopLossPrice1 = na
stopLossPrice2 = na
add = na
openOrderCondition = close > lower - 2 * diff and (strategy.opentrades < pyr or (strategy.position_size < 0 and strategy.position_avg_price > lower * (1 + stopLoss_mult / 100)))
if openOrderCondition
    add := strategy.position_size > 0 ? -strategy.position_size : close >= basis - diff * 2 ? 0 : -strategy.position_size
    strategy.order("Open long", strategy.long, strategy.equity / pyr / lower + add, limit = LongPrice(lower))
if useStopLoss and (strategy.position_size > 0 or openOrderCondition)
    add = openOrderCondition ? strategy.equity / pyr / lower : 0
    posPrice = strategy.position_size <= 0 ? lower : strategy.position_avg_price
    posSize = strategy.position_size <= 0 ? 0 : strategy.position_size
    stopLossPrice1 := posPrice * (1 - stopLoss_mult / 100)
    strategy.order("StopLoss open short ", strategy.short, posSize + add + strategy.equity / pyr / stopLossPrice1, stop = ShortPrice(stopLossPrice1))


openOrderCondition := close < upper + 2 * diff and (strategy.opentrades < pyr or (strategy.position_size > 0 and strategy.position_avg_price * (1 + stopLoss_mult / 100) < upper))
if openOrderCondition
    add := strategy.position_size < 0 ? strategy.position_size : close <= basis + diff * 2 ? 0 : strategy.position_size
    strategy.order("Open short", strategy.short, strategy.equity / pyr / upper + add, limit = ShortPrice(upper))
if useStopLoss and (strategy.position_size < 0 or openOrderCondition)
    add = openOrderCondition ? strategy.equity / pyr / upper : 0
    posPrice = strategy.position_size >= 0 ? upper : strategy.position_avg_price
    posSize = strategy.position_size >= 0 ? 0 : -strategy.position_size
    stopLossPrice2 := posPrice * (1 + stopLoss_mult / 100)
    strategy.order("StopLoss open long", strategy.long, posSize + add + strategy.equity / pyr / stopLossPrice2, stop = LongPrice(stopLossPrice2))

plot(not useStopLoss ? na : stopLossPrice1, color=red, linewidth=2)
plot(not useStopLoss ? na : stopLossPrice2, color=red, linewidth=2)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()