টাইমিং পারফরম্যান্স বিশ্লেষণ সুপারট্রেন্ড অপ্টিমাইজেশন কৌশল

ATR supertrend Profit Factor Winrate Performance Analytics Strategy Optimization
সৃষ্টির তারিখ: 2025-07-25 13:30:18 অবশেষে সংশোধন করুন: 2025-07-25 13:30:18
অনুলিপি: 2 ক্লিকের সংখ্যা: 280
2
ফোকাস
319
অনুসারী

টাইমিং পারফরম্যান্স বিশ্লেষণ সুপারট্রেন্ড অপ্টিমাইজেশন কৌশল টাইমিং পারফরম্যান্স বিশ্লেষণ সুপারট্রেন্ড অপ্টিমাইজেশন কৌশল

ওভারভিউ

এই কৌশলটি একটি সুপারট্রেন্ড সূচক-ভিত্তিক ট্রেডিং সিস্টেম যা একটি বিস্তৃত তারিখের পারফরম্যান্স বিশ্লেষণ কাঠামোর সাথে মিলিত হয় যা বিভিন্ন সময়কালের মধ্যে কৌশলটির কার্যকারিতা ট্র্যাক এবং বিশ্লেষণ করতে সক্ষম। এটি ATR (অর্ধ-বাস্তব তরঙ্গদৈর্ঘ্য) এবং সুপারট্রেন্ড সূচকগুলির মাধ্যমে ট্রেডিং সংকেত তৈরি করে, পাশাপাশি একটি শক্তিশালী পারফরম্যান্স বিশ্লেষণ সরঞ্জাম রয়েছে যা প্রতি সপ্তাহের বিভিন্ন ট্রেডিং দিন এবং প্রতি মাসের বিভিন্ন তারিখের ট্রেডিং কার্যকারিতা সম্পর্কে পরিসংখ্যানগত বিশ্লেষণ করতে পারে, ব্যবসায়ীদের ডেটা-চালিত সিদ্ধান্ত গ্রহণের সহায়তা করে, সেরা ট্রেডিং সময় এবং অপ্টিমাইজড ট্রেডিং কৌশল সনাক্ত করতে সহায়তা করে।

কৌশল নীতি

এই কৌশলটির কেন্দ্রবিন্দুতে দুটি অংশ রয়েছেঃ একটি ট্রেডিং সিগন্যাল জেনারেটর এবং একটি পারফরম্যান্স অ্যানালিটিক্স সিস্টেম।

  1. ট্রেডিং সিগন্যাল জেনারেটর

    • সুপারট্রেন্ড সূচকের উপর ভিত্তি করে প্রবেশের সংকেত তৈরি করা
    • সুপারট্রেন্ড একটি ট্রেন্ড ট্র্যাকিং সূচক যা এটিআর এবং কাস্টম ফ্যাক্টর গণনাকে একত্রিত করে
    • যখন সুপারট্রেন্ড সূচকটির দিক পরিবর্তন হয় তখন ট্রেডিং সিগন্যাল ট্রিগার করে
    • যখন দিকটি নেতিবাচক থেকে সঠিক হয়, তখন একাধিক অপারেশন করা হয়
    • ধনাত্মক থেকে নেতিবাচক পাল্টা যখন, ফাঁকা অপারেশন সঞ্চালন
  2. পারফরম্যান্স বিশ্লেষণ সিস্টেম

    • একটি ডেটা স্ট্রাকচার (DayStats) তৈরি করা হয়েছে যাতে প্রতিটি ট্রেডিং দিনের পরিসংখ্যান রেকর্ড করা যায়
    • ট্র্যাকিং মেট্রিক্সের মধ্যে রয়েছেঃ জয়/ক্ষতি লেনদেনের সংখ্যা, মোট মুনাফা, মোট ক্ষতি
    • পরিপক্ক সূচক গণনা করুনঃ নিট মুনাফা, মুনাফা ফ্যাক্টর, বিজয়ী হার
    • পারফরম্যান্স সূচকগুলি সপ্তাহে সাত দিন (সোমবার থেকে রবিবার)
    • একই সময়ে, প্রতি মাসের ১-৩১ তারিখের লেনদেনের উপর নজর রাখা
    • পারফরম্যান্স ডেটা, বিভিন্ন রঙের লোগো সহ, টেবিল ভিজ্যুয়ালাইজেশনের মাধ্যমে প্রদর্শিত হয়

