বি-পোলার মাসিক রিটার্ন কৌশল

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

img

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

##এটা কিভাবে কাজ করে

  • ব্যবহারpivothigh()এবংpivotlow()প্রবণতা বিপরীত হওয়ার ইঙ্গিত দেয় এমন পিভট পয়েন্ট গণনা করতে।
  • যখন দাম পিভট হাইয়ের উপরে যায় তখন লং হয়। যখন দাম পিভট নিচের দিকে যায় তখন শর্ট হয়।
  • প্রতি মাসের শুরুতে মাসিক রিটার্ন গণনা করে এবং অ্যারেতে সংরক্ষণ করে।
  • প্রতি বছরের শুরুতে বার্ষিক রিটার্ন গণনা করে এবং অ্যারেতে সংরক্ষণ করে।
  • মাসিক এবং বার্ষিক কর্মক্ষমতা স্বজ্ঞাতভাবে দেখার জন্য রিটার্নের টেবিল আঁকে।

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

  • পিভট পয়েন্ট কিছু মিথ্যা বিপরীত সংকেত ফিল্টার করে।
  • মাসিক মুনাফা বন্ধ করে দেওয়া হচ্ছে, এতে মাসিক ক্ষতির প্রভাব কমবে।
  • রিটার্ন টেবিল কর্মক্ষমতা প্রবণতা স্পষ্টভাবে দেখায়।

##ঝুঁকি বিশ্লেষণ

  • পিভট পরিবর্তন হতে পারে, ভুল বিপরীত এন্ট্রি সৃষ্টি করতে পারে। প্যারাম অপ্টিমাইজ করতে পারেন বা ফিল্টার যোগ করতে পারেন।
  • বাধ্যতামূলক মাসিক বন্ধ আরও লাভ হারাবে। আংশিক অবস্থান বন্ধ বিবেচনা করুন।
  • টেবিলে সর্বোচ্চ ড্রাউনডাউন এবং ঝুঁকি পরিমাপ নেই। আরও পরিমাপ যোগ করুন।

##অপ্টিমাইজেশান নির্দেশাবলী

  • ঘন ঘন অকার্যকর বিপরীতগুলি এড়াতে পিভটগুলির কাছে ফিল্টার যুক্ত করুন।
  • হারানো সুযোগ কমাতে পূর্ণ অবস্থানের পরিবর্তে আংশিক বন্ধ করুন।
  • পরিমাণগত ঝুঁকি পরিমাপ যোগ করুন যেমন সর্বোচ্চ ড্রডাউন, শার্প রেসিও।

##সংক্ষিপ্তসার এই কৌশলটি পিভট পয়েন্টগুলিতে বিপরীতমুখী ট্রেড করে এবং ড্রডাউনগুলি নিয়ন্ত্রণ করতে মাসিক মুনাফা লক করে। তবে আরও সঠিক সংকেত এবং শক্তিশালী ঝুঁকি পরিচালনার জন্য কিছু পরামিতি এবং যুক্তি উন্নত করা যেতে পারে। স্বজ্ঞাত রিটার্ন টেবিল বিশ্লেষণকে সহায়তা করে। সামগ্রিকভাবে, এই কৌশলটির যোগ্যতা রয়েছে তবে লাইভ ট্রেডিংয়ের জন্য সতর্ক মূল্যায়ন প্রয়োজন।


/*backtest
start: 2022-11-05 00:00:00
end: 2023-03-23 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Monthly Returns in PineScript Strategies", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 25, calc_on_every_tick = true, commission_type = strategy.commission.percent, commission_value = 0.1)

// Inputs 
leftBars  = input(2)
rightBars = input(1)
prec      = input(2, title = "Return Precision")

// Pivot Points 
swh = pivothigh(leftBars, rightBars)
swl = pivotlow(leftBars, rightBars)

hprice = 0.0
hprice := not na(swh) ? swh : hprice[1]

lprice = 0.0
lprice := not na(swl) ? swl : lprice[1]

le = false
le := not na(swh) ? true : (le[1] and high > hprice ? false : le[1])

se = false
se := not na(swl) ? true : (se[1] and low < lprice ? false : se[1])

if (le)
	strategy.entry("PivRevLE", strategy.long, comment="PivRevLE", stop=hprice + syminfo.mintick)

if (se)
	strategy.entry("PivRevSE", strategy.short, comment="PivRevSE", stop=lprice - syminfo.mintick)

plot(hprice, color = color.green, linewidth = 2)
plot(lprice, color = color.red,   linewidth = 2)

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

cur_month_pnl = 0.0
cur_year_pnl  = 0.0

// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 : 
                 (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 

// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 : 
                 (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  

// Arrays to store Yearly and Monthly P&Ls
var month_pnl  = array.new_float(0)
var month_time = array.new_int(0)

var year_pnl  = array.new_float(0)
var year_time = array.new_int(0)

if (not na(cur_month_pnl[1]) and (new_month or barstate.islast))
    array.push(month_pnl , cur_month_pnl[1])
    array.push(month_time, time[1])

if (not na(cur_year_pnl[1]) and (new_year or barstate.islast))
    array.push(year_pnl , cur_year_pnl[1])
    array.push(year_time, time[1])

// Monthly P&L Table    
var monthly_table = table(na)

if (barstate.islast)
    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, tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
        
        y_color = array.get(year_pnl, yi) > 0 ? color.new(color.green, transp = 50) : color.new(color.red, transp = 50)
        table.cell(monthly_table, 13, yi + 1, tostring(round(array.get(year_pnl, yi) * 100, prec)), 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 = array.get(month_pnl, mi) > 0 ? color.new(color.green, transp = 70) : color.new(color.red, transp = 70)
        
        table.cell(monthly_table, m_col, m_row, tostring(round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color)

আরো