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


সৃষ্টির তারিখ: 2023-11-06 16:06:55 অবশেষে সংশোধন করুন: 2023-11-06 16:06:55
অনুলিপি: 0 ক্লিকের সংখ্যা: 392

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

সারসংক্ষেপ

এই কৌশলটি ট্রেন্ডের বিপরীত দিকের জন্য K-রেখার মূল পয়েন্টগুলি ব্যবহার করে এবং এটিকে মাল্টি-হাইড ট্রেডিংয়ের সংকেত হিসাবে ব্যবহার করে। লাভজনক হলে, কৌশলটি সেই মাসে অর্জিত উপার্জনকে লক করে দেয় যাতে প্রত্যাহারের সময়টি আরও বড় ক্ষতির কারণ না হয়।

কৌশলগত নীতি

  • ব্যবহারpivothigh()এবংpivotlow()ফাংশনটি K-রেখার কেন্দ্রীয় বিন্দু গণনা করে। কেন্দ্রীয় বিন্দুগুলি প্রবণতা বিপরীতের সিদ্ধান্ত নিতে পারে।
  • যখন দাম ঊর্ধ্বমুখী পয়েন্ট অতিক্রম করে, তখন মাল্টি হেড পজিশন করা। যখন দাম ঊর্ধ্বমুখী পয়েন্ট অতিক্রম করে, তখন শর্ট হেড পজিশন করা।
  • প্রতি মাসের শুরুতে, গত মাসের আয় হিসাব করে, আর এটি একটি অ্যারেতে সংরক্ষণ করে।
  • প্রতি বছরের শুরুতে, গত বছরের আয় হিসাব করে এবং একটি অ্যারেতে সংরক্ষণ করে।
  • প্রতি মাসে এবং বছরে আয় করার জন্য আয়কর টেবিল আঁকুন।

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

  • ট্রেডিং-এর সময়, ট্রেডিং-এর সময়, ট্রেডিং-এর সময়, ট্রেডিং-এর সময়, ট্রেডিং-এর সময়, ট্রেডিং-এর সময়, ট্রেডিং-এর সময়।
  • প্রতি মাসে আয় লক করা, ক্ষতিগ্রস্ত মাসের প্রভাব কমাতে, দ্বি-পোলারাইজড আয়
  • উপার্জন সারণিটি প্রতি মাসে উপার্জনকে স্বজ্ঞাতভাবে দেখায়, যাতে কৌশলটির ভাল এবং খারাপ সময়গুলি স্পষ্টভাবে দেখা যায়।

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

  • যখন মেরু বিন্দু পরিবর্তিত হয়, তখন ভুল বিপরীত খোলার কারণ হতে পারে। আপনি উপযুক্তভাবে প্যারামিটারগুলি অপ্টিমাইজ করতে বা ফিল্টার শর্তগুলি যুক্ত করতে পারেন।
  • মাসের শুরুতে বাধ্যতামূলকভাবে পজিশন খোলার ফলে বাকি মাসের মুনাফা অর্জনের সুযোগ মিস হবে। আপনি কেবলমাত্র কিছু পজিশন লক করার কথা বিবেচনা করতে পারেন।
  • এই টেবিলটি সর্বোচ্চ প্রত্যাহারের মতো ঝুঁকিপূর্ণ সূচকগুলি প্রদর্শন করতে পারে না। অন্যান্য কৌশলগত ঝুঁকি পরিমাপের সূচকগুলি যোগ করার বিষয়টি বিবেচনা করা যেতে পারে।

অনুকূলিতকরণের দিকনির্দেশনা

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

সারসংক্ষেপ

এই কৌশলটি ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেডিংয়ের জন্য ট্রেড

কৌশল সোর্স কোড
/*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)