ওয়াল স্ট্রিট সিসিআই সূচকের উপর ভিত্তি করে ক্যারপটো ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৩-১১-০১ ১১ঃ২৭ঃ২০
ট্যাগঃ

img

সারসংক্ষেপ

এটি একটি স্বয়ংক্রিয় ট্রেডিং কৌশল যা ওয়াল স্ট্রিট চেজিং রিং সূচক ব্যবহার করে, এটির সাথে সম্পর্কযুক্ত বলে মনে করা একটি রেফারেন্স ক্রিপ্টোকারেন্সির গণনা প্রবণতার ভিত্তিতে লক্ষ্য ক্রিপ্টোকারেন্সিতে দীর্ঘ / সংক্ষিপ্ত / বন্ধ সংকেত উত্পন্ন করে।

ডিফল্ট প্যারামিটার এবং ETH/USDT বেস সিম্বল হিসাবে, কৌশলটি DENT/USDT, BTT/USDT, FTT/USDT, DOT/USDT ইত্যাদির মতো প্রতীকগুলিতে ভাল ব্যাকটেস্ট ফলাফল দেখায়। এটি যুক্তিযুক্ত কারণ ETH ক্রিপ্টো বাজারে বেশ প্রভাবশালী তাই অনেক ক্রিপ্টো ETH এর প্রধান আন্দোলন অনুসরণ করে।

দ্রষ্টব্যঃ ডিফল্ট প্যারামিটারগুলির সাথে কৌশলটি 4 ঘন্টা সময়সীমার জন্য ডিজাইন করা হয়েছে। অন্যান্য সময়সীমার উপর, বিভিন্ন সমর্থন দৈর্ঘ্য চেষ্টা করুন।

কৌশল কিভাবে কাজ করে

  1. একটি WMA বেস প্রতীক উপর গণনা করা হয়, ডিফল্টরূপে দৈর্ঘ্য 200 সঙ্গে।

  2. যখন ডব্লিউএমএ বাড়ছে, তখন লম্বা, যখন কমে যাচ্ছে তখন শর্ট।

  3. লং/শর্টের জন্য TakeProfit এবং লং/শর্টের জন্য StopLoss হ'ল গণনা করা শতাংশ, সুতরাং 0.05 = 5% ইত্যাদি। এছাড়াও, TakeProfit/StopLoss বেস প্রতীকের উপর গণনা করা হয়, চার্ট এর প্রতীক নয়।

  4. কৌশলটি নিম্নলিখিত যুক্তির উপর ভিত্তি করে প্রবেশ এবং প্রস্থান করার জন্য বাজার আদেশ ব্যবহার করেঃ

    • যখন WMA বৃদ্ধি পায় এবং কোন অবস্থান নেই, দীর্ঘ প্রবেশ

    • যখন WMA পতনশীল এবং কোন অবস্থান, সংক্ষিপ্ত প্রবেশ

    • যখন লং পজিশনের মুনাফা >= TakeProfitLong শতাংশ, close long

    • যখন শর্ট পজিশনের মুনাফা >= TakeProfitShort শতাংশ, close short

    • যখন লং পজিশন লস >= স্টপ লস লং শতাংশ, লং বন্ধ

    • যখন শর্ট পজিশন লস >= স্টপ লস শর্ট শতাংশ, শর্ট বন্ধ

  5. TakeProfit এবং StopLoss দামগুলি বেস প্রতীক মূল্য পরিবর্তনের উপর ভিত্তি করে রিয়েল টাইমে আপডেট করা হয়।

সুবিধা বিশ্লেষণ

  1. এই কৌশলটি একাধিক ক্রিপ্টোকারেন্সিতে ব্যবহারের জন্য অত্যন্ত অভিযোজিত।

  2. প্রবণতা নির্ধারণের জন্য ওয়াল স্ট্রিট সিসিআই ব্যবহার করে গোলমালের কারণে ভুল ট্রেড এড়ানো যায়। সিসিআই মিথ্যা ব্রেকআউট ক্ষতি এড়াতে সহায়তা করে।

  3. ট্রেড প্রতি ক্ষতি নিয়ন্ত্রণ করার সময় TakeProfit এবং StopLoss অন্তর্ভুক্ত করা প্রবণতা অনুসরণ করতে দেয়।

  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)

আরো