संसाधन लोड हो रहा है... लोड करना...

क्रॉसओवर चलती औसत पर आधारित अनुकूलन अपेक्षित मूल्य निर्धारण रणनीति के बाद की प्रवृत्ति

लेखक:चाओझांग, दिनांकः 2024-06-17 16:29:02
टैगःएसएमएईएमए

img

अवलोकन

यह रणनीति प्रवृत्ति की दिशा निर्धारित करने के लिए अलग-अलग अवधियों के साथ दो सरल चलती औसत के क्रॉसओवर का उपयोग करती है और जब कोई प्रवृत्ति दिखाई देती है तो ट्रेडों में प्रवेश करती है। साथ ही, रणनीति विभिन्न समय पैमाने पर रणनीति के अपेक्षित रिटर्न की गणना और प्रदर्शित करने के लिए एक अपेक्षित मूल्य पैनल भी पेश करती है, जिससे उपयोगकर्ताओं को रणनीति के प्रदर्शन का बेहतर आकलन करने की अनुमति मिलती है। अपेक्षित मूल्य पैनल में रणनीति की जीत दर, औसत लाभ और ऐतिहासिक अवधियों के दौरान औसत हानि जैसे प्रमुख संकेतकों को ध्यान में रखा जाता है, और विभिन्न बाजार स्थितियों में रणनीति के प्रदर्शन को सहज ज्ञान युक्त तरीके से प्रस्तुत किया जाता है।

रणनीतिक सिद्धांत

इस रणनीति का मूल बाजार के रुझानों को निर्धारित करने के लिए अलग-अलग अवधि (14-दिवसीय और 28-दिवसीय इस उदाहरण में) के साथ दो सरल चलती औसत के क्रॉसओवर का उपयोग करना है। जब अल्पकालिक औसत नीचे से दीर्घकालिक औसत से ऊपर जाता है, तो यह माना जाता है कि बाजार ऊपर की ओर बढ़ रहा है, और रणनीति एक लंबी स्थिति खोलती है। इसके विपरीत, जब अल्पकालिक औसत ऊपर से दीर्घकालिक औसत से नीचे जाता है, तो यह माना जाता है कि बाजार नीचे की ओर बढ़ रहा है, और रणनीति एक छोटी स्थिति खोलती है। इस तरह, रणनीति विभिन्न बाजार के रुझानों के अनुकूल हो सकती है और समय पर स्थिति स्थापित कर सकती है जब रुझान रुझानों द्वारा लाए गए मुनाफे को पकड़ते हैं।

बुनियादी रुझान निर्धारण और व्यापारिक तर्क के अतिरिक्त, रणनीति में विभिन्न समय पैमाने (मासिक और वार्षिक) पर रणनीति के अपेक्षित रिटर्न की गणना और प्रदर्शित करने के लिए अपेक्षित मूल्य पैनल भी पेश किया गया है। अपेक्षित मूल्य की गणना ऐतिहासिक अवधियों के दौरान रणनीति के प्रमुख सांख्यिकीय संकेतकों पर आधारित है, जिनमें शामिल हैंः

  1. जीत दरः समय अवधि में कुल ट्रेडों में लाभदायक ट्रेडों का अनुपात
  2. औसत लाभः समय अवधि में सभी लाभदायक ट्रेडों का औसत लाभ राशि
  3. औसत हानिः समय अवधि में सभी घाटे वाले ट्रेडों की औसत हानि राशि

इन संकेतकों का उपयोग करके उस समय अवधि में रणनीति के अपेक्षित मूल्य की गणना की जा सकती हैः अपेक्षित मूल्य = जीत दर × औसत लाभ - (1 - जीत दर) × औसत हानि

चार्ट पर विभिन्न समय अवधि के अपेक्षित मूल्यों को एक हीटमैप के रूप में प्रदर्शित करके, उपयोगकर्ता विभिन्न बाजार स्थितियों में रणनीति के अपेक्षित प्रदर्शन को एक नज़र में देख सकते हैं, इस प्रकार रणनीति की प्रयोज्यता और जोखिम को बेहतर ढंग से समझ सकते हैं।

लाभ विश्लेषण

  1. रुझानों के प्रति अनुकूलन क्षमताः रुझानों को निर्धारित करने के लिए चलती औसत क्रॉसओवर का उपयोग करके, रणनीति बाजार के परिवर्तनों के अनुकूल विभिन्न बाजार रुझानों के तहत समय पर पदों को समायोजित कर सकती है। यह रणनीति को ट्रेंडिंग बाजारों में अच्छे रिटर्न प्राप्त करने में सक्षम बनाता है।

  2. अंतर्ज्ञानी प्रदर्शन मूल्यांकन: अंतर्निहित अपेक्षित मूल्य पैनल एक हीटमैप के रूप में विभिन्न समय अवधि में रणनीति के अपेक्षित रिटर्न को प्रदर्शित करता है, जिससे उपयोगकर्ताओं को एक नज़र में विभिन्न बाजार स्थितियों में रणनीति के प्रदर्शन का आकलन करने की अनुमति मिलती है। यह दृश्य प्रदर्शन प्रस्तुति उपयोगकर्ताओं को अधिक निर्णय लेने के संदर्भ प्रदान करती है।

  3. मुख्य सांख्यिकीय संकेतकों का विचारः अपेक्षित मूल्य की गणना में न केवल रणनीति की जीत दर पर विचार किया जाता है बल्कि औसत लाभ और औसत हानि के प्रभाव को भी एकीकृत किया जाता है। यह गणना विधि रणनीति के वास्तविक प्रदर्शन को अधिक व्यापक और सटीक रूप से प्रतिबिंबित कर सकती है, जिससे उपयोगकर्ताओं को अधिक विश्वसनीय संदर्भ प्रदान होते हैं।

  4. लचीली पैरामीटर सेटिंग्स: उपयोगकर्ता अपनी आवश्यकताओं के अनुसार अपेक्षित मूल्य पैनल और इसकी पारदर्शिता प्रदर्शित करने के लिए लचीले ढंग से सेट कर सकते हैं। यह उपयोगकर्ताओं को अपनी प्राथमिकताओं के अनुसार चार्ट के प्रदर्शन प्रभाव को समायोजित करने की अनुमति देता है, जिससे उपयोगकर्ता अनुभव में सुधार होता है।

जोखिम विश्लेषण

  1. रेंज-बाउंड बाजारों में खराब प्रदर्शनः चूंकि रणनीति मुख्य रूप से लाभ उत्पन्न करने के लिए रुझानों पर निर्भर करती है, इसलिए रेंज-बाउंड या ट्रेंड-अस्पष्ट बाजार स्थितियों में लगातार व्यापार से महत्वपूर्ण फिसलन और लेनदेन लागत हो सकती है, जो रणनीति के समग्र प्रदर्शन को प्रभावित करती है।

  2. अपेक्षित मूल्य की गणना की सीमाएँ: हालांकि अपेक्षित मूल्य पैनल रणनीति के प्रदर्शन का मूल्यांकन करने का एक सहज तरीका प्रदान करता है, यह अभी भी गणना के लिए ऐतिहासिक डेटा पर आधारित है। जब बाजार में महत्वपूर्ण परिवर्तन होते हैं या चरम स्थितियां उत्पन्न होती हैं, तो ऐतिहासिक डेटा रणनीति के वास्तविक प्रदर्शन को अच्छी तरह से प्रतिबिंबित नहीं कर सकता है, और अपेक्षित मूल्य का संदर्भ मूल्य कम हो सकता है।

  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]


संबंधित

अधिक