
यह रणनीति एक कैलेंडर तिथि-आधारित क्रिप्टोकरेंसी ट्रेडिंग विधि है, जो कैलेंडर चक्र के विशिष्ट दिनों का उपयोग करके खरीद और बिक्री संचालन करती है। यह रणनीति कैलेंडर वर्ष के नए साल से शुरू होती है और उस वर्ष के कैलेंडर दिसंबर के अंत तक जारी रहती है, और सरल नियमों का पालन करती हैः हर कैलेंडर महीने के 5 वें दिन खरीदें और हर कैलेंडर महीने के 26 वें दिन बेचें। यह विधि बाजार के पैटर्न को पकड़ने की कोशिश करती है जो कैलेंडर चक्र से संबंधित हो सकता है, जिससे व्यापारियों को एक संरचित और अनुसरण करने में आसान ट्रेडिंग फ्रेमवर्क प्रदान किया जाता है। यह रणनीति कमीशन और स्लाइड कारक को ध्यान में रखती है और 100% उपलब्ध पूंजी निवेश का उपयोग करती है, 2020 से 2026 तक की अवधि के लिए लागू होती है।
इस रणनीति का मुख्य सिद्धांत क्रिप्टोक्यूरेंसी बाजार पर संभावित प्रभावों पर आधारित है। कोड इस विचार को निम्नलिखित तरीकों से पूरा करता हैः
रणनीति एक सटीक तिथि गणना विधि का उपयोग करती है, जो प्रत्येक कैलेंडर महीने के दिनों को सरणी के माध्यम से संग्रहीत करती है, और कैलेंडर नए साल से शुरू होने वाले दिनों की कुल संख्या की गणना करती है, जिससे वर्तमान कैलेंडर तिथि का सटीक निर्धारण होता है। यह विधि ट्रेडिंग सिग्नल के सटीक ट्रिगर की गारंटी देती है।
इस रणनीति के कोड का विश्लेषण करने से निम्नलिखित फायदे सामने आते हैंः
इस रणनीति के लाभों के बावजूद, इसके कुछ संभावित जोखिम भी हैं:
इन जोखिमों को कम करने के लिए, व्यापारी अन्य तकनीकी संकेतकों के साथ व्यापार की पुष्टि करने पर विचार कर सकते हैं, या एक व्यापार के नुकसान को सीमित करने के लिए एक निश्चित स्टॉप-लॉस सेट कर सकते हैं।
कोड का गहराई से विश्लेषण करने के बाद, निम्नलिखित अनुकूलन दिशाओं को सुझाया जा सकता हैः
स्टॉप लॉस तंत्र का परिचय: एक प्रतिशत या पूर्ण राशि के लिए एक स्टॉप लॉस शर्त जोड़ें, जब नुकसान एक निश्चित थ्रॉल्ड तक पहुंचता है तो स्वचालित रूप से पोजीशन को साफ करें, जिससे भारी नुकसान से बचा जा सके। अनुकूलन कोड में इसी तरह की वृद्धि की जा सकती हैif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)क्या आप जानते हैं?
प्राविधिक संकेतक की पुष्टिप्रवृत्ति सूचक (जैसे कि एक चलती औसत) या गतिशीलता सूचक (जैसे कि एक अपेक्षाकृत मजबूत सूचक आरएसआई) के साथ एक सहायक शर्त के रूप में, कैलेंडर दिनांक व्यापार केवल तभी किया जाता है जब तकनीकी संकेतक एक अनुकूल संकेत प्रदान करते हैं। इससे संकेत की गुणवत्ता में सुधार होता है।
खरीद और बिक्री तिथि अनुकूलित करें: ऐतिहासिक डेटा के माध्यम से, विश्लेषण करें कि कौन सी कैलेंडर की तारीखें वास्तव में 5 वें और 26 वें दिन का उपयोग करने के बजाय संयोजन के लिए सबसे अच्छा खरीद और बिक्री समय प्रदान करती हैं। कुछ विशेष दिनांक संयोजन बेहतर प्रदर्शन कर सकते हैं।
आंशिक स्थिति प्रबंधन: रणनीति को संशोधित करने के लिए 100% धन के बजाय कुछ धन का उपयोग करके व्यापार करें, या जोखिम को फैलाने के लिए बाजार की अस्थिरता की गतिशीलता के अनुसार स्थिति का आकार समायोजित करें।
बाजार स्थिति फ़िल्टर जोड़ें: चरम बाजार स्थितियों में रणनीति निष्पादन को निलंबित करें (जैसे उच्च अस्थिरता या स्पष्ट भालू बाजार प्रवृत्ति) और प्रतिकूल परिस्थितियों में व्यापार से बचें।
समय सीमा का विस्तार: अधिक वर्षों के लिए कैलेंडर डेटा जोड़ें, या कैलेंडर तिथियों की स्वचालित गणना के लिए एक फ़ंक्शन विकसित करें, ताकि रणनीति असीमित समय तक चल सके।
बहु-प्रजाति व्यापार में वृद्धि: रणनीति को कई क्रिप्टोकरेंसी या अन्य परिसंपत्ति श्रेणियों में विस्तारित करें और विभिन्न बाजारों में अलग-अलग प्रदर्शन के लिए देखें।
इन अनुकूलन दिशाओं को लागू करने से रणनीतियों की कठोरता और अनुकूलनशीलता में काफी वृद्धि हो सकती है, जबकि उनके मूल विचार को सरल और सहज बनाए रखा जा सकता है।
एक कैलेंडर चक्र आधारित क्रिप्टोकरेंसी ट्रेडिंग रणनीति एक विशिष्ट ट्रेडिंग परिप्रेक्ष्य प्रदान करती है, जो एक विशिष्ट कैलेंडर तिथि का उपयोग करके खरीद और बेचने के लिए है। इस रणनीति का सबसे बड़ा लाभ इसके सरल स्पष्ट नियम और लागू करने में आसान है, जो कैलेंडर चक्र के इस अनूठे कारक के साथ मिलकर बाजार के पैटर्न को पकड़ सकता है जो पारंपरिक तकनीकी विश्लेषण द्वारा अनदेखा किया जाता है।
हालांकि, इस रणनीति को जोखिम प्रबंधन और बाजार अनुकूलता की कमी की चुनौतियों का भी सामना करना पड़ता है। रणनीति की प्रभावशीलता को बढ़ाने के लिए, रोकथाम तंत्र, तकनीकी संकेतकों की पुष्टि और खरीद और बिक्री की तारीखों को अनुकूलित करने जैसे सुधारों को पेश करने की सिफारिश की जाती है। ये अनुकूलन न केवल संभावित जोखिम को कम कर सकते हैं, बल्कि विभिन्न बाजार स्थितियों में रणनीति की अनुकूलता को भी बढ़ा सकते हैं।
यह ध्यान देने योग्य है कि किसी भी ट्रेडिंग रणनीति को वास्तविक बाजार स्थितियों में इसके प्रदर्शन को सत्यापित करने के लिए पर्याप्त पूर्व-परीक्षण और पूर्व-परीक्षण की आवश्यकता होती है। इस रणनीति को अपनाने वाले व्यापारी को अपनी जोखिम सहनशीलता और निवेश लक्ष्यों के अनुसार उचित समायोजन करना चाहिए, और अन्य विश्लेषणात्मक तरीकों के साथ संयोजन में अधिक व्यापक ट्रेडिंग निर्णय लेना चाहिए।
/*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)