চলমান গড় অতিক্রম করার উপর ভিত্তি করে অভিযোজিত প্রত্যাশিত মান মূল্যায়ন কৌশল অনুসরণ করে প্রবণতা

SMA EMA
সৃষ্টির তারিখ: 2024-06-17 16:29:02 অবশেষে সংশোধন করুন: 2024-06-17 16:29:02
অনুলিপি: 2 ক্লিকের সংখ্যা: 580
1
ফোকাস
1617
অনুসারী

চলমান গড় অতিক্রম করার উপর ভিত্তি করে অভিযোজিত প্রত্যাশিত মান মূল্যায়ন কৌশল অনুসরণ করে প্রবণতা

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটির মূল অংশটি হ’ল বাজারের প্রবণতা নির্ধারণের জন্য দুটি ভিন্ন চক্রের সহজ চলমান গড় (এই ক্ষেত্রে 14 এবং 28 দিন) ব্যবহার করা হয়। যখন স্বল্পমেয়াদী গড় নীচে থেকে দীর্ঘমেয়াদী গড়কে অতিক্রম করে, তখন বাজারটি একটি উত্থানের প্রবণতা হিসাবে বিবেচিত হয়, কৌশলটি আরও বেশি পজিশন নেয়; বিপরীতভাবে, যখন স্বল্পমেয়াদী গড় নীচে থেকে দীর্ঘমেয়াদী গড়কে অতিক্রম করে, তখন বাজারটি একটি পতনের প্রবণতা হিসাবে বিবেচিত হয়, কৌশলটি খালি পজিশন নেয়। এইভাবে, কৌশলটি বিভিন্ন বাজারের প্রবণতাগুলির সাথে খাপ খাইয়ে নিতে সক্ষম হয়, যখন প্রবণতা উপস্থিত হয় এবং সময়মতো পজিশন তৈরি করে যাতে প্রবণতা থেকে উপার্জন করা যায়।

মৌলিক প্রবণতা বিচার এবং ট্রেডিং লজিক ছাড়াও, এই কৌশলটি একটি প্রত্যাশিত মান প্যানেল চালু করেছে যা বিভিন্ন সময় স্কেলে (মাসিক এবং বার্ষিক) এই কৌশলটির প্রত্যাশিত আয় গণনা এবং প্রদর্শন করতে ব্যবহৃত হয়। প্রত্যাশিত মান গণনাটি কৌশলটির ঐতিহাসিক সময়ের মধ্যে মূল পরিসংখ্যানের উপর ভিত্তি করে করা হয়, যার মধ্যে রয়েছেঃ

  1. বিজয়ী হারঃ এই সময়ের মধ্যে কৌশলটির মোট লেনদেনের মধ্যে লাভের অনুপাত
  2. গড় মুনাফাঃ এই সময়ের মধ্যে সমস্ত মুনাফাজনক লেনদেনের জন্য কৌশলটির গড় মুনাফা
  3. গড় লোকসানঃ এই সময়কালের মধ্যে কৌশলটি যে পরিমাণ ক্ষতিগ্রস্ত হয়েছে তার গড় লোকসান

এই সূচকগুলি ব্যবহার করে, এই সময়কালের জন্য কৌশলটির প্রত্যাশিত মান গণনা করা যেতে পারেঃ প্রত্যাশিত মান = হার × গড় মুনাফা - (1 - হার) × গড় ক্ষতি

বিভিন্ন সময়কালের জন্য প্রত্যাশিত মানগুলিকে হিটগ্রাফ আকারে চার্টে প্রদর্শন করে, ব্যবহারকারীরা বিভিন্ন বাজার পরিস্থিতিতে কৌশলটির প্রত্যাশিত পারফরম্যান্সের একটি ঝলক দেখতে পারেন, যাতে কৌশলটির প্রযোজ্যতা এবং ঝুঁকিগুলি আরও ভালভাবে বুঝতে পারে।

