রিসোর্স লোড হচ্ছে... লোডিং...

এসআর ব্রেকআউট কৌশল

লেখক:চাওঝাং, তারিখঃ 2024-05-15 16:30:14
ট্যাগঃ

img

সারসংক্ষেপ

এসআর ব্রেকআউট কৌশলটি লোনসোমথাব্লু এর ব্রেকআউট ফাইন্ডার সূচকের উপর ভিত্তি করে তৈরি একটি সমর্থন এবং প্রতিরোধের ব্রেকআউট কৌশল। এই কৌশলটির মূল ধারণা হ'ল বন্ধের দাম সমর্থন বা প্রতিরোধের স্তরটি ভেঙেছে কিনা তা বিচার করে দীর্ঘ বা সংক্ষিপ্ত সংকেত উত্পন্ন করা। ডিফল্ট সেটিংস 8 ঘন্টা মোমবাতি চার্ট উপর ভিত্তি করে, তবে 4 ঘন্টা মোমবাতি চার্টে আরও অনুকূল পরামিতি সেটিংস রয়েছে। এই কৌশলটি সমর্থন এবং প্রতিরোধের স্তরগুলি নির্ধারণ করতে পিভটহাই এবং পিভটলো ফাংশনগুলি ব্যবহার করে এবং ব্রেকআউটগুলি নির্ধারণ করতে সর্বোচ্চ এবং সর্বনিম্ন দাম ব্যবহার করে। একই সাথে, এই কৌশলটি স্টপ লস এবং লাভ গ্রহণও সেট করে।

কৌশল নীতি

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

কৌশলগত সুবিধা

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

কৌশলগত ঝুঁকি

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

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

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

সংক্ষিপ্তসার

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