এই কৌশলটি পাইন স্ক্রিপ্টের অবজেক্ট-ভিত্তিক বৈশিষ্ট্যগুলি ব্যবহার করে, ডেস্ট্যাটস ক্লাস তৈরি করে যাতে লেনদেনের পরিসংখ্যান সংরক্ষণ এবং আপডেট করা যায়, যাতে কার্যকর ডেটা পরিচালনা এবং গণনা করা যায়। আপডেট_অল_স্ট্যাটস () ফাংশন দ্বারা প্রতিটি লেনদেনের শেষে সম্পর্কিত পরিসংখ্যান আপডেট করা হয়, যাতে পারফরম্যান্স ডেটা রিয়েল-টাইমে সর্বশেষ লেনদেনের ফলাফলকে প্রতিফলিত করে।

কৌশলগত সুবিধা

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

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

  3. ঝুঁকি ব্যবস্থাপনাঐতিহাসিক দুর্বল ট্রেডিং দিনগুলি চিহ্নিত করে, ব্যবসায়ীরা এই দিনগুলিতে ট্রেডিং এড়াতে বা তাদের অবস্থানের আকার পরিবর্তন করতে পারেন, যা সিস্টেমিক ঝুঁকি হ্রাস করতে পারে।

  4. দৃশ্যমান কর্মক্ষমতা প্রদর্শন: কৌশল অন্তর্নির্মিত টেবিল প্রদর্শন ফাংশনটি বিভিন্ন সময়কালের জন্য ট্রেডিং পারফরম্যান্সকে স্বজ্ঞাতভাবে উপস্থাপন করে, বিভিন্ন রঙের লভ্যাংশের অবস্থা চিহ্নিত করে, যাতে ব্যবসায়ীরা কৌশলটির পারফরম্যান্সকে এক নজরে বুঝতে পারে।

  5. কাস্টমাইজডকৌশলটি একাধিক ইনপুট প্যারামিটার সরবরাহ করে, যার মধ্যে রয়েছে এটিআর চক্র, সুপারট্রেন্ড ফ্যাক্টর, টেবিলের অবস্থান এবং রঙের সেটিংস, যা ব্যবসায়ীদের ব্যক্তিগত পছন্দ এবং বাজারের বৈশিষ্ট্য অনুসারে সামঞ্জস্য করতে দেয়।

  6. নমনীয় সমন্বয়: পারফরম্যান্স অ্যানালিটিক্স অংশের কোডটি অন্যান্য ট্রেডিং কৌশলগুলির সাথে সহজেই একীভূত করার জন্য ডিজাইন করা হয়েছে, কৌশলগুলির ব্যবহারযোগ্যতা এবং স্কেলযোগ্যতা বাড়িয়ে তোলে।

কৌশলগত ঝুঁকি

  1. নমুনা তথ্যের অভাব: কম ট্রেডিং নমুনার ক্ষেত্রে, কিছু তারিখের পরিসংখ্যানগত ফলাফলগুলি পরিসংখ্যানগতভাবে উল্লেখযোগ্য নাও হতে পারে এবং এই সীমিত তথ্যের উপর ভিত্তি করে নেওয়া সিদ্ধান্তগুলি ভুল অপ্টিমাইজেশনের দিকে পরিচালিত করতে পারে। সমাধানটি হ’ল পরিসংখ্যানগত নির্ভরযোগ্যতা বাড়ানোর জন্য পর্যাপ্ত পরিমাণে পুনরাবৃত্তি চক্র নিশ্চিত করা এবং আরও বেশি ট্রেডিং নমুনা পাওয়া।

  2. অতিরিক্ত ফিট হওয়ার ঝুঁকি: নির্দিষ্ট তারিখের উপর অত্যধিক নির্ভরশীল ঐতিহাসিক পারফরম্যান্সের ফলে কৌশলটি ঐতিহাসিক তথ্যের উপর অত্যধিক ফিট হতে পারে, এবং ভবিষ্যতে বাজারের পরিবেশ পরিবর্তনের সময় এটি কার্যকর হয় না। ব্যবসায়ীরা সময় বিশ্লেষণকে রেফারেন্স ফ্যাক্টর হিসাবে ব্যবহার করতে হবে, একমাত্র সিদ্ধান্তের ভিত্তিতে নয়, এবং পর্যায়ক্রমে বিশ্লেষণের ফলাফলের স্থিতিশীলতা যাচাই করতে হবে।

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

  4. রিসোর্স খরচ গণনা

  5. মৌসুমী প্রভাব: কিছু বাজারে মৌসুমী নিয়মাবলী বিদ্যমান, কেবলমাত্র সাপ্তাহিক বা মাসিক তারিখের বিশ্লেষণের ভিত্তিতে আরও দীর্ঘ সময়ের মৌসুমী প্রভাবগুলি উপেক্ষা করা যেতে পারে। আরও দীর্ঘ সময়ের ধরণগুলি ধরার জন্য ত্রৈমাসিক বা বার্ষিক স্তরের বিশ্লেষণ যুক্ত করার বিষয়টি বিবেচনা করা যেতে পারে।

কৌশল অপ্টিমাইজেশনের দিকনির্দেশনা

  1. মাল্টিপল টাইম ফ্রেম বিশ্লেষণ: বর্তমান কৌশলটি শুধুমাত্র একটি একক সময় ফ্রেমের মধ্যে পারফরম্যান্স বিশ্লেষণ করে। এটি একাধিক সময় ফ্রেমের ট্রেডিং পারফরম্যান্স বিশ্লেষণের জন্য প্রসারিত করা যেতে পারে, যেমন একই সময়ে ডে লাইন, 4 ঘন্টা লাইন এবং 1 ঘন্টা লাইনের পারফরম্যান্সের পার্থক্য, আরও ব্যাপক সময় মাত্রার অন্তর্দৃষ্টি পেতে।

  2. বাজার শর্তাবলী শ্রেণীবিভাগ বৃদ্ধি: পারফরম্যান্স বিশ্লেষণে বাজার শর্তের শ্রেণিবিন্যাস অন্তর্ভুক্ত করা, যেমন ট্রেন্ডিং বাজার এবং ঝড়ের বাজারগুলির মধ্যে পারফরম্যান্স বা উচ্চ ও কম ওঠানামা পরিবেশের মধ্যে পার্থক্য, নির্দিষ্ট বাজারের পরিবেশে কৌশলগুলির সুবিধা এবং অসুবিধা আবিষ্কার করতে সহায়তা করে।

  3. সিগন্যাল মানের রেটিং সিস্টেমসিগন্যাল কোয়ালিটি রেটিং সিস্টেম চালু করা হয়েছে, প্রযুক্তিগত সূচকগুলির সামঞ্জস্য, মূল্য কাঠামো, পরিমাণ নিশ্চিতকরণ ইত্যাদির উপর ভিত্তি করে প্রতিটি লেনদেনের সংকেতকে রেট দেওয়া হয়েছে এবং পারফরম্যান্স বিশ্লেষণে সংকেত মানের মাত্রা অন্তর্ভুক্ত করা হয়েছে, যা উচ্চ মানের সংকেতের বৈশিষ্ট্যগুলি সনাক্ত করতে সহায়তা করে।

  4. স্বনির্ধারিত প্যারামিটার অপ্টিমাইজেশন: সুপারট্রেন্ডের ATR চক্র এবং ফ্যাক্টর প্যারামিটারগুলিকে ঐতিহাসিক পারফরম্যান্স ডেটার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করা, যাতে কৌশলটি বিভিন্ন বাজার অবস্থার পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে, কৌশলটির অভিযোজনযোগ্যতা এবং স্থিতিশীলতা বাড়ায়।

  5. অর্থনৈতিক ক্যালেন্ডারের তথ্য একত্রিত করা: গুরুত্বপূর্ণ অর্থনৈতিক তথ্য প্রকাশ, কেন্দ্রীয় ব্যাংকের সিদ্ধান্ত ইত্যাদি ইভেন্টের তথ্যকে পারফরম্যান্স বিশ্লেষণে সংহত করা, নির্দিষ্ট অর্থনৈতিক ইভেন্টের আগে এবং পরে লেনদেনের পারফরম্যান্সের নিয়মগুলি অধ্যয়ন করা, ব্যবসায়ীদের ইভেন্ট-চালিত সিদ্ধান্ত গ্রহণের সহায়তা প্রদান করা।

  6. পরিসংখ্যানের সম্প্রসারণ: সর্বাধিক ধারাবাহিক মুনাফা/ক্ষতির সংখ্যা, গড় লাভ-ক্ষতির অনুপাত, শার্প অনুপাত ইত্যাদির মতো আরও পরিসংখ্যান যোগ করা হয়েছে, যা আরও গভীরতর পারফরম্যান্সের মূল্যায়ন করে এবং ব্যবসায়ীদের কৌশলগত বৈশিষ্ট্য সম্পর্কে আরও বিস্তৃতভাবে বুঝতে সহায়তা করে।

  7. মেশিন লার্নিং প্যাটার্ন সনাক্তকরণ: সহজ মেশিন লার্নিং অ্যালগরিদমের প্রবর্তন, যা ঐতিহাসিক পারফরম্যান্স ডেটা থেকে স্বয়ংক্রিয়ভাবে সম্ভাব্য সময় প্যাটার্ন এবং নিয়মগুলি সনাক্ত করে, ভবিষ্যতে ট্রেডিং দিনের সম্ভাব্য পারফরম্যান্সের পূর্বাভাস দেয় এবং ট্রেডিং সিদ্ধান্তের জন্য ভবিষ্যদ্বাণীমূলক নির্দেশিকা প্রদান করে।

সারসংক্ষেপ

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

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

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

কৌশল সোর্স কোড
/*backtest
start: 2024-07-25 00:00:00
end: 2025-07-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Daily Performance Analysis [Mr_Rakun]", overlay=true)

atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[st, direction] = ta.supertrend(factor, atrPeriod)

if ta.change(direction) < 0
    strategy.entry("My Long Entry Id", strategy.long)

if ta.change(direction) > 0
    strategy.entry("My Short Entry Id", strategy.short)

plot(st, title="SuperTrend", color=st < close ? color.green : color.red, linewidth=2)

//-------------------------------------------------------------
// Copy the rest of this line and add it to your own strategy.

// Daily Performance
type DayStats
    int wins = 0
    int losses = 0
    float gross_profit = 0.0
    float gross_loss = 0.0

update(DayStats ds, float profit) =>
    if profit > 0
        ds.wins += 1
        ds.gross_profit += profit
    else
        ds.losses += 1
        ds.gross_loss += math.abs(profit)

net_profit(DayStats ds) => ds.gross_profit - ds.gross_loss
profit_factor(DayStats ds) => ds.gross_loss > 0 ? ds.gross_profit / ds.gross_loss : na
winrate(DayStats ds) =>
    total = ds.wins + ds.losses
    total > 0 ? (ds.wins / total) * 100 : na

// ================== GLOBAL OBJECTS ==================

var DayStats monday    = DayStats.new()
var DayStats tuesday   = DayStats.new()
var DayStats wednesday = DayStats.new()
var DayStats thursday  = DayStats.new()
var DayStats friday    = DayStats.new()
var DayStats saturday  = DayStats.new()
var DayStats sunday    = DayStats.new()
var array<DayStats> monthStats = array.new<DayStats>()

// ================== UPDATE METHOD ==================
update_all_stats() =>
    if barstate.isfirst
        for i = 0 to 30
            array.push(monthStats, DayStats.new())

    if strategy.closedtrades > strategy.closedtrades[1]
        idx = strategy.closedtrades - 1
        profit = strategy.closedtrades.profit(idx)
        poz_time = strategy.closedtrades.entry_time(idx)
        dom = dayofmonth(poz_time)
        day = dayofweek(poz_time)

        DayStats day_stats = switch day
            dayofweek.sunday    => sunday
            dayofweek.monday    => monday
            dayofweek.tuesday   => tuesday
            dayofweek.wednesday => wednesday
            dayofweek.thursday  => thursday
            dayofweek.friday    => friday
            dayofweek.saturday  => saturday

        if na(day_stats) == false
            update(day_stats, profit)

        if dom >= 1 and dom <= 31
            DayStats mstats = array.get(monthStats, dom - 1)
            update(mstats, profit)
        day_stats

update_all_stats()

 
// Table positioning inputs
weekly_position = input.string("Top Center", "Weekly Table Position", 
     options=["Top Left", "Top Center", "Top Right", "Middle Left", "Middle Center", "Middle Right", "Bottom Left", "Bottom Center", "Bottom Right"])
monthly_position = input.string("Top Right", "Monthly Table Position", 
     options=["Top Left", "Top Center", "Top Right", "Middle Left", "Middle Center", "Middle Right", "Bottom Left", "Bottom Center", "Bottom Right"])

// Color inputs
header_bg_color = input.color(color.gray, "Header Background Color")
profit_color = input.color(color.lime, "Profit Color")
loss_color = input.color(color.red, "Loss Color")
neutral_color = input.color(color.gray, "Neutral Color")
row_bg_color = input.color(color.new(color.gray, 60), "Row Background Color")

// Function to get table position
get_table_position(string pos) =>
    switch pos
        "Top Left" => position.top_left
        "Top Center" => position.top_center
        "Top Right" => position.top_right
        "Middle Left" => position.middle_left
        "Middle Center" => position.middle_center
        "Middle Right" => position.middle_right
        "Bottom Left" => position.bottom_left
        "Bottom Center" => position.bottom_center
        "Bottom Right" => position.bottom_right
        => position.top_center

// TABLE PRINTING 
draw_table_headers(table weekly, table monthly) =>
    table.cell(weekly, 0, 0, "DAY",          text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 1, 0, "W/L (Count)",  text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 2, 0, "NET PROFIT",   text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 3, 0, "PROFIT FACTOR",text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(weekly, 4, 0, "WINRATE",      text_color=color.white, text_size=size.small, bgcolor = header_bg_color)

    table.cell(monthly, 0, 0, "DAY",          text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 1, 0, "W/L (Count)",  text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 2, 0, "NET PROFIT",   text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 3, 0, "PROFIT FACTOR",text_color=color.white, text_size=size.small, bgcolor = header_bg_color)
    table.cell(monthly, 4, 0, "WINRATE",      text_color=color.white, text_size=size.small, bgcolor = header_bg_color)

fill_weekly_row(table tbl, int row, string day_name, DayStats ds) =>
    net_p = net_profit(ds)
    pf = profit_factor(ds)
    wr = winrate(ds)
    status_color = net_p > 0 ? profit_color: (net_p < 0 ? loss_color : neutral_color)

    table.cell(tbl, 0, row, day_name, text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 1, row, str.tostring(ds.wins) + "/" + str.tostring(ds.losses), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 2, row, str.tostring(net_p, '#,###.##'), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 3, row, str.tostring(pf, '0.00'), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)
    table.cell(tbl, 4, row, str.tostring(wr, format.percent), text_color=status_color, text_size=size.small, bgcolor = row_bg_color)

fill_monthly_row(table tbl, int row, int day, DayStats ds) =>
    net_p = net_profit(ds)
    pf = profit_factor(ds)
    wr = winrate(ds)
    status_color = net_p > 0 ? profit_color : (net_p < 0 ? loss_color : neutral_color)

    table.cell(tbl, 0, row, str.tostring(day), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 1, row, str.tostring(ds.wins) + "/" + str.tostring(ds.losses), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 2, row, str.tostring(net_p, '#,###.##'), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 3, row, str.tostring(pf, '0.00'), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)
    table.cell(tbl, 4, row, str.tostring(wr, format.percent), text_color=status_color, bgcolor=row_bg_color, text_size=size.tiny)

var table weekly_table = table.new(get_table_position(weekly_position), 5, 8)
var table monthly_table = table.new(get_table_position(monthly_position), 5, 32)

if barstate.isconfirmed
    draw_table_headers(weekly_table, monthly_table)

    fill_weekly_row(weekly_table, 1, "MON", monday)
    fill_weekly_row(weekly_table, 2, "TUE", tuesday)
    fill_weekly_row(weekly_table, 3, "WED", wednesday)
    fill_weekly_row(weekly_table, 4, "THU", thursday)
    fill_weekly_row(weekly_table, 5, "FRI", friday)
    fill_weekly_row(weekly_table, 6, "SAT", saturday)
    fill_weekly_row(weekly_table, 7, "SUN", sunday)

    for i = 0 to 30
        DayStats ms = array.get(monthStats, i)
        if ms.wins + ms.losses > 0
            fill_monthly_row(monthly_table, i + 1, i + 1, ms)