
এই কৌশলটি একটি ক্যালেন্ডার তারিখ-ভিত্তিক ক্রিপ্টোকারেন্সি ট্রেডিং পদ্ধতি যা ক্যালেন্ডার চক্রের নির্দিষ্ট তারিখ ব্যবহার করে ক্রয় এবং বিক্রয় কার্যক্রম পরিচালনা করে। এই কৌশলটি ক্যালেন্ডার নববর্ষ থেকে শুরু হয় এবং সেই বছরের ক্যালেন্ডার ডিসেম্বরের শেষ অবধি চলতে থাকে এবং সহজ নিয়ম অনুসরণ করেঃ প্রতিটি ক্যালেন্ডার মাসের 5 তম দিনে ক্রয় করুন এবং প্রতিটি ক্যালেন্ডার মাসের 26 তম দিনে বিক্রয় করুন। এই পদ্ধতিটি ক্যালেন্ডার চক্রের সাথে সম্পর্কিত সম্ভাব্য বাজার মডেলগুলি ক্যাপচার করার চেষ্টা করে, ব্যবসায়ীদের জন্য একটি কাঠামোগত এবং অনুসরণ করা সহজ ব্যবসায়ের কাঠামো সরবরাহ করে। এই কৌশলটি কমিশন এবং স্লাইড ফ্যাক্টর বিবেচনা করে এবং 100% উপলব্ধ মূলধন বিনিয়োগ ব্যবহার করে, 2020 থেকে 2026 সময়সীমার জন্য প্রযোজ্য।
এই কৌশলটির মূল নীতিটি ক্রিপ্টোকারেন্সি বাজারে সম্ভাব্য প্রভাবের উপর ভিত্তি করে। কোডটি নিম্নলিখিত উপায়ে এই ধারণাটি বাস্তবায়ন করেঃ
কৌশলটি সঠিক তারিখ গণনা পদ্ধতি ব্যবহার করে, প্রতিটি ক্যালেন্ডার মাসের দিনগুলি অ্যারে দ্বারা সঞ্চয় করে এবং ক্যালেন্ডার নববর্ষ থেকে শুরু হওয়া মোট দিনগুলিকে ক্রমাগত গণনা করে যাতে বর্তমান ক্যালেন্ডার তারিখটি সঠিকভাবে সনাক্ত করা যায়। এই পদ্ধতিটি ট্রেডিং সিগন্যালের সঠিক ট্রিগার নিশ্চিত করে।
এই কৌশলটির কোড বিশ্লেষণ করলে নিম্নলিখিত সুবিধাগুলি দেখা যায়ঃ
উপরের সুবিধাগুলির পাশাপাশি, এই কৌশলটির কিছু সম্ভাব্য ঝুঁকিও রয়েছেঃ
এই ঝুঁকি কমাতে, ব্যবসায়ীরা অন্যান্য প্রযুক্তিগত সূচকগুলির সাথে একত্রে লেনদেনের নিশ্চিতকরণ বিবেচনা করতে পারেন, বা একক লেনদেনের ক্ষতি সীমাবদ্ধ করার জন্য একটি নির্দিষ্ট স্টপ লস সেট করতে পারেন।
কোডের গভীর বিশ্লেষণের মাধ্যমে নিম্নলিখিত অপ্টিমাইজেশান দিকগুলি উপস্থাপন করা যেতে পারেঃ
স্টপ লস মেকানিজম প্রবর্তন করুন: শতাংশ বা পরম পরিমাণে স্টপ লস শর্ত যুক্ত করুন, স্বয়ংক্রিয়ভাবে পজিশন বন্ধ করুন যখন ক্ষতি একটি নির্দিষ্ট নিম্নমানে পৌঁছে যায়, বড় ক্ষতি এড়াতে। অপ্টিমাইজেশন কোড অনুরূপ যোগ করতে পারেif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)শর্তাধীন বিচার
টেকনিক্যাল ইনডেক্স কনফার্মেশন: ট্রেন্ডিং সূচক (যেমন একটি চলমান গড়) বা গতিশীলতা সূচক (যেমন একটি আপেক্ষিকভাবে শক্তিশালী সূচক RSI) এর সাথে একত্রিত করুন, কেবলমাত্র যখন প্রযুক্তিগত সূচকগুলি অনুকূল সংকেত দেয় তখন ক্যালেন্ডার তারিখের ট্রেডিং করুন। এটি সংকেতের গুণমান বাড়িয়ে তুলতে পারে।
ক্রয়-বিক্রয় তারিখ অপ্টিমাইজ করুন: ঐতিহাসিক তথ্যের মাধ্যমে পুনরাবৃত্তি করে, বিশ্লেষণ করুন কোন ক্যালেন্ডার তারিখগুলি প্রকৃতপক্ষে 5 তম এবং 26 তম দিন ব্যবহারের পরিবর্তে সেরা কেনা এবং বিক্রি করার সময় সরবরাহ করে। সম্ভবত নির্দিষ্ট তারিখের সংমিশ্রণ আরও ভাল কাজ করে।
কিছু পজিশন ম্যানেজমেন্ট
মার্কেট স্ট্যাটাস ফিল্টার যোগ করুন: চরম বাজার পরিস্থিতিতে (যেমন উচ্চতর অস্থিরতা বা একটি সুস্পষ্ট বেয়ার মার্কেটের প্রবণতা) কৌশল কার্যকর করা স্থগিত করুন, প্রতিকূল পরিবেশে লেনদেন এড়াতে।
সময়সীমা প্রসারিত: আরো বছরের জন্য ক্যালেন্ডার ডেটা যোগ করুন, অথবা একটি ক্যালেন্ডার তারিখ স্বয়ংক্রিয়ভাবে গণনা করার জন্য একটি ফাংশন তৈরি করুন, যাতে কৌশলটি অনির্দিষ্টকালের জন্য চলতে পারে।
মাল্টি-প্রজাতির ব্যবসা বৃদ্ধি: একাধিক ক্রিপ্টোকারেন্সি বা অন্যান্য সম্পদ শ্রেণিতে কৌশল প্রসারিত করুন এবং বিভিন্ন বাজারে ক্যালেন্ডার চক্রের পারফরম্যান্সের পার্থক্য দেখুন।
এই অপ্টিমাইজেশানগুলি বাস্তবায়নের ফলে কৌশলগুলির স্থিতিশীলতা এবং অভিযোজনযোগ্যতা উল্লেখযোগ্যভাবে বৃদ্ধি পায়, তবে এর মূল ধারণাকে সহজ এবং সহজবোধ্য করে তোলে।
ক্যালেন্ডার চক্রের উপর ভিত্তি করে ক্রিপ্টোকারেন্সি ট্রেডিং কৌশল একটি অনন্য ট্রেডিং দৃষ্টিকোণ সরবরাহ করে, নির্দিষ্ট ক্যালেন্ডার তারিখগুলি ব্যবহার করে ক্রয় এবং বিক্রয় ক্রিয়াকলাপগুলি পরিচালনা করে। এই কৌশলটির সর্বাধিক সুবিধা হ’ল এর সহজ স্পষ্ট নিয়ম এবং সহজেই বাস্তবায়নের বৈশিষ্ট্য, যা ক্যালেন্ডার চক্রের এই অনন্য উপাদানটির সাথে মিলিত হয়, যা প্রচলিত প্রযুক্তিগত বিশ্লেষণ দ্বারা উপেক্ষা করা বাজার মডেলগুলিকে ধরতে পারে।
যাইহোক, এই কৌশলটি ঝুঁকি ব্যবস্থাপনা এবং বাজারের অভিযোজনযোগ্যতার অভাবের সাথেও চ্যালেঞ্জের মুখোমুখি। কৌশলটির কার্যকারিতা বাড়ানোর জন্য, ক্ষতি হ্রাস ব্যবস্থা, প্রযুক্তিগত সূচক সনাক্তকরণ এবং ক্রয়-বিক্রয় তারিখের অপ্টিমাইজেশনের মতো উন্নতি করার পরামর্শ দেওয়া হয়েছে। এই অপ্টিমাইজেশনগুলি কেবলমাত্র সম্ভাব্য ঝুঁকি হ্রাস করতে পারে না, তবে বিভিন্ন বাজারের পরিবেশে কৌশলটির অভিযোজনযোগ্যতা বাড়িয়ে তুলতে পারে।
এটি লক্ষ করা গুরুত্বপূর্ণ যে যে কোনও ট্রেডিং কৌশলকে বাস্তব বাজারের অবস্থার অধীনে তার কার্যকারিতা যাচাই করার জন্য পর্যাপ্ত ব্যাক-এন্ড এবং ফরোয়ার্ড টেস্টিংয়ের প্রয়োজন। ব্যবসায়ীরা যখন এই কৌশলটি গ্রহণ করেন তখন তাদের ঝুঁকি গ্রহণের ক্ষমতা এবং বিনিয়োগের লক্ষ্য অনুসারে যথাযথভাবে সামঞ্জস্য করা উচিত এবং অন্যান্য বিশ্লেষণের পদ্ধতির সাথে মিলিত হয়ে আরও বিস্তৃত ট্রেডিং সিদ্ধান্ত নেওয়া উচিত।
/*backtest
start: 2024-08-11 00:00:00
end: 2025-08-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Lunar ETHUSDT Trading 100% Invest with Fee & Slippage (2020~2026)", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1)
// Fee and slippage settings
feePercent = 0.1 // 0.1%
slippageTicks = 3
tickSize = syminfo.mintick
slippage = slippageTicks * tickSize
// Function for lunar new year start date and monthly lengths by year
f_get_lunar_data() =>
y = year(time)
if y == 2020
[timestamp("Asia/Seoul", 2020, 1, 25, 0, 0), array.from(29,30,29,30,29,30,29,30,29,30,30,29)]
else if y == 2021
[timestamp("Asia/Seoul", 2021, 2, 12, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30)]
else if y == 2022
[timestamp("Asia/Seoul", 2022, 2, 1, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
else if y == 2023
[timestamp("Asia/Seoul", 2023, 1, 22, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
else if y == 2024
[timestamp("Asia/Seoul", 2024, 2, 10, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30,29)]
else if y == 2025
[timestamp("Asia/Seoul", 2025, 1, 29, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
else if y == 2026
[timestamp("Asia/Seoul", 2026, 2, 17, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
else
[na, array.new_int()]
// Function to create cumulative monthly days array
f_get_lunar_md(days_arr) =>
arr = array.new_int()
sum = 0
for i = 0 to array.size(days_arr) - 1
sum += array.get(days_arr, i)
array.push(arr, sum)
arr
// Get lunar start date and monthly lengths
[ts_start, lunar_lengths] = f_get_lunar_data()
valid = not na(ts_start)
days_since = valid ? math.floor((time - ts_start) / 86400000) : na
cumulative = valid ? f_get_lunar_md(lunar_lengths) : na
// Declare lunar month, day, last day variables
var int lunar_month = na
var int lunar_day = na
var int lunar_last_day = na
// Calculate lunar date
if valid and not na(days_since) and days_since >= 0
lunar_month := na
lunar_day := na
lunar_last_day := na
for i = 0 to array.size(cumulative) - 1
cum = array.get(cumulative, i)
prev = i == 0 ? 0 : array.get(cumulative, i - 1)
if days_since < cum
lunar_month := i + 1
lunar_day := days_since - prev + 1
lunar_last_day := array.get(lunar_lengths, i)
break
else
lunar_month := na
lunar_day := na
lunar_last_day := na
// Buy condition: Lunar day 5 and no current position
buy_condition = not na(lunar_day) and lunar_day == 5 and strategy.position_size == 0
// Sell condition: Lunar day 26 and holding position
sell_condition = not na(lunar_day) and lunar_day == 26 and strategy.position_size > 0
// Buy/sell price adjusted for slippage and fee
price_buy = close + slippage
price_buy_with_fee = price_buy * (1 + feePercent * 0.01)
price_sell = close - slippage
price_sell_with_fee = price_sell * (1 - feePercent * 0.01)
// Calculate buy quantity using 100% of equity
qty = math.floor(strategy.equity / price_buy_with_fee)
// Buy order (limit)
if buy_condition and qty > 0
strategy.entry("Lunar Buy", strategy.long, qty, limit=price_buy)
// Sell order (close all)
if sell_condition and strategy.position_size > 0
strategy.close("Lunar Buy")
// True range variable (for label position adjustment)
tr = ta.tr(true)
// Date format creation
yr = year(time)
mo = month(time)
dy = dayofmonth(time)
mo_str = mo < 10 ? "0" + str.tostring(mo) : str.tostring(mo)
dy_str = dy < 10 ? "0" + str.tostring(dy) : str.tostring(dy)
solar_str = str.tostring(yr) + "-" + mo_str + "-" + dy_str
// Display solar and lunar date and position label (on bar close)
if barstate.islastconfirmedhistory and not na(lunar_day)
label.new(bar_index, high - tr * 6, "Solar: " + solar_str + "\nLunar: " + str.tostring(lunar_month) + "-" + str.tostring(lunar_day) ,
style=label.style_label_up, size=size.normal, color=color.new(color.teal, 50), textcolor=color.white)
// Display "15" label at bottom on lunar day 15 (lowest of last 50 bars - 1 true range)
if not na(lunar_day) and lunar_day == 15
low_offset = ta.lowest(low, 50) - tr
label.new(bar_index, low_offset, "15", style=label.style_label_down, color=color.orange, textcolor=color.white, size=size.normal)