
یہ حکمت عملی ایک کیلنڈر کی تاریخ پر مبنی کریپٹوکرنسی ٹریڈنگ کا طریقہ ہے جس میں کیلنڈر سائیکل کی مخصوص تاریخوں کا فائدہ اٹھاتے ہوئے خرید و فروخت کے آپریشن کیے جاتے ہیں۔ یہ حکمت عملی کیلنڈر کے نئے سال سے شروع ہوتی ہے اور اس سال کیلنڈر کے دسمبر کے اختتام تک جاری رہتی ہے ، اور اس میں ایک آسان اصول پر عمل کیا جاتا ہے: ہر کیلنڈر مہینے کے 5 ویں دن خریدیں اور ہر کیلنڈر مہینے کے 26 ویں دن فروخت کریں۔ یہ حکمت عملی مارکیٹ کے ممکنہ نمونوں کو پکڑنے کی کوشش کرتی ہے جو کیلنڈر سائیکل سے وابستہ ہوسکتی ہے ، اور تاجروں کو ایک منظم اور پیروی کرنے میں آسان تجارتی فریم ورک فراہم کرتی ہے۔ اس حکمت عملی میں کمیشن اور سلائڈنگ عوامل کو مدنظر رکھا گیا ہے ، اور 100٪ دستیاب فنڈز کی سرمایہ کاری کا استعمال کیا گیا ہے ، جو 2020 سے 2026 تک کی مدت کے لئے موزوں ہے۔
اس حکمت عملی کا بنیادی اصول کریپٹوکرنسی مارکیٹ پر قمری دورانیے کے ممکنہ اثرات پر مبنی ہے۔ کوڈ اس تصور کو مندرجہ ذیل طریقوں سے پورا کرتا ہے:
حکمت عملی کا استعمال کرتے ہوئے ایک درست تاریخ کے حساب کے طریقہ کار کو ذخیرہ کرنے کے لئے کیلنڈر کے ہر مہینے کے دنوں کی تعداد کی ایک صف کے ذریعے اور جمع کیلنڈر نئے سال سے شروع ہونے والے دنوں کی کل تعداد کا حساب لگانے کے لئے، اس طرح کے طور پر درست طریقے سے موجودہ کیلنڈر کی تاریخ کا تعین کرنے کے لئے. اس طریقہ کار کو یقینی بناتا ہے کہ ٹریڈنگ سگنل کی درست triggering.
اس حکمت عملی کے کوڈ کا تجزیہ کرتے ہوئے ، مندرجہ ذیل فوائد کا خلاصہ کیا جاسکتا ہے:
اس حکمت عملی کے فوائد کے باوجود ، اس میں کچھ ممکنہ خطرات بھی ہیں:
ان خطرات کو کم کرنے کے لئے ، تاجر دوسرے تکنیکی اشارے کے ساتھ مل کر تجارت کی تصدیق کرنے پر غور کرسکتے ہیں ، یا ایک ہی تجارت میں ہونے والے نقصان کو محدود کرنے کے لئے ایک مقررہ اسٹاپ نقصان کی حد طے کرسکتے ہیں۔
کوڈ کا گہرائی سے تجزیہ کرنے کے بعد ، مندرجہ ذیل اصلاحات کی تجاویز پیش کی جاسکتی ہیں۔
سٹاپ نقصان کا طریقہ کار متعارف کرایا جا رہا ہے۔: فیصد یا مطلق رقم کی روک تھام کی شرائط شامل کریں ، جب نقصانات کسی خاص حد تک پہنچ جائیں تو خود بخود صفائی کریں ، تاکہ بڑے پیمانے پر نقصان سے بچ سکیں۔ اصلاحی کوڈ میں اسی طرح کا اضافہ کیا جاسکتا ہےif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)شرائط و ضوابط
انضمام تکنیکی اشارے کی تصدیق: رجحان کے اشارے ((جیسے کہ ایک چلتی اوسط) یا ایک متحرک اشارے ((جیسے کہ ایک نسبتاً کمزور اشارے RSI) کے ساتھ مل کر ایک معاون شرط کے طور پر ، صرف اس وقت کیلنڈر کی تاریخ کی تجارت پر عمل کریں جب تکنیکی اشارے ایک سازگار سگنل فراہم کریں۔ اس سے سگنل کی معیار کو بہتر بنایا جاسکتا ہے۔
خرید و فروخت کی تاریخوں کو بہتر بنائیں: تاریخی اعداد و شمار کی بازیافت کے ذریعہ ، تجزیہ کریں کہ کون سے کیلنڈر کی تاریخوں میں جوڑے کو اصل میں خریدنے اور بیچنے کا بہترین وقت فراہم کیا گیا ہے ، اس کے بجائے کہ 5th اور 26th دن کا مستقل استعمال ہو۔ کچھ خاص تاریخوں کے جوڑے بہتر کارکردگی کا مظاہرہ کرسکتے ہیں۔
کچھ پوزیشن مینجمنٹ: حکمت عملی میں ترمیم کریں تاکہ 100٪ فنڈز کے بجائے کچھ فنڈز کا استعمال کیا جاسکے ، یا مارکیٹ میں اتار چڑھاؤ کی نقل و حرکت کے مطابق پوزیشن کے سائز کو ایڈجسٹ کریں تاکہ خطرہ پھیلائے۔
مارکیٹ کی حیثیت کا فلٹر شامل کریں: انتہائی مارکیٹ کے حالات میں حکمت عملی پر عملدرآمد کو روکیں (جیسے اعلی اتار چڑھاؤ یا ایک واضح ریچھ کا رجحان) ، غیر منفعتی ماحول میں تجارت سے گریز کریں۔
وقت کی حد میں توسیع: مزید سالوں کے لئے کیلنڈر کے اعداد و شمار کو شامل کریں، یا کیلنڈر کی تاریخوں کو خود کار طریقے سے حساب کرنے کے لئے ایک فنکشن تیار کریں، تاکہ حکمت عملی کو لامحدود مدت تک چلایا جا سکے.
کثیر اقسام کی تجارت میں اضافہ: حکمت عملی کو متعدد کریپٹو کرنسیوں یا دیگر اثاثوں کی کلاسوں تک بڑھانا ، اور مختلف بازاروں میں قمری دورانیے کی کارکردگی میں فرق دیکھنا۔
ان اصلاحات کے نفاذ سے حکمت عملی کی لچک اور موافقت میں نمایاں اضافہ ہوسکتا ہے ، جبکہ اس کی بنیادی سوچ کو سادہ اور بدیہی رکھا جاسکتا ہے۔
کیلنڈر سائیکل پر مبنی کریپٹوکرنسی ٹریڈنگ حکمت عملی ایک منفرد تجارتی نقطہ نظر پیش کرتی ہے ، جس میں مخصوص کیلنڈر کی تاریخوں پر خرید و فروخت کی کارروائی کا استعمال کیا جاتا ہے۔ اس حکمت عملی کی سب سے بڑی خوبی اس کے سادہ واضح قواعد اور آسانی سے لاگو ہونے کی خصوصیات میں ہے ، جو کیلنڈر سائیکل کے اس منفرد عنصر کے ساتھ مل کر مارکیٹ کے ایسے نمونوں کو پکڑ سکتی ہے جو روایتی تکنیکی تجزیہ میں نظر انداز ہوجاتے ہیں۔
تاہم ، اس حکمت عملی کو خطرے کے انتظام اور مارکیٹ میں موافقت کی کمی کے چیلنج کا بھی سامنا کرنا پڑتا ہے۔ حکمت عملی کی تاثیر کو بڑھانے کے ل improvements ، بہتر اقدامات جیسے نقصانات کو روکنے کے طریقہ کار ، تکنیکی اشارے کی تصدیق اور خرید و فروخت کی تاریخوں کو بہتر بنانا تجویز کیا گیا ہے۔ یہ اصلاحات نہ صرف ممکنہ خطرات کو کم کرسکتی ہیں بلکہ مختلف مارکیٹ کے حالات میں حکمت عملی کی موافقت کو بھی بڑھا سکتی ہیں۔
یہ بات قابل ذکر ہے کہ کسی بھی تجارتی حکمت عملی کو حقیقی مارکیٹ کے حالات میں اس کی کارکردگی کی توثیق کرنے کے لئے کافی حد تک پیچھے کی جانچ اور آگے کی جانچ کی ضرورت ہوتی ہے۔ اس حکمت عملی کو اپنانے میں ، تاجر کو اپنی خطرے کی برداشت اور سرمایہ کاری کے اہداف کے مطابق مناسب ایڈجسٹمنٹ کرنا چاہئے ، اور دیگر تجزیاتی طریقوں کے ساتھ مل کر زیادہ جامع تجارتی فیصلے کرنا چاہئے۔
/*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)