সামর্থ্য বিশ্লেষণ

  1. প্রবণতা অনুকূলঃ প্রবণতা নির্ধারণের জন্য চলমান গড়ের ক্রস ব্যবহার করে, কৌশলটি বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিতে বিভিন্ন বাজারের প্রবণতাগুলির মধ্যে সময়মতো অবস্থানগুলি সামঞ্জস্য করতে পারে। এটি কৌশলটিকে প্রবণতাযুক্ত বাজারে আরও ভাল আয় করতে সক্ষম করে।

  2. স্বজ্ঞাত পারফরম্যান্স মূল্যায়নঃ অন্তর্নির্মিত প্রত্যাশিত মান প্যানেলটি বিভিন্ন সময়কালের জন্য কৌশলটির প্রত্যাশিত আয়কে হিটগ্রাফ আকারে প্রদর্শন করে, ব্যবহারকারীরা বিভিন্ন বাজার পরিবেশে কৌশলটির কার্যকারিতা মূল্যায়ন করতে সক্ষম হন। এই দৃশ্যমান পারফরম্যান্স উপস্থাপনা ব্যবহারকারীদের আরও সিদ্ধান্তের রেফারেন্স সরবরাহ করে।

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

  4. নমনীয় প্যারামিটার সেটিংঃ ব্যবহারকারীরা প্যানেলের প্রদর্শন বা না প্রদর্শন এবং প্যানেলের স্বচ্ছতার প্রয়োজন অনুসারে নমনীয়তা সেট করতে পারেন। এটি ব্যবহারকারীদের তাদের পছন্দ অনুসারে চার্টগুলির প্রদর্শনকে সামঞ্জস্য করতে এবং ব্যবহারের অভিজ্ঞতা উন্নত করতে সক্ষম করে।

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

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

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

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

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

  1. আরও প্রযুক্তিগত সূচক প্রবর্তন করুনঃ বিদ্যমান চলমান গড়ের উপর ভিত্তি করে, অন্যান্য প্রযুক্তিগত সূচক যেমন এমএসিডি, আরএসআই ইত্যাদি প্রবণতার শক্তি এবং স্থায়িত্বের আরও ভাল বিচার করার জন্য বিবেচনা করা যেতে পারে, যার ফলে কৌশলগুলির প্রবেশ এবং প্রস্থান সময় বাড়ানো যায়।

  2. পজিশন ম্যানেজমেন্ট অপ্টিমাইজ করুনঃ বর্তমান কৌশলটি ট্রেডিং সিগন্যালের সময় স্থির পজিশনের অনুশীলন করে। ঝুঁকি নিয়ন্ত্রণ এবং আয় বাড়ানোর জন্য বাজারের অস্থিরতা, প্রবণতার শক্তি এবং অন্যান্য কারণগুলির উপর ভিত্তি করে পজিশনগুলিকে গতিশীলভাবে সামঞ্জস্য করার বিষয়টি বিবেচনা করা যেতে পারে।

  3. স্টপ-অফ-লস মেকানিজম যুক্ত করুনঃ কৌশলটিতে যুক্তিসঙ্গত স্টপ-অফ-লস মেকানিজম যুক্ত করা কৌশলটিকে ইতিমধ্যে প্রাপ্তিগুলিকে সময়মতো লক করতে সহায়তা করতে পারে এবং সম্ভাব্য ক্ষতির সীমাবদ্ধ করতে পারে। এটি কৌশলটির ঝুঁকি-লাভের অনুপাত বাড়িয়ে তুলতে সহায়তা করে, যাতে এটি বিভিন্ন বাজারের পরিস্থিতিতে তুলনামূলকভাবে স্থিতিশীল থাকতে পারে।

  4. অপ্টিমাইজেশান প্রত্যাশিত মান গণনাঃ আরও অপ্টিমাইজেশান প্রত্যাশিত মান গণনা পদ্ধতি, যেমন লেনদেনের খরচ বিবেচনা, মোবাইল উইন্ডো প্রবর্তন ইত্যাদি, প্রত্যাশিত মান সূচকের কার্যকারিতা এবং ব্যবহারযোগ্যতা বাড়ানোর জন্য। এছাড়াও, অন্যান্য কৌশলগত পারফরম্যান্স মূল্যায়ন সূচকগুলি অনুসন্ধান করা যেতে পারে, যাতে ব্যবহারকারীদের আরও ব্যাপক রেফারেন্স দেওয়া যায়।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ir0nantc2

//@version=5
strategy("Expected Value Panel", overlay=true)

// ロングエントリー条件 / Long entry condition
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

// ショートエントリー条件 / Short entry condition
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)



// ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
// Please copy the code below and paste it into the strategy where you want to display the expected value.
// 以下のコードをコピーして期待値を表示させたいストラテジーに貼り付けて下さい。
// ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

