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

লেখক:চাওঝাং, তারিখঃ ২০২৪-০১-২২ ১৭ঃ২১ঃ১০
ট্যাগঃ

img

সারসংক্ষেপ

এটি ট্রেন্ড ট্র্যাকিং এর উপর ভিত্তি করে একটি ব্রেকআউট কৌশল। এটি যখন ব্রেকআউট ঘটে তখন শক্তি কিনে এবং প্রবণতা ট্র্যাক করার জন্য দুর্বলতা বিক্রি করে।

কৌশলগত যুক্তি

কৌশলটি মূলত প্রবেশ এবং প্রস্থান সংকেত নির্ধারণের জন্য দুটি সূচকের উপর নির্ভর করে - সর্বোচ্চ ((() ফাংশন যা একটি নির্দিষ্ট সময়ের মধ্যে সর্বোচ্চ মূল্য নির্ধারণ করে এবং সর্বনিম্ন ((() ফাংশন যা একটি নির্দিষ্ট সময়ের মধ্যে সর্বনিম্ন মূল্য নির্ধারণ করে।

যখন বন্ধের মূল্য একটি নির্দিষ্ট সময়ের মধ্যে সর্বোচ্চ মূল্যের উপরে থাকে (highPeriod প্যারামিটার), তখন এটিকে একটি ঊর্ধ্বমুখী প্রবণতা ব্রেকআউট বলে মনে করা হয়, তাই একটি দীর্ঘ সংকেত জারি করা হয়। যখন বন্ধের মূল্য একটি নির্দিষ্ট সময়ের মধ্যে সর্বনিম্ন মূল্যের নীচে থাকে (lowPeriod প্যারামিটার), তখন এটিকে একটি নিম্নমুখী প্রবণতা ব্রেকআউট বলে মনে করা হয়, তাই একটি সংক্ষিপ্ত সংকেত জারি করা হয়।

কৌশলটি একটি চলমান স্টপ লস এবং একটি স্থির স্টপ লসও সেট করে। চলমান স্টপ লসটি এটিআর সূচকের উপর ভিত্তি করে, একটি নির্দিষ্ট সময়ের জন্য একটি এটিআর মান দ্বারা গুণিত একটি ফ্যাক্টর (ট্রেইলিংএটিআরমাল্টিপ্লায়ার প্যারামিটার) হিসাবে চলমান স্টপ লসের স্তর হিসাবে গণনা করা হয়। স্থির স্টপ লসটি একইভাবে এটিআর সূচকের উপর ভিত্তি করে গণনা করা হয়।

লং বা শর্ট যাওয়ার পর, ফিক্সড স্টপ লস প্রথম বারের জন্য কার্যকর হয়; তারপর এটি প্রাথমিকভাবে চলমান স্টপ লসে স্যুইচ করে। এই সংমিশ্রণটি প্রবণতা ট্র্যাক করার সময় কিছু মুনাফা লক করে।

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

সংক্ষেপে, এটি একটি প্রচলিত ট্রেন্ড-ট্র্যাকিং ব্রেকআউট কৌশল। এটি যখন একটি ব্রেকআউট ঘটেছে বলে বিচার করে তখন এটি প্রবেশ করে, মুনাফায় লক করে এবং স্টপ লসের মাধ্যমে প্রবণতা ট্র্যাক করে এবং প্রবণতা বিপরীত হলে প্রস্থান করে।

সুবিধা বিশ্লেষণ

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

  1. সঠিক প্রবণতা বিচার. প্রবণতা বিপরীত হয় কিনা তা নির্ধারণের জন্য সর্বোচ্চ এবং সর্বনিম্ন মূল্য ব্যবহার করে, নির্ভুলতা খুব উচ্চ এবং মিথ্যা সংকেত অসম্ভব।

  2. যুক্তিসঙ্গত অবস্থান আকার এবং স্টপ লস। সর্বাধিক ক্ষতি শতাংশ সেটিং, অ্যাকাউন্ট ইক্যুইটি অ্যাসোসিয়েশন ইত্যাদি অবস্থান আকার যুক্তিসঙ্গত করে তোলে, ওভার-ট্রেডিং বা অকার্যকর ট্রেডিং এড়ানো। সমন্বিত স্টপ লস মুনাফা লক করে এবং প্রবণতা আন্দোলন ট্র্যাক করে।

  3. এটি সহজ এবং ব্যবহারিক, সহজেই বোঝা যায় এবং ব্যবহার করা যায়। এটি কেবলমাত্র মৌলিক সূচকগুলির উপর নির্ভর করে এবং যুক্তিটি সরল, সহজেই বোঝা যায়।

  4. ভাল প্রসারণযোগ্যতা। সূচক পরামিতি, অবস্থান আকারের নিয়ম ইত্যাদি সমস্ত ব্যবহারকারীদের প্রয়োজন অনুযায়ী সামঞ্জস্য করার জন্য ইনপুট বাক্স সরবরাহ করে।

সংক্ষেপে, এটি একটি খুব ব্যবহারিক ব্রেকআউট কৌশল. নিরাপদ এবং বিচারে নির্ভরযোগ্য, যখন নকশা ঝুঁকি নিয়ন্ত্রণ এবং ট্র্যাকিং বিবেচনা করে. মাঝারি থেকে দীর্ঘমেয়াদী হোল্ডিং জন্য খুব উপযুক্ত.

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

এই কৌশলটির প্রধান ঝুঁকিগুলি হলঃ

  1. প্রবণতা বিপরীত ঝুঁকি। ব্রেকআউট কৌশলগুলি প্রবণতা বিচারের উপর নির্ভর করে, যদি এটি ভুল হয় তবে বিশাল ক্ষতির মুখোমুখি হতে পারে।

  2. অনুপযুক্ত প্যারামিটার ঝুঁকি। যদি সর্বোচ্চ / সর্বনিম্ন মূল্য চক্রের প্যারামিটারগুলি ভুলভাবে বেছে নেওয়া হয় তবে প্রবণতা মিস করা যেতে পারে। অনুপযুক্ত অবস্থান সাইজিং প্যারামিটারগুলি অতিরিক্ত ক্ষতির দিকে পরিচালিত করতে পারে।

  3. খুব আক্রমণাত্মক স্টপ লস ঝুঁকি। যদি চলমান স্টপ লস দূরত্ব খুব ছোট হয়, বাজারের গোলমাল অবস্থানটি অকাল বন্ধ করতে পারে।

প্রধান সমাধানগুলি হলঃ

  1. প্রবণতা ফিল্টার যোগ করুন। যেমন মিথ্যা ব্রেকআউট পরীক্ষা করার জন্য অতিরিক্ত সূচক।

  2. স্থিতিশীলতার জন্য পরীক্ষার মাধ্যমে পরামিতি নির্বাচন অপ্টিমাইজ করুন।

  3. স্টপ লস দূরত্বকে যথাযথভাবে শিথিল করুন যাতে যুক্তিসঙ্গত রিট্র্যাকস সহ্য করতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

এই কৌশলটির মূল অপ্টিমাইজেশান দিকগুলি হলঃ

  1. প্রবণতা নির্ধারণের জন্য আরও সূচক যুক্ত করুন। সর্বোচ্চ / সর্বনিম্ন মূল্য ছাড়াও, প্রবণতা নির্ধারণকে আরও নির্ভুল করার জন্য চলমান গড়ের মতো সূচকগুলিও যুক্ত করা যেতে পারে।

  2. প্যারামিটার সেটিংস অপ্টিমাইজ করুন। সর্বোচ্চ / সর্বনিম্ন মূল্য চক্র, স্টপ লস গুণক ফ্যাক্টর ইত্যাদির মতো প্যারামিটারগুলির জন্য সর্বোত্তম সমন্বয় পরীক্ষা করুন এবং সন্ধান করুন

  3. বাজারের অবস্থার উপর ভিত্তি করে পজিশন সাইজিং অ্যালগরিদম সামঞ্জস্য করুন। উদাহরণস্বরূপ, অস্থিরতা (যেমন ভিআইএক্স) বৃদ্ধি পেলে পজিশনের আকার হ্রাস করুন।

  4. ভলিউম ফিল্টার যোগ করুন ভ্রান্ত ভ্রান্তি এড়ানোর জন্য।

  5. ট্রেডিং যন্ত্রপাতি নির্বাচন করার সময় স্প্রেড এবং কোলেশন বিবেচনা করুন। ছোট স্প্রেড ভ্যারিয়েন্স এবং কম কোলেশন সহ যন্ত্রপাতি নির্বাচন করা পোর্টফোলিও ঝুঁকি হ্রাস করতে পারে।

  6. স্টপ লস মেশিনটি অপ্টিমাইজ করুন। স্টপ লসকে কম আক্রমণাত্মক করার জন্য চলমান এবং স্থির স্টপ লসের বিভিন্ন রচনা পরীক্ষা করুন।

সিদ্ধান্ত

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

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

সামগ্রিকভাবে এটি একটি খুব ব্যবহারিক কৌশল। এর মৌলিক কাঠামো ইতিমধ্যে একটি পরিমাণ কৌশল জন্য সবচেয়ে গুরুত্বপূর্ণ উপাদান ধারণ করে। ক্রমাগত অপ্টিমাইজেশান এবং উন্নতি সঙ্গে, এটি স্পষ্টভাবে একটি স্থিতিশীল লাভজনক স্বয়ংক্রিয় কৌশল হয়ে উঠতে পারে। অধ্যয়ন এবং রেফারেন্সের জন্য মূল্যবান।


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle="Trend Surfers - Breakout", title="Trend Surfers - Premium Breakout",
     overlay=true)

// Risk for position and pyramid
maxriskval = input(2, "Max % risk", type = input.float,
     tooltip="Risk % over total equity / Position", group = "Risk Management")
pairnumber = input(title = "How many pairs",type = input.integer, defval= 1,
     tooltip="How many pairs are you trading with the strategy?", group = "Risk Management")

// Emtry Exit
highPeriod = input(title="Highest High Period", type=input.integer, defval=168
     , tooltip="Highest High of X bars - This will trigger a Long Entry when close is above. (Thin Green Line)"
     , group = "Entry Condition")
lowPeriod = input(title="Lowest Low Period", type=input.integer, defval=168,
     tooltip="Lowest low of X bars - This will trigger a Short Entry when close is under. (Thin Red Line)"
     , group = "Entry Condition")
// Stoploss
trailingAtrPeriod = input(title="Trailing ATR Pediod", type=input.integer, defval=10,
     tooltip="Average True Range for the Trailing Stop. (Thick Green Line) "
     , group = "Exit Condition")
trailingAtrMultiplier = input(title="Trailing ATR Multiplier", type=input.float, defval=8
     , group = "Exit Condition")
fixAtrPeriod = input(title="Fix ATR Pediod", type=input.integer, defval=10,
     tooltip="Average True Range for the Fix Stoloss. (Thick Yellow Line)"
     , group = "Exit Condition")
fixAtrMultiplier = input(title="Fix ATR Multiplier", type=input.float, defval=2
     , group = "Exit Condition")
// Pair info 
pair = syminfo.basecurrency + syminfo.currency

// High Low Variable
highestHigh = highest(high, highPeriod)[1]
lowestLow = lowest(low, lowPeriod)[1]
trailingAtr = atr(trailingAtrPeriod) * trailingAtrMultiplier

// Trade Condition
longCondition = crossover(close, highestHigh) 
shortCondition = crossunder(close, lowestLow)

// Risk Variable
fixAtr = atr(fixAtrPeriod) * fixAtrMultiplier
stopvaluelong = close[1] - fixAtr[1]
stopvalueshort = close[1] + fixAtr[1]

// Position size Long
maxpossize = strategy.equity / close 
positionsizelong = ( ( ( (maxriskval/100) * strategy.equity) / (close - stopvaluelong))) 
stopperclong = ((close - stopvaluelong) / close) * 100
leveragelong = max(1, ceil(positionsizelong / maxpossize)) * 2
posperclong =  (((positionsizelong * close) / strategy.equity) *100 / leveragelong) / pairnumber
realposlong = (((posperclong / 100) * strategy.equity) * leveragelong) / close

// Position size Short
positionsizeshort = ( ( ( (maxriskval/100) * strategy.equity) / (stopvalueshort - close))) 
stoppercshort = ((close - stopvalueshort) / close) * 100
leverageshort = max(1, ceil(positionsizeshort / maxpossize)) * 2
pospercshort =  (((positionsizeshort * close) / strategy.equity) *100 / leverageshort) / pairnumber
realposshort = (((pospercshort / 100) * strategy.equity) * leverageshort) / close

// Alert Message
entry_long_message = '\nGo Long for ' + pair + 'NOW!' +
                     '\nPosition Size % =' + tostring(posperclong) +
                     '\nLeverage' + tostring(leveragelong) +
                     '\nStoploss Price =' + tostring(stopvaluelong) +
                     '\nClose any Short position that are open for ' + pair + '!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'

entry_short_message ='\nGo Short for ' + pair + 'NOW!' +
                     '\nPosition Size % =' + tostring(pospercshort) +
                     '\nLeverage' + tostring(leverageshort) +
                     '\nStoploss Price =' + tostring(stopvalueshort) +
                     '\nClose any Long position that are open for ' + pair + '!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'

exit_short_message = '\nExit Short for ' + pair + 'NOW!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'

exit_long_message = '\nExit Long for ' + pair + 'NOW!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'
// Order
if longCondition 
    strategy.entry("Long", strategy.long, stop=highestHigh, comment="Long", qty=realposlong
     , alert_message = entry_long_message)
if shortCondition
    strategy.entry("Short", strategy.short, stop=lowestLow, comment="Short", qty=realposshort
     , alert_message = entry_short_message)

// Stoploss Trailing
longTrailing = close - trailingAtr
shortTrailing = close + trailingAtr

var longTrailingStop = 0.0
var shortTrailingStop = 999999.9

trailingStopLine = 0.0
trailingStopLine := na
fixedStopLine = 0.0
fixedStopLine := na
var inTrade = 0
if longCondition or shortCondition
    if 0 == inTrade
        if longCondition
            inTrade := 1
        else
            inTrade := -1
if 1 == inTrade and (shortCondition or low <= max(fixedStopLine[1], longTrailingStop))
    inTrade := 0
if -1 == inTrade and (longCondition or high >= min(fixedStopLine[1], shortTrailingStop))
    inTrade := 0

longTrailingStop := if (1 == inTrade)
    stopValue = longTrailing
    max(stopValue, longTrailingStop[1])
else
    0

shortTrailingStop := if (-1 == inTrade)
    stopValue = shortTrailing
    min(stopValue, shortTrailingStop[1])
else
    999999

// Fix Stoploss
firstPrice = 0.0
firstFixAtr = 0.0
firstPrice := na
firstFixAtr := na
if 0 != inTrade
    firstPrice := valuewhen(inTrade != inTrade[1] and 0 != inTrade, close, 0)
    firstFixAtr := valuewhen(inTrade != inTrade[1] and 0 != inTrade, fixAtr, 0)
    if 1 == inTrade
        fixedStopLine := firstPrice - firstFixAtr
        trailingStopLine := longTrailingStop
    else
        fixedStopLine := firstPrice + firstFixAtr
        trailingStopLine := shortTrailingStop

if (strategy.position_size > 0)
    strategy.exit(id="L Stop", stop=max(fixedStopLine, longTrailingStop)
     , alert_message = exit_long_message)

if (strategy.position_size < 0)
    strategy.exit(id="S Stop", stop=min(fixedStopLine, shortTrailingStop)
     , alert_message = exit_long_message)
    

// Plot
plot(highestHigh, color=color.green, linewidth=1, transp=0, title='Highest High')
plot(lowestLow, color=color.red, linewidth=1, transp=0, title='Lowest Low')
plot(trailingStopLine, color=color.lime, linewidth=2, transp=0, offset=1, title='Trailing Stop')
plot(fixedStopLine, color=color.orange, linewidth=2, transp=0, offset=1, title='Fixed Stop')

আরো