वाल स्ट्रीट सीसीआई सूचकांक के आधार पर सहसंबंध आधारित तेजी/बिरिश क्रिप्टो ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-01 11:27:20
टैगः

img

अवलोकन

यह एक स्वचालित ट्रेडिंग रणनीति है जो वाल स्ट्रीट चेसिंग रिंग इंडेक्स का उपयोग करके, इसके साथ सहसंबद्ध माना जाने वाला एक बेंचमार्क क्रिप्टो मुद्रा के गणना की गई प्रवृत्ति के आधार पर लक्ष्य क्रिप्टो मुद्रा पर लंबे/लघु/करीब संकेत उत्पन्न करती है।

डिफ़ॉल्ट मापदंडों और ETH/USDT के आधार प्रतीक के साथ, रणनीति DENT/USDT, BTT/USDT, FTT/USDT, DOT/USDT आदि जैसे प्रतीकों पर अच्छे बैकटेस्ट परिणाम दिखाती है। यह समझ में आता है क्योंकि ETH क्रिप्टो बाजारों में काफी प्रभावशाली है इसलिए कई क्रिप्टो ETH के प्रमुख आंदोलनों का पालन करते हैं।

नोटः डिफ़ॉल्ट पैरामीटर के साथ रणनीति 4h समय सीमा के लिए है. अन्य समय सीमाओं पर, विभिन्न समर्थन लंबाई का प्रयास करें.

रणनीति कैसे काम करती है

  1. WMA की गणना आधार चिह्न पर की जाती है, जिसमें डिफ़ॉल्ट रूप से लंबाई 200 होती है।

  2. जब डब्ल्यूएमए बढ़ रहा है, तो लंबा जाओ। जब गिर रहा है तो छोटा जाओ।

  3. Long/Short के लिए TakeProfit और Long/Short के लिए StopLoss प्रतिशत हैं इसलिए 0.05 = 5% आदि की गणना की जाती है।

  4. रणनीति निम्नलिखित तर्क के आधार पर प्रवेश और निकास के लिए बाजार आदेशों का उपयोग करती हैः

    • जब WMA बढ़ रहा हो और कोई स्थिति नहीं हो, तो लंबी प्रविष्टि

    • जब WMA गिर रहा है और कोई स्थिति नहीं है, लघु प्रविष्टि

    • जब लंबी स्थिति लाभ >= TakeProfitLong प्रतिशत, बंद लंबी

    • जब शॉर्ट पोजीशन लाभ >= टेकप्रॉफिट शॉर्ट प्रतिशत, शॉर्ट बंद करें

    • जब लंबी स्थिति हानि >= स्टॉपलॉसलॉन्ग प्रतिशत, बंद लंबी

    • जब शॉर्ट पोजीशन हानि >= स्टॉपलॉस शॉर्ट प्रतिशत, शॉर्ट बंद

  5. टेकप्रॉफिट और स्टॉपलॉस की कीमतें बेस प्रतीक मूल्य परिवर्तनों के आधार पर वास्तविक समय में अपडेट की जाती हैं।

लाभ विश्लेषण

  1. यह रणनीति पैरामीटर को समायोजित करके कई क्रिप्टो मुद्राओं पर उपयोग के लिए अत्यधिक अनुकूलन योग्य है।

  2. रुझान निर्धारित करने के लिए वॉल स्ट्रीट सीसीआई का उपयोग करने से शोर-आधारित गलत ट्रेडों से बचा जाता है। सीसीआई ने गलत ब्रेकआउट नुकसान से बचने में मदद करने के लिए ब्रेकआउट में देरी की है।

  3. टेकप्रॉफिट और स्टॉपलॉस को शामिल करने से ट्रेड प्रति हानि को नियंत्रित करते हुए प्रवृत्ति का अनुसरण करने की अनुमति मिलती है।

  4. मैनुअल हस्तक्षेप के बिना पूरी तरह से स्वचालित ट्रेडिंग 24/7 रनटाइम की अनुमति देती है।

जोखिम विश्लेषण

  1. लक्ष्य क्रिप्टो मूल्य को आधार क्रिप्टो से अलग करने का जोखिम, जो रणनीति की विफलता का कारण बनता है। कई आधार क्रिप्टो का उपयोग करके और उच्चतम सहसंबंधित एक का चयन करके अनुकूलित कर सकते हैं।

  2. अचानक अस्थिरता के जोखिम को बंद करने वाली स्थिति। स्टॉपलॉस प्रतिशत को समायोजित कर सकते हैं या ट्रेलिंग स्टॉप का उपयोग कर सकते हैं।

  3. ट्रेड ट्रैकिंग या गतिशील लाभ लेने को शामिल कर सकते हैं।

  4. गलत ब्रेकआउट का जोखिम स्टॉप लॉस एक्जिट के लिए अग्रणी है। सीसीआई पैरामीटर को ट्यून कर सकते हैं या पुनः प्रवेश तर्क जोड़ सकते हैं।

अनुकूलन दिशाएँ

  1. एकाधिक आधार क्रिप्टो में सहसंबंध विश्लेषण का उपयोग करें और एकल आधार क्रिप्टो जोखिम को कम करने के लिए संकेतकों को मिलाएं।

  2. उतार-चढ़ाव के आधार पर TakeProfit/StopLoss को गतिशील रूप से समायोजित करने के लिए ट्रेंड ट्रैकिंग जोड़ें।

  3. चरम चालों को रोकने के लिए चरणबद्ध स्टॉप जोड़ें।

  4. स्टॉप लॉस से बाहर निकलने के बाद आगे के रुझानों को याद करने से बचने के लिए पुनः प्रवेश तर्क जोड़ें।

  5. सिग्नल की प्रभावशीलता में सुधार के लिए सीसीआई मापदंडों और सेटिंग्स को अनुकूलित करें।

  6. अनुकूलन क्षमता में सुधार के लिए प्रत्येक लक्ष्य क्रिप्टो के लिए अलग से मापदंडों का अनुकूलन करें।

  7. खाता आकार के आधार पर स्थिति आकार अनुकूलित करें.

सारांश

कुल मिलाकर यह एक विशिष्ट प्रवृत्ति के बाद की रणनीति है। मूल विचार वॉल स्ट्रीट सीसीआई का उपयोग करके एक बेंचमार्क क्रिप्टो की प्रवृत्ति दिशा निर्धारित करना और तदनुसार लक्ष्य क्रिप्टो का व्यापार करना है। रणनीति के कुछ फायदे हैं लेकिन ध्यान देने योग्य जोखिम भी हैं। ट्यूनिंग, प्रवृत्ति ट्रैकिंग, जोखिम नियंत्रण आदि में और सुधार स्थिरता और लाभप्रदता में सुधार कर सकते हैं। सारांश में, रणनीति स्वचालित व्यवस्थित क्रिप्टो ट्रेडिंग के लिए विचार और संदर्भ प्रदान करती है।


/*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)

अधिक