/*backtest
start: 2024-05-07 00:00:00
end: 2024-05-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © LonesomeTheBlue © chanu_lev10k

//@version=5
strategy('SR Breakout Strategy', overlay=true, max_bars_back=500, max_lines_count=400)
prd = input.int(defval=5, title='Period', minval=2)
bo_len = input.int(defval=71, title='Max Breakout Length', minval=30, maxval=300)
cwidthu = input.float(defval=3., title='Threshold Rate %', minval=1., maxval=10) / 100
mintest = input.int(defval=2, title='Minimum Number of Tests', minval=1)
bocolorup = input.color(defval=color.blue, title='Breakout Colors', inline='bocol')
bocolordown = input.color(defval=color.red, title='', inline='bocol')
// lstyle = input.string(defval=line.style_solid, title='Line Style')
issl = input.bool(title='SL', inline='linesl1', group='Stop Loss / Take Profit:', defval=false)
slpercent = input.float(title=', %', inline='linesl1', group='Stop Loss / Take Profit:', defval=18.0, minval=0.0, step=0.1)
istp = input.bool(title='TP', inline='linetp1', group='Stop Loss / Take Profit:', defval=false)
tppercent = input.float(title=', %', inline='linetp1', group='Stop Loss / Take Profit:', defval=18.0, minval=0.0, step=0.1)

//width
lll = math.max(math.min(bar_index, 300), 1)
float h_ = ta.highest(lll)
float l_ = ta.lowest(lll)
float chwidth = (h_ - l_) * cwidthu

// check if PH/PL
ph = ta.pivothigh(prd, prd)
pl = ta.pivotlow(prd, prd)

//keep Pivot Points and their locations in the arrays
var phval = array.new_float(0)
var phloc = array.new_int(0)
var plval = array.new_float(0)
var plloc = array.new_int(0)

// keep PH/PL levels and locations
if bool(ph)
    array.unshift(phval, ph)
    array.unshift(phloc, bar_index - prd)
    if array.size(phval) > 1  // cleanup old ones
        for x = array.size(phloc) - 1 to 1 by 1
            if bar_index - array.get(phloc, x) > bo_len
                array.pop(phloc)
                array.pop(phval)

if bool(pl)
    array.unshift(plval, pl)
    array.unshift(plloc, bar_index - prd)
    if array.size(plval) > 1  // cleanup old ones
        for x = array.size(plloc) - 1 to 1 by 1
            if bar_index - array.get(plloc, x) > bo_len
                array.pop(plloc)
                array.pop(plval)

// check bullish cup
float bomax = na
int bostart = bar_index
num = 0
hgst = ta.highest(prd)[1]
if array.size(phval) >= mintest and close > open and close > hgst
    bomax := array.get(phval, 0)
    xx = 0
    for x = 0 to array.size(phval) - 1 by 1
        if array.get(phval, x) >= close
            break
        xx := x
        bomax := math.max(bomax, array.get(phval, x))
        bomax
    if xx >= mintest and open <= bomax
        for x = 0 to xx by 1
            if array.get(phval, x) <= bomax and array.get(phval, x) >= bomax - chwidth
                num += 1
                bostart := array.get(phloc, x)
                bostart
        if num < mintest or hgst >= bomax
            bomax := na
            bomax

// if not na(bomax) and num >= mintest
//     line.new(x1=bar_index, y1=bomax, x2=bostart, y2=bomax, color=bocolorup)
//     line.new(x1=bar_index, y1=bomax - chwidth, x2=bostart, y2=bomax - chwidth, color=bocolorup)
//     line.new(x1=bostart, y1=bomax - chwidth, x2=bostart, y2=bomax, color=bocolorup)
//     line.new(x1=bar_index, y1=bomax - chwidth, x2=bar_index, y2=bomax, color=bocolorup)

plotshape(not na(bomax) and num >= mintest, location=location.belowbar, style=shape.triangleup, color=bocolorup, size=size.small)
//alertcondition(not na(bomax) and num >= mintest, title='Breakout', message='Breakout')

// check bearish cup
float bomin = na
bostart := bar_index
num1 = 0
lwst = ta.lowest(prd)[1]
if array.size(plval) >= mintest and close < open and close < lwst
    bomin := array.get(plval, 0)
    xx = 0
    for x = 0 to array.size(plval) - 1 by 1
        if array.get(plval, x) <= close
            break
        xx := x
        bomin := math.min(bomin, array.get(plval, x))
        bomin
    if xx >= mintest and open >= bomin
        for x = 0 to xx by 1
            if array.get(plval, x) >= bomin and array.get(plval, x) <= bomin + chwidth
                num1 += 1
                bostart := array.get(plloc, x)
                bostart
        if num1 < mintest or lwst <= bomin
            bomin := na
            bomin

// if not na(bomin) and num1 >= mintest
//     line.new(x1=bar_index, y1=bomin, x2=bostart, y2=bomin, color=bocolordown)
//     line.new(x1=bar_index, y1=bomin + chwidth, x2=bostart, y2=bomin + chwidth, color=bocolordown)
//     line.new(x1=bostart, y1=bomin + chwidth, x2=bostart, y2=bomin, color=bocolordown)
//     line.new(x1=bar_index, y1=bomin + chwidth, x2=bar_index, y2=bomin, color=bocolordown)

plotshape(not na(bomin) and num1 >= mintest, location=location.abovebar, style=shape.triangledown, color=bocolordown, size=size.small)

//alertcondition(not na(bomin) and num1 >= mintest, title='Breakdown', message='Breakdown')
//alertcondition(not na(bomax) and num >= mintest or not na(bomin) and num1 >= mintest, title='Breakout or Breakdown', message='Breakout or Breakdown')

// Long Short conditions
longCondition = not na(bomax) and num >= mintest
if longCondition
    strategy.entry('Long', strategy.long)
shortCondition = not na(bomin) and num1 >= mintest
if shortCondition
    strategy.entry('Short', strategy.short)

// Entry price / Take Profit / Stop Loss
//entryprice = strategy.position_avg_price
entryprice = ta.valuewhen(condition=longCondition or shortCondition, source=close, occurrence=0)
pm = longCondition ? 1 : shortCondition ? -1 : 1 / math.sign(strategy.position_size)
takeprofit = entryprice * (1 + pm * tppercent * 0.01)
stoploss = entryprice * (1 - pm * slpercent * 0.01)
strategy.exit(id='Exit Long', from_entry='Long', stop=issl ? stoploss : na, limit=istp ? takeprofit : na, alert_message='Exit Long')
strategy.exit(id='Exit Short', from_entry='Short', stop=issl ? stoploss : na, limit=istp ? takeprofit : na, alert_message='Exit Short')

আরো