// 表示選択 / Display selection
show_performance = input.bool(true, '期待値ON/OFF (Show Expected Value)', group='Expected Value / ©ir0nantc2')
transparency = input.int(50, '透過度 (Transparency)', minval=0, maxval=100, group='Expected Value / ©ir0nantc2')
prec = 2

// 背景色 / Background color
bg_color(value) =>
    na(value) ? color.new(color.gray, transparency) : value > 0.0 ? color.new(color.green, transparency) :
   value < 0.0 ? color.new(color.red, transparency) :color.new(color.gray, transparency)

// 利益と損失の追跡 / Track profits and losses
var float total_monthly_profit = 0.0
var float total_yearly_profit = 0.0

if show_performance
    new_month = month(time) != month(time[1])
    new_year  = year(time)  != year(time[1])
    cur_month_pnl = 0.0, cur_year_pnl  = 0.0
    eq = strategy.equity
    bar_pnl = eq / eq[1] - 1

    // 月次・年次 期待値 / Monthly & Yearly Expected Value
    cur_month_pnl := new_month ? 0.0 : (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
    cur_year_pnl := new_year ? 0.0 : (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
    
    // 年次および月次期待値を格納 / Store monthly and yearly expected values
    var month_pnl  = array.new_float(), var month_time = array.new_int()
    var year_pnl  = array.new_float(), var year_time = array.new_int()
    
    // 期待値計算の変数 / Variables for expected value calculation
    var month_wins = array.new_int(), var month_losses = array.new_int()
    var month_avg_win = array.new_float(), var month_avg_loss = array.new_float()
    var year_wins = array.new_int(), var year_losses = array.new_int()
    var year_avg_win = array.new_float(), var year_avg_loss = array.new_float()

    // 月次および年次期待値の配列更新 / Update arrays for monthly and yearly expected values
    bool last_computed = false
    if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory))
        if (last_computed and array.size(month_pnl) > 0)
            array.pop(month_pnl), array.pop(month_time)
            array.pop(month_wins), array.pop(month_losses)
            array.pop(month_avg_win), array.pop(month_avg_loss)

        array.push(month_pnl, cur_month_pnl[1]), array.push(month_time, time[1])
        array.push(month_wins, 0), array.push(month_losses, 0)
        array.push(month_avg_win, 0.0), array.push(month_avg_loss, 0.0)
    
    if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory))
        if (last_computed and array.size(year_pnl) > 0)
            array.pop(year_pnl), array.pop(year_time)
            array.pop(year_wins), array.pop(year_losses)
            array.pop(year_avg_win), array.pop(year_avg_loss)

        array.push(year_pnl, cur_year_pnl[1]), array.push(year_time, time[1])
        array.push(year_wins, 0), array.push(year_losses, 0)
        array.push(year_avg_win, 0.0), array.push(year_avg_loss, 0.0)

    last_computed := barstate.islastconfirmedhistory ? true : last_computed

    // 勝ち取引と負け取引を追跡 / Track winning and losing trades
    if (strategy.closedtrades > 0 and na(strategy.closedtrades[1]) == false)
        closed_profit = strategy.netprofit - strategy.netprofit[1]
        if closed_profit > 0
            if array.size(month_wins) > 0
                wins = array.get(month_wins, array.size(month_wins) - 1) + 1
                avg_win = (array.get(month_avg_win, array.size(month_avg_win) - 1) * (wins - 1) + closed_profit) / wins
                array.set(month_wins, array.size(month_wins) - 1, wins)
                array.set(month_avg_win, array.size(month_avg_win) - 1, avg_win)
            if array.size(year_wins) > 0
                wins = array.get(year_wins, array.size(year_wins) - 1) + 1
                avg_win = (array.get(year_avg_win, array.size(year_avg_win) - 1) * (wins - 1) + closed_profit) / wins
                array.set(year_wins, array.size(year_wins) - 1, wins)
                array.set(year_avg_win, array.size(year_avg_win) - 1, avg_win)
        else
            if array.size(month_losses) > 0
                losses = array.get(month_losses, array.size(month_losses) - 1) + 1
                avg_loss = (array.get(month_avg_loss, array.size(month_avg_loss) - 1) * (losses - 1) + closed_profit) / losses
                array.set(month_losses, array.size(month_losses) - 1, losses)
                array.set(month_avg_loss, array.size(month_avg_loss) - 1, avg_loss)
            if array.size(year_losses) > 0
                losses = array.get(year_losses, array.size(year_losses) - 1) + 1
                avg_loss = (array.get(year_avg_loss, array.size(year_avg_loss) - 1) * (losses - 1) + closed_profit) / losses
                array.set(year_losses, array.size(year_losses) - 1, losses)
                array.set(year_avg_loss, array.size(year_avg_loss) - 1, avg_loss)

    // 月次テーブル / Monthly table
    var monthly_table = table(na)
    if (barstate.islastconfirmedhistory)
        monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_time) + 1, border_width = 1)
        table.cell(monthly_table, 0,  0, "",     bgcolor = #bbbbbb00)
        table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 5,  0, "May",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #bbbbbb)
        table.cell(monthly_table, 13, 0, "Year", bgcolor = #bbbbbb)
    
        // 年次データの集計 / Collecting yearly data
        var year_total_pnl = array.new_float()
        var year_exp_val = array.new_float()
        
        for yt = 0 to array.size(year_time) - 1
            total_year_wins = 0, total_year_losses = 0
            total_year_avg_win = 0.0, total_year_avg_loss = 0.0
            total_year_pnl = 0.0

            for mt = 1 to 12
                idx = -1
                for j = 0 to array.size(month_time) - 1
                    if year(array.get(month_time, j)) == year(array.get(year_time, yt)) and month(array.get(month_time, j)) == mt
                        idx := j
                        break
                if idx != -1
                    total_year_pnl := total_year_pnl + array.get(month_pnl, idx)
                    total_year_wins := total_year_wins + array.get(month_wins, idx)
                    total_year_losses := total_year_losses + array.get(month_losses, idx)
                    total_year_avg_win := total_year_avg_win + (array.get(month_avg_win, idx) * array.get(month_wins, idx))
                    total_year_avg_loss := total_year_avg_loss + (array.get(month_avg_loss, idx) * array.get(month_losses, idx))
            
            total_year_avg_win := total_year_wins > 0 ? total_year_avg_win / total_year_wins : 0.0
            total_year_avg_loss := total_year_losses > 0 ? total_year_avg_loss / total_year_losses : 0.0
            win_rate = total_year_wins + total_year_losses > 0 ? total_year_wins / (total_year_wins + total_year_losses) : na
            exp_val = win_rate ? (win_rate * total_year_avg_win) - ((1 - win_rate) * math.abs(total_year_avg_loss)) : na
            array.push(year_total_pnl, total_year_pnl)
            array.push(year_exp_val, exp_val)
            
        for yt = 0 to array.size(year_time) - 1
            table.cell(monthly_table, 0,  yt + 1, str.tostring(year(array.get(year_time, yt))), bgcolor = #bbbbbb)
            
            y_color = bg_color(array.get(year_exp_val, yt))
            value_to_display = na(array.get(year_exp_val, yt)) ? "" : str.tostring(math.round(array.get(year_exp_val, yt) * 100, prec))
            table.cell(monthly_table, 13, yt + 1, value_to_display, bgcolor = y_color, text_color=color.new(color.white, 0))
            
        for mt = 0 to array.size(month_time) - 1
            m_row = year(array.get(month_time, mt)) - year(array.get(year_time, 0)) + 1
            m_col = month(array.get(month_time, mt))
            
            if array.size(month_wins) > mt and array.size(month_losses) > mt and array.size(month_avg_win) > mt and array.size(month_avg_loss) > mt
                win_rate = array.get(month_wins, mt) / (array.get(month_wins, mt) + array.get(month_losses, mt))
                exp_val = (win_rate * array.get(month_avg_win, mt)) - ((1 - win_rate) * math.abs(array.get(month_avg_loss, mt)))
                m_color = bg_color(exp_val)
                value_to_display = na(exp_val) ? "" : str.tostring(math.round(exp_val * 100, prec))
                table.cell(monthly_table, m_col, m_row, value_to_display, bgcolor = m_color, text_color=color.new(color.white, 0))
            else
                table.cell(monthly_table, m_col, m_row, "", bgcolor = color.new(color.gray, transparency), text_color=color.new(color.white, 0))
// [EOF]