
এটি একটি ট্রেন্ড ট্র্যাকিং-ভিত্তিক ব্রেকডাউন কৌশল। এটি একটি ব্রেকডাউনের সময় শক্তিশালী ইনপুট স্টক কিনে এবং একটি ব্রেকডাউনের সময় দুর্বল ইনপুট স্টক বিক্রি করে।
এই কৌশলটি মূলত দুটি সূচকের উপর ভিত্তি করে প্রবেশ এবং প্রস্থান সংকেত নির্ধারণ করে, একটি সর্বোচ্চ () ফাংশন দ্বারা নির্ধারিত একটি নির্দিষ্ট সময়ের মধ্যে সর্বোচ্চ মূল্য এবং একটি সর্বনিম্ন () ফাংশন দ্বারা নির্ধারিত একটি নির্দিষ্ট সময়ের মধ্যে সর্বনিম্ন মূল্য।
যখন বন্ধের দাম পূর্ববর্তী নির্দিষ্ট সময়কালের সর্বোচ্চ মূল্যের চেয়ে বেশি হয়, তখন এটি একটি উত্থান প্রবণতা ভাঙার হিসাবে বিবেচিত হয়, তাই একটি একাধিক সংকেত দেওয়া হয়। যখন বন্ধের দাম পূর্ববর্তী নির্দিষ্ট সময়কালের সর্বনিম্ন মূল্যের চেয়ে কম হয়, তখন এটি একটি পতনের প্রবণতা ভাঙার হিসাবে বিবেচিত হয়, তাই একটি খালি সংকেত দেওয়া হয়।
এই কৌশলটি একই সাথে একটি মোবাইল স্টপ এবং একটি ফিক্সড স্টপ সেট করে। এটির উপর ভিত্তি করে মোবাইল স্টপ একটি নির্দিষ্ট সময়ের মধ্যে এটির মান গণনা করে এবং একটি গুণিতক দ্বারা একটি মোবাইল স্টপ হিসাবে গণনা করা হয়। এটির উপর ভিত্তি করে ফিক্সড স্টপও একইভাবে গণনা করা হয়।
ফিক্সড স্টপ লিন্ডটি প্রথম K-লাইনটি অতিরিক্ত কমানোর পরে কার্যকর হয়; তারপরে এটি একটি চলমান স্টপ-ভিত্তিক রূপান্তরিত হয়। এই সমন্বয়টি প্রবণতা অনুসরণ করার সময় আংশিক মুনাফা লক করতে পারে।
এই কৌশলটি পজিশন গণনা করার নিয়মও নির্ধারণ করে। সর্বাধিক ক্ষয়ক্ষতির শতাংশের উপর ভিত্তি করে পজিশন গণনা করা হয়, অ্যাকাউন্টের অধিকার এবং সুবিধাগুলি। এবং ট্রেডিং জাতের সংখ্যা বিবেচনা করে, একক জাতের পজিশন যথাযথভাবে হ্রাস করা হয়।
সামগ্রিকভাবে, এটি একটি সাধারণ প্রবণতা-অনুসরণকারী কৌশল যা একটি ব্রেকআউট হওয়ার সময় মাঠে প্রবেশ করে, স্টপ-ড্রপ পদ্ধতির মাধ্যমে মুনাফা লক করে এবং প্রবণতা অনুসরণ করে, যখন প্রবণতা বিপরীত হয় তখন মাঠ থেকে বেরিয়ে যায়।
এটি একটি যুগান্তকারী কৌশল, যার প্রধান সুবিধা হলঃ
প্রবণতা নির্ণয় সঠিক। সর্বোচ্চ মূল্য এবং সর্বনিম্ন মূল্যের সাথে প্রবণতা বিপরীত কিনা তা নির্ধারণের জন্য উচ্চ নির্ভুলতা, ভুল সংকেত প্রেরণ করা সহজ নয়।
পজিশন এবং স্টপ লস বিজ্ঞান যুক্তিসঙ্গত। সর্বাধিক ক্ষতির অনুপাত সেট করা, অ্যাকাউন্টের অধিকার এবং স্বার্থের সম্পর্ক ইত্যাদি পজিশনকে যুক্তিসঙ্গত করে তোলে, অতিরিক্ত পরিমাণে বা অকার্যকর লেনদেন এড়াতে। সংমিশ্রিত স্টপ লস পদ্ধতি মুনাফা লক করে এবং প্রবণতা অনুসরণ করে।
সহজ ব্যবহারিক, সহজেই বোঝা যায়। শুধুমাত্র মৌলিক সূচক প্রয়োজন, কৌশলগত যুক্তি সহজ এবং স্পষ্ট, সহজেই আয়ত্ত করা যায়।
স্কেলযোগ্যতা ভাল। সূচক প্যারামিটার, পজিশনের নিয়ম ইত্যাদি ইনপুট বাক্স সরবরাহ করে, যা ব্যবহারকারীরা প্রয়োজন অনুসারে সামঞ্জস্য করতে পারেন।
সামগ্রিকভাবে, এটি একটি কার্যকরী এবং শক্তিশালী বিরোধী কৌশল। সিদ্ধান্তে নিরাপদ এবং নির্ভরযোগ্য, এবং কৌশলটি ঝুঁকি নিয়ন্ত্রণ এবং ট্র্যাকিংয়ের জন্য ডিজাইন করা হয়েছে। এটি মাঝারি এবং দীর্ঘ লাইনের জন্য উপযুক্ত।
এই কৌশলটির প্রধান ঝুঁকিগুলো হলঃ
প্রবণতা বিপরীত ঝুঁকি ব্রেকিং কৌশল প্রবণতা বিচার উপর খুব নির্ভরশীল, যদি ভুল বিচার, বিশাল ক্ষতির সম্মুখীন হতে পারে
ভুল প্যারামিটার ঝুঁকি। সর্বোচ্চ মূল্য সর্বনিম্ন মূল্য চক্রের প্যারামিটারটি ভুলভাবে চয়ন করা ট্রেন্ডটি মিস করতে পারে, এবং পজিশন প্যারামিটারটি ভুলভাবে সেট করা খুব বেশি ক্ষতি করতে পারে।
স্টপ লস খুব বেশি ঝুঁকিপূর্ণ। যদি মোবাইল স্টপ লস খুব ছোট হয় তবে বাজারের শব্দটি খেলার বাইরে চলে যেতে পারে।
এই সমস্যা সমাধানের প্রধান উপায়গুলো হলঃ
প্রবণতা ফিল্টার যোগ করুন। উদাহরণস্বরূপ, অন্য সূচক বিচার যোগ করুন, ভুল ব্রেকডাউন এড়াতে।
অপ্টিমাইজ প্যারামিটার নির্বাচন করুন। প্যারামিটারগুলির জন্য পরীক্ষা করুন এবং স্থিতিশীলতা নিশ্চিত করুন।
স্ট্যাম্পিং দূরত্ব যথাযথভাবে শিথিল করা যেতে পারে। স্ট্যাম্পিং দূরত্বটি অবশ্যই একটি রিডাউন সহ্য করতে পারে।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
ট্রেন্ডের বিচার করার জন্য আরও সূচক যুক্ত করুন। সর্বোচ্চ সর্বনিম্ন মূল্য ছাড়াও, চলমান গড়ের মতো বিচারগুলি যুক্ত করা যেতে পারে, যা ট্রেন্ডের বিচার আরও সঠিক করে তোলে।
প্যারামিটার সেটিং অপ্টিমাইজ করুন। সর্বোচ্চ সর্বনিম্ন মূল্য চক্রের প্যারামিটার, স্টপ লস গুণক প্যারামিটার ইত্যাদি পরীক্ষা করুন এবং সর্বোত্তম প্যারামিটার সমন্বয় চয়ন করুন।
মার্কেট অ্যাডজাস্ট পজিশন অ্যালগরিদম অনুযায়ী। পজিশনকে মার্কেটের অস্থিরতার সাথে সংযুক্ত করতে পারে, যেমন ভিআইএক্স যখন বেড়ে যায় তখন পজিশন কমিয়ে দেয়।
ক্রমবর্ধমান ক্ষমতা নির্দেশক ফিল্টারিং। শুধুমাত্র ক্রমবর্ধমান ক্ষমতা ব্রেকআউটে প্রবেশ করুন, মিথ্যা ব্রেকআউট এড়াতে।
বেস রেঞ্জ এবং প্রাসঙ্গিকতা পছন্দসই ট্রেডিং জাত বিবেচনা করুন। বেস রেঞ্জের সামান্য ওঠানামা এবং কম প্রাসঙ্গিকতার সাথে জাতের সংমিশ্রণটি বেছে নিন, যা প্যাকেজ ঝুঁকি হ্রাস করতে পারে।
অপ্টিমাইজেশন এবং স্টপ মেশিনের সমন্বয়। মোবাইল স্টপ এবং ফিক্সড স্টপের অনুপাতের সমন্বয় পরীক্ষা করা যেতে পারে, যাতে স্টপিংয়ের ঝুঁকি কমিয়ে আনা যায়।
এই কৌশলটি একটি প্রবণতা-অনুসরণকারী কৌশল হিসাবে একটি ব্রেকথ্রু কৌশল হিসাবে কাজ করে, যা সঠিকতা, অবস্থান এবং ঝুঁকি নিয়ন্ত্রণ, এবং সহজ অপারেশন হিসাবে ভাল কাজ করে। এটি প্রবণতার প্রথম দিকে ধরা পড়ে এবং মুনাফা লকিং এবং প্রবণতা-অনুসরণকে ভারসাম্য দেয়।
অবশ্যই, একটি ব্রেকিং কৌশল হিসাবে, এটি প্রবণতা বিচার উপর খুব উচ্চ নির্ভরশীলতা এবং শব্দ দ্বারা বিরক্ত করা সহজ। এছাড়াও, প্যারামিটার সেটিং অনুপযুক্ত কৌশল কর্মক্ষমতা প্রভাবিত করতে পারে। এটি আরও অপ্টিমাইজেশান দ্বারা সমাধান করা প্রয়োজন।
সামগ্রিকভাবে, এটি একটি খুব কার্যকর কৌশল, যার প্রাথমিক কাঠামোটি ইতিমধ্যে একটি পরিমাণগত কৌশলটির জন্য প্রয়োজনীয় সবচেয়ে গুরুত্বপূর্ণ উপাদানগুলি ধারণ করে। যদি এটি ক্রমাগত অনুকূলিতকরণ এবং উন্নতি করা যায় তবে এটি একটি স্থিতিশীল লাভজনক প্রোগ্রামিং কৌশল হতে পারে।
/*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')