
এই কৌশলটি ওয়াল স্ট্রিট ক্যাচার গ্লোবাল সূচকের উপর ভিত্তি করে, বেঞ্চমার্ক ক্রিপ্টোকারেন্সি মার্কেটের পতন ও পতনের সাথে তুলনা করে, লক্ষ্যযুক্ত ক্রিপ্টোকারেন্সির উপর বিড-ডাউন অপারেশন করার জন্য একটি স্বয়ংক্রিয় ট্রেডিং কৌশল। কৌশলটি বিভিন্ন ক্রিপ্টোকারেন্সির উপর নির্ভর করে সমর্থনযোগ্যতা সূচক প্যারামিটার সেট করতে পারে, যাতে একাধিক ক্রিপ্টোকারেন্সির উপর ট্র্যাকিং করা যায়।
বেঞ্চমার্ক ক্রিপ্টোকারেন্সির জন্য ওয়াল স্ট্রিট ক্যাচার গ্লোবাল ইনডিকেটর গড়রেখা, গড়রেখার দৈর্ঘ্য 200 চক্র হিসাবে সেট করুন।
গড়রেখার পতন নির্ধারণ করুন: গড়রেখার উত্থান হলে, কৌশলটি বিউটি অপারেশন নেয়; গড়রেখার পতন হলে, কৌশলটি বিউটি অপারেশন নেয়।
গড়রেখার পতন ও পতনের উপর ভিত্তি করে এবং বর্তমান অবস্থানের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে পজিশন খোলার এবং পজিশনের জন্য কৌশলঃ
যখন গড় লাইন উঁচু থাকে এবং বর্তমানে কোন অবস্থান নেই, তখন কৌশলগত বাজার মূল্য স্বয়ংক্রিয়ভাবে বেশি পজিশনে থাকে;
যখন গড় পতন হয় এবং বর্তমানে কোন অবস্থান নেই, তখন কৌশলগত বাজার মূল্য স্বয়ংক্রিয়ভাবে খালি পজিশন খুলবে;
যখন একটি মাল্টিপয়েন্ট মুনাফা সেট করা স্টপ-অফ অনুপাতে পৌঁছে যায়, তখন কৌশলগত বাজার মূল্য স্বয়ংক্রিয়ভাবে মাল্টিপয়েন্টের জন্য সমতল হয়ে যায়;
যখন short position-এর মুনাফা সেট করা stop-loss ratio-এ পৌঁছায়, তখন কৌশলগত বাজার মূল্য স্বয়ংক্রিয়ভাবে short position-কে সমতল করে দেয়;
যখন পরাজয়ের হার সেট করা স্টপ লস অনুপাতে পৌঁছে যায়, তখন কৌশলটির বাজার মূল্য স্বয়ংক্রিয়ভাবে পরাজয়ের জন্য সমতল হয়;
যখন কুপন পজিশনের ক্ষতি সেট করা স্টপ লস অনুপাতে পৌঁছায়, তখন কৌশলগত বাজার মূল্য স্বয়ংক্রিয়ভাবে কুপন পত্রকে সমতল করে দেয়।
স্ট্র্যাটেজিঃ বেঞ্চমার্ক ক্রিপ্টোকারেন্সি বাজারে পরিবর্তনের উপর ভিত্তি করে রিয়েল-টাইমে স্টপ-অফ-লস মূল্য আপডেট করা।
এই কৌশলটি অত্যন্ত অভিযোজিত, বিভিন্ন ক্রিপ্টোকারেন্সির জন্য বিভিন্ন পরামিতি সেট করে এবং একাধিক ক্রিপ্টোকারেন্সির জন্য লেনদেনের ট্র্যাকিং সক্ষম করে।
বাজারের প্রবণতা নির্ধারণের জন্য ওয়াল স্ট্রিট মাউসফায়ার ইনডিকেটর ব্যবহার করা হয়, যাতে শব্দজনিত ভুল লেনদেন এড়ানো যায়। এই সূচকটি ব্রেক আপ এবং ডাউন রেলের জন্য কিছুটা পিছিয়ে রয়েছে, যা মিথ্যা ব্রেকআউটের ক্ষতি হ্রাস করতে পারে।
স্টপ-অফ-লস (Stop-Off-Loss) পদ্ধতিতে ট্রেন্ডকে নিয়ন্ত্রণ করতে এবং একক ক্ষতি নিয়ন্ত্রণ করতে সহায়তা করে।
কৌশলটি সম্পূর্ণ স্বয়ংক্রিয় ট্রেডিংয়ের জন্য, যা 24 ঘন্টা চলতে পারে, কোনও মানুষের হস্তক্ষেপের প্রয়োজন নেই।
কিছু ক্রিপ্টোকারেন্সির দাম বেসক্রিপ্টোকারেন্সির সাথে বিচ্ছিন্ন হওয়ার সম্ভাবনা রয়েছে, যার ফলে কৌশলটি সঠিকভাবে বাণিজ্য করতে পারে না। একাধিক বেসক্রিপ্টোকারেন্সি গণনা করার জন্য সংশ্লিষ্ট ফ্যাক্টরটি অপ্টিমাইজ করা যেতে পারে, সর্বাধিক সম্পর্কযুক্ত বেসক্রিপ্টোকারেন্সি বেছে নেওয়া যেতে পারে।
বাজারের অস্বাভাবিক অস্থিরতার কারণে স্টপ লস ভেঙে যাওয়ার ঝুঁকি রয়েছে। স্টপ লস অনুপাতটি যথাযথভাবে সামঞ্জস্য করা বা স্টপ ট্র্যাকিং যুক্ত করা যেতে পারে।
একটি স্টপ অনুপাত সেট খুব ছোট হওয়ার ঝুঁকি রয়েছে যার ফলে যথেষ্ট ট্রেন্ডিং লাভ ধরা যায় না। ট্রেন্ড ট্র্যাকিং বা ডায়নামিক স্টপ যোগ করা যায়।
একটি মিথ্যা ব্রেকআউটের ঝুঁকি রয়েছে যার ফলে পজিশন বন্ধ হয়ে যায়। সূচক প্যারামিটারগুলি, সনাক্তকরণগুলি বা পুনরায় প্রবেশের প্রক্রিয়াটি যথাযথভাবে সামঞ্জস্য করা যেতে পারে।
প্রাসঙ্গিকতা বিশ্লেষণ ব্যবহার করে একাধিক বেজ ক্রিপ্টোকারেন্সি নির্বাচন করুন, সূচকগুলিকে সংযুক্ত করুন, একক বেজ মুদ্রার ঝুঁকি হ্রাস করুন।
প্রবণতা ট্র্যাকিং সিস্টেম যোগ করা হয়েছে, স্টপ লস ও স্টপ লস পরিবর্তনশীলতার উপর ভিত্তি করে।
অতিরিক্ত স্তরের ক্ষতি, যাতে চরম পরিস্থিতিতে ক্ষতির সীমা অতিক্রম না হয়।
পুনরায় ভর্তির ব্যবস্থা বাড়ানো, যাতে ক্ষতির পর অনুপস্থিতদের পুনর্বিবেচনা করা যায়।
চিহ্নিতকরণ প্যারামিটার, সনাক্তকরণ সেটিংস, এবং চিহ্নিতকরণের কার্যকারিতা উন্নত করুন।
বিভিন্ন ক্রিপ্টোকারেন্সির জন্য পৃথক অপ্টিমাইজেশান প্যারামিটার, কৌশলগত অভিযোজনযোগ্যতা বাড়ানো।
পজিশন ম্যানেজমেন্ট অপ্টিমাইজ করুন, তহবিলের আকারের উপর ভিত্তি করে পজিশনগুলিকে গতিশীল করুন
এই কৌশলটি সামগ্রিকভাবে একটি প্রচলিত প্রবণতা অনুসরণকারী কৌশল। মূল ধারণাটি হ’ল ওয়াল স্ট্রিট মাউস লুপের সূচকের উপর ভিত্তি করে বেঞ্চমার্ক ক্রিপ্টোকারেন্সির প্রবণতা দিকটি বিচার করা যাতে লক্ষ্যযুক্ত ক্রিপ্টোকারেন্সির ট্রেডিংয়ের দিকটি নির্ধারণ করা যায়। কৌশলটির কিছু সুবিধা রয়েছে তবে কিছু ঝুঁকিও রয়েছে যা সম্পর্কে সতর্ক হওয়া দরকার। প্যারামিটারগুলি ক্রমাগত অনুকূলিতকরণ এবং প্রবণতা ট্র্যাকিং, ঝুঁকি নিয়ন্ত্রণ ইত্যাদির মতো প্রক্রিয়াগুলি যুক্ত করে কৌশলটির স্থিতিশীলতা এবং লাভের হার আরও বাড়ানো যেতে পারে। সামগ্রিকভাবে, এই কৌশলটি ক্রিপ্টোকারেন্সি ট্রেডিংয়ের স্বয়ংক্রিয় পদ্ধতির জন্য ধারণা এবং শিক্ষা প্রদান করে।
/*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)