यह एक स्वचालित ट्रेडिंग रणनीति है जो वाल स्ट्रीट चेसिंग रिंग इंडेक्स का उपयोग करके, इसके साथ सहसंबद्ध माना जाने वाला एक बेंचमार्क क्रिप्टो मुद्रा के गणना की गई प्रवृत्ति के आधार पर लक्ष्य क्रिप्टो मुद्रा पर लंबे/लघु/करीब संकेत उत्पन्न करती है।
डिफ़ॉल्ट मापदंडों और ETH/USDT के आधार प्रतीक के साथ, रणनीति DENT/USDT, BTT/USDT, FTT/USDT, DOT/USDT आदि जैसे प्रतीकों पर अच्छे बैकटेस्ट परिणाम दिखाती है। यह समझ में आता है क्योंकि ETH क्रिप्टो बाजारों में काफी प्रभावशाली है इसलिए कई क्रिप्टो ETH
नोटः डिफ़ॉल्ट पैरामीटर के साथ रणनीति 4h समय सीमा के लिए है. अन्य समय सीमाओं पर, विभिन्न समर्थन लंबाई का प्रयास करें.
WMA की गणना आधार चिह्न पर की जाती है, जिसमें डिफ़ॉल्ट रूप से लंबाई 200 होती है।
जब डब्ल्यूएमए बढ़ रहा है, तो लंबा जाओ। जब गिर रहा है तो छोटा जाओ।
Long/Short के लिए TakeProfit और Long/Short के लिए StopLoss प्रतिशत हैं इसलिए 0.05 = 5% आदि की गणना की जाती है।
रणनीति निम्नलिखित तर्क के आधार पर प्रवेश और निकास के लिए बाजार आदेशों का उपयोग करती हैः
जब WMA बढ़ रहा हो और कोई स्थिति नहीं हो, तो लंबी प्रविष्टि
जब WMA गिर रहा है और कोई स्थिति नहीं है, लघु प्रविष्टि
जब लंबी स्थिति लाभ >= TakeProfitLong प्रतिशत, बंद लंबी
जब शॉर्ट पोजीशन लाभ >= टेकप्रॉफिट शॉर्ट प्रतिशत, शॉर्ट बंद करें
जब लंबी स्थिति हानि >= स्टॉपलॉसलॉन्ग प्रतिशत, बंद लंबी
जब शॉर्ट पोजीशन हानि >= स्टॉपलॉस शॉर्ट प्रतिशत, शॉर्ट बंद
टेकप्रॉफिट और स्टॉपलॉस की कीमतें बेस प्रतीक मूल्य परिवर्तनों के आधार पर वास्तविक समय में अपडेट की जाती हैं।
यह रणनीति पैरामीटर को समायोजित करके कई क्रिप्टो मुद्राओं पर उपयोग के लिए अत्यधिक अनुकूलन योग्य है।
रुझान निर्धारित करने के लिए वॉल स्ट्रीट सीसीआई का उपयोग करने से शोर-आधारित गलत ट्रेडों से बचा जाता है। सीसीआई ने गलत ब्रेकआउट नुकसान से बचने में मदद करने के लिए ब्रेकआउट में देरी की है।
टेकप्रॉफिट और स्टॉपलॉस को शामिल करने से ट्रेड प्रति हानि को नियंत्रित करते हुए प्रवृत्ति का अनुसरण करने की अनुमति मिलती है।
मैनुअल हस्तक्षेप के बिना पूरी तरह से स्वचालित ट्रेडिंग 24/7 रनटाइम की अनुमति देती है।
लक्ष्य क्रिप्टो मूल्य को आधार क्रिप्टो से अलग करने का जोखिम, जो रणनीति की विफलता का कारण बनता है। कई आधार क्रिप्टो का उपयोग करके और उच्चतम सहसंबंधित एक का चयन करके अनुकूलित कर सकते हैं।
अचानक अस्थिरता के जोखिम को बंद करने वाली स्थिति। स्टॉपलॉस प्रतिशत को समायोजित कर सकते हैं या ट्रेलिंग स्टॉप का उपयोग कर सकते हैं।
ट्रेड ट्रैकिंग या गतिशील लाभ लेने को शामिल कर सकते हैं।
गलत ब्रेकआउट का जोखिम स्टॉप लॉस एक्जिट के लिए अग्रणी है। सीसीआई पैरामीटर को ट्यून कर सकते हैं या पुनः प्रवेश तर्क जोड़ सकते हैं।
एकाधिक आधार क्रिप्टो में सहसंबंध विश्लेषण का उपयोग करें और एकल आधार क्रिप्टो जोखिम को कम करने के लिए संकेतकों को मिलाएं।
उतार-चढ़ाव के आधार पर TakeProfit/StopLoss को गतिशील रूप से समायोजित करने के लिए ट्रेंड ट्रैकिंग जोड़ें।
चरम चालों को रोकने के लिए चरणबद्ध स्टॉप जोड़ें।
स्टॉप लॉस से बाहर निकलने के बाद आगे के रुझानों को याद करने से बचने के लिए पुनः प्रवेश तर्क जोड़ें।
सिग्नल की प्रभावशीलता में सुधार के लिए सीसीआई मापदंडों और सेटिंग्स को अनुकूलित करें।
अनुकूलन क्षमता में सुधार के लिए प्रत्येक लक्ष्य क्रिप्टो के लिए अलग से मापदंडों का अनुकूलन करें।
खाता आकार के आधार पर स्थिति आकार अनुकूलित करें.
कुल मिलाकर यह एक विशिष्ट प्रवृत्ति के बाद की रणनीति है। मूल विचार वॉल स्ट्रीट सीसीआई का उपयोग करके एक बेंचमार्क क्रिप्टो की प्रवृत्ति दिशा निर्धारित करना और तदनुसार लक्ष्य क्रिप्टो का व्यापार करना है। रणनीति के कुछ फायदे हैं लेकिन ध्यान देने योग्य जोखिम भी हैं। ट्यूनिंग, प्रवृत्ति ट्रैकिंग, जोखिम नियंत्रण आदि में और सुधार स्थिरता और लाभप्रदता में सुधार कर सकते हैं। सारांश में, रणनीति स्वचालित व्यवस्थित क्रिप्टो ट्रेडिंग के लिए विचार और संदर्भ प्रदान करती है।
/*backtest start: 2022-10-25 00:00:00 end: 2023-10-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © levieux //@version=5 strategy(title='Correlation Strategy', shorttitle='Correlation Strategy', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1) supportLength = input.int(200, minval=1, title='Support Length') supportSymbol = input('BTC_USDT:swap', title='Correlated Symbol') supportSource = input(hlc3, title='Price Source') takeprofitLong = input.float(0.2, 'Take Profit Long', step=0.01) takeprofitShort = input.float(0.15, 'Take Profit Short', step=0.01) stoplossLong = input.float(0.1, 'Stop Loss Long', step=0.01) stoplossShort = input.float(0.04, 'Stop Loss Short', step=0.01) start = input(defval = timestamp("01 Jan 2016 00:00 +0000"), title = "Start Time") end = input(defval = timestamp("31 Dec 2050 23:59 +0000"), title = "End Time") supportTicker = request.security(supportSymbol, timeframe.period, supportSource, lookahead=barmerge.lookahead_off) //input(close, title="Source") supportLine = ta.wma(supportTicker, supportLength) window() => true if not window() strategy.cancel_all() supportLongPrice = close supportShortPrice = close if strategy.position_size > 0 supportLongPrice := supportLongPrice[1] if strategy.position_size < 0 supportShortPrice := supportShortPrice[1] longCondition = ta.rising(supportLine, 5) and window() and strategy.position_size <= 0 shortCondition = ta.falling(supportLine, 5) and window() and window() and strategy.position_size > 0 takeprofitLongCondition = takeprofitLong > 0 and window() and strategy.position_size > 0 and supportTicker > supportLongPrice * (1 + takeprofitLong) stoplossLongCondition = stoplossLong > 0 and window() and strategy.position_size > 0 and supportTicker < supportLongPrice * (1 - stoplossLong) takeprofitShortCondition = takeprofitShort > 0 and window() and strategy.position_size < 0 and supportTicker > supportShortPrice * (1 + takeprofitShort) stoplossShortCondition = stoplossShort > 0 and window() and strategy.position_size < 0 and supportTicker < supportShortPrice * (1 - stoplossShort) if longCondition strategy.entry('Long', strategy.long) supportLongPrice := supportTicker if shortCondition strategy.entry('Short', strategy.short) supportShortPrice := supportTicker if takeprofitLongCondition strategy.close('Long') if stoplossLongCondition strategy.close('Long') if takeprofitShortCondition strategy.close('Short') if stoplossShortCondition strategy.close('Short') /////////////////// // MONTHLY TABLE // new_month = month(time) != month(time[1]) new_year = year(time) != year(time[1]) eq = strategy.equity bar_pnl = eq / eq[1] - 1 bar_bh = (close-close[1])/close[1] cur_month_pnl = 0.0 cur_year_pnl = 0.0 cur_month_bh = 0.0 cur_year_bh = 0.0 // Current Monthly P&L cur_month_pnl := new_month ? 0.0 : (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 cur_month_bh := new_month ? 0.0 : (1 + cur_month_bh[1]) * (1 + bar_bh) - 1 // Current Yearly P&L cur_year_pnl := new_year ? 0.0 : (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1 cur_year_bh := new_year ? 0.0 : (1 + cur_year_bh[1]) * (1 + bar_bh) - 1 // Arrays to store Yearly and Monthly P&Ls var month_pnl = array.new_float(0) var month_time = array.new_int(0) var month_bh = array.new_float(0) var year_pnl = array.new_float(0) var year_time = array.new_int(0) var year_bh = array.new_float(0) end_time = false end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory if (not na(cur_month_pnl[1]) and (new_month or end_time)) if (end_time[1]) array.pop(month_pnl) array.pop(month_time) array.push(month_pnl , cur_month_pnl[1]) array.push(month_time, time[1]) array.push(month_bh , cur_month_bh[1]) if (not na(cur_year_pnl[1]) and (new_year or end_time)) if (end_time[1]) array.pop(year_pnl) array.pop(year_time) array.push(year_pnl , cur_year_pnl[1]) array.push(year_time, time[1]) array.push(year_bh , cur_year_bh[1]) // Monthly P&L Table var monthly_table = table(na) getCellColor(pnl, bh) => if pnl > 0 if bh < 0 or pnl > 2 * bh color.new(color.green, transp = 20) else if pnl > bh color.new(color.green, transp = 50) else color.new(color.green, transp = 80) else if bh > 0 or pnl < 2 * bh color.new(color.red, transp = 20) else if pnl < bh color.new(color.red, transp = 50) else color.new(color.red, transp = 80) if end_time monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1) table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc) table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc) table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc) table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc) table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc) table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc) table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc) table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc) table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc) table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc) table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc) table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc) table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc) table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999) for yi = 0 to array.size(year_pnl) - 1 table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc) y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi)) table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100)) + " (" + str.tostring(math.round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color) for mi = 0 to array.size(month_time) - 1 m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1 m_col = month(array.get(month_time, mi)) m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi)) table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100)) + " (" + str.tostring(math.round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)