गोल्डन क्रॉस और डेथ क्रॉस डबल मूविंग एवरेज ट्रेडिंग रणनीति


निर्माण तिथि: 2023-12-01 14:36:33 अंत में संशोधित करें: 2023-12-01 14:36:33
कॉपी: 9 क्लिक्स: 614
1
ध्यान केंद्रित करना
1619
समर्थक

गोल्डन क्रॉस और डेथ क्रॉस डबल मूविंग एवरेज ट्रेडिंग रणनीति

अवलोकन

द्वि-रेखा ट्रेडिंग रणनीति विभिन्न चक्रों के सूचकांक चलती औसत की गणना करके व्यापारिक संकेत उत्पन्न करती है, जिससे तेज और धीमी रेखाएं बनती हैं, और उनके गोल्डफोर्क और डेडफोर्क के रूपों को देखते हैं। जब तेज रेखा नीचे से धीमी रेखा को पार करती है, तो अधिक करें; जब तेज रेखा ऊपर से नीचे से धीमी रेखा को पार करती है, तो शून्य करें। यह रणनीति एक समान रेखा के रुझान को उलटने के बिंदु को पकड़ती है, एक अधिक सामान्य प्रवृत्ति ट्रैकिंग रणनीति।

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

द्विआधारी ट्रेडिंग रणनीतियों के लिए मुख्य संकेतकों की गणना की जाती है। त्वरित रेखाएं संकेतक चलती औसत को इंगित करती हैं, जो 12 दिनों की अवधि के लिए डिफ़ॉल्ट है। धीमी रेखाएं संकेतक चलती औसत को इंगित करती हैं, जो 26 दिनों की अवधि के लिए डिफ़ॉल्ट है। संकेतक चलती औसत की गणना करने के लिए सूत्र हैः

EMA(t) = (C(t) - EMA(t-1)) * SF + EMA(t-1)

इसमें, C (t) दिन के समापन मूल्य के लिए है, और SF (smoothing factor) समतल कारक के लिए है। इंडेक्सल मूविंग एवरेज सामान्य अंकगणित मूविंग एवरेज से अलग है, इंडेक्सल मूविंग एवरेज हाल के डेटा को अधिक वजन देता है और कीमत में बदलाव के लिए अधिक तेज़ी से प्रतिक्रिया करता है।

द्वि-समान-रेखा रणनीतियों के व्यापारिक नियम इस प्रकार हैं:

  • जब तेज रेखा नीचे से धीमी रेखा को पार करती है, तो गोल्डन क्रॉस गोल्डन फोर्क बनता है, जो अधिक प्रवेश करता है;
  • जब तेज रेखा ऊपर से नीचे से धीमी रेखा को पार करती है, तो एक मृत क्रॉस का गठन होता है, जो प्रवेश के लिए खाली होता है;
  • जब तेज और धीमी रेखाएं अलग हो जाती हैं, तो प्लेइंग इलेवन छोड़ देता है।

कैप्चर और मॉनिटरिंग मार्जिन के क्रॉसिंग के माध्यम से, बाजार में आपूर्ति और मांग के संबंधों और रुझानों में बदलाव के लिए समय पर प्रतिक्रिया दें, लाभप्रदता प्राप्त करें।

श्रेष्ठता विश्लेषण

एक अधिक परिपक्व तकनीकी सूचक रणनीति के रूप में द्वि-समान-लाइन ट्रेडिंग रणनीति के निम्नलिखित फायदे हैंः

  1. यह स्पष्ट है, समझने में आसान है और इसे लागू किया जा सकता है।
  2. बाजार में मांग और आपूर्ति के संबंध में सटीक निर्णय, उच्च जीत दर;
  3. बाजार के शोर को प्रभावी ढंग से फ़िल्टर करें और प्रमुख रुझानों को पकड़ें।
  4. विभिन्न बाजारों और समय-सीमाओं में लागू किया जा सकता है;
  5. अन्य तकनीकी संकेतकों के साथ संयोजन, रणनीतियों को समृद्ध करने के लिए;
  6. उच्च वित्त पोषण दर, बड़ी पूंजी की आवश्यकता के अनुरूप।

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

द्वि-प्लस ट्रेडिंग रणनीतियों में कुछ कमियां और जोखिम भी हैं:

  1. इस तरह की घटनाओं के साथ सामना करने में असमर्थता, जैसे कि तेजी से भालू बाजार;
  2. यह भी कहा गया है कि यह “असामान्य रूप से कम समय के लिए है” और यह “असामान्य रूप से कम समय के लिए है”।
  3. विभिन्न नस्लों और समय चक्रों के लिए पैरामीटर को अनुकूलित करने की आवश्यकता;
  4. यह भी कहा गया है कि यह एक “विचारणीय स्थिति” है जहां रुझानों को बदला जा सकता है

उपरोक्त जोखिमों के लिए, औसत चक्र पैरामीटर को समायोजित करने, अतिरिक्त फ़िल्टर को लागू करने और अन्य तरीकों से अनुकूलित किया जा सकता है, ताकि रणनीति को मजबूत किया जा सके।

अनुकूलन दिशा

द्विप्लस ट्रेडिंग रणनीतियों को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः

  1. मजबूत और कमजोर रुझानों को समझने के लिए MACD सूचकांक का परिचय, कमजोर और अस्थिर बाजारों के गलत ट्रेडिंग से बचने के लिए;
  2. ट्रेडिंग वॉल्यूम में वृद्धि को एक पुष्टिकरण संकेतक के रूप में उपयोग किया जाता है, ताकि प्रवृत्ति को बदलने वाले झूठे ब्रेकडाउन से बचा जा सके;
  3. अन्य तकनीकी संकेतकों के साथ संयोजन में, जैसे कि ब्रिन लाइन, K लाइन, और अधिक सटीक प्रवेश और निकास शर्तें निर्धारित करना;
  4. मशीन लर्निंग विधियों जैसे कि एलएसटीएम का उपयोग करके औसत रेखा पैरामीटर को स्वचालित रूप से अनुकूलित करें, जिससे बेहतर बाजार अनुकूलन हो सके।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © antondmt

//@version=5
strategy("Returns & Drawdowns Table", "R & DD", true, calc_on_every_tick = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, process_orders_on_close = true)
i_eq_to_dd =            input.string("Compound Equity", "Mode", ["Simple Equity", "Compound Equity", "Drawdown"], group = "R & DD Table")
i_precision =           input.int(2, "Return Precision", group = "R & DD Table")
i_headers_col =         input.color(#D4D4D4, "Headers Color", group = "R & DD Table")
i_headers_text_col =    input.color(color.black, "Headers Text Color", group = "R & DD Table")
i_pos_col =             input.color(color.green, "Positive Color", group = "R & DD Table")
i_neg_col =             input.color(color.red, "Negative Color", group = "R & DD Table")
i_zero_col =            input.color(#DDDDDD, "Zero Color", group = "R & DD Table")
i_cell_text_col =       input.color(color.white, "Cell Text Color", group = "R & DD Table")

// TIME {
var month_times = array.new_int(0)                                                              // Array of all month times  
new_month = month(time) != month(time[1]) 
if(new_month or barstate.isfirst)
    array.push(month_times, time)

var year_times = array.new_int(0)                                                               
new_year = year(time) != year(time[1])  
if (new_year or barstate.isfirst)
    array.push(year_times, time)
//}

// SIMPLE EQUITY CALCULATIONS {
// Simple equity is strictly calculated from start to end of each month/year equity. There is no compound
var monthly_simp_pnls = array.new_float(0)                                                      // Array of all monthly profits and losses
var yearly_simp_pnls = array.new_float(0)                                                       

if(i_eq_to_dd == "Simple Equity")
    var initial_monthly_equity = strategy.equity                                                // Starting equity for each month
    cur_month_pnl = nz((strategy.equity - initial_monthly_equity) / initial_monthly_equity)     // Current month's equity change
    if(new_month or barstate.isfirst)
        initial_monthly_equity := strategy.equity
        array.push(monthly_simp_pnls, cur_month_pnl)
    else 
        array.set(monthly_simp_pnls, array.size(monthly_simp_pnls) - 1, cur_month_pnl)
    
    var initial_yearly_equity = strategy.equity
    cur_year_pnl = nz((strategy.equity - initial_yearly_equity) / initial_yearly_equity)
    if (new_year or barstate.isfirst)
        initial_yearly_equity := strategy.equity
        array.push(yearly_simp_pnls, cur_year_pnl)
    else 
        array.set(yearly_simp_pnls, array.size(yearly_simp_pnls) - 1, cur_year_pnl)
// }

// COMPOUND EQUITY CALCULATIONS {
// Compound equity is strictly calculated based on equity state from the beginning of time until the end of each month/year equity. It shows the exact equity movement through time
var monthly_comp_pnls = array.new_float(0)                                                      // Array of all monthly profits and losses
var yearly_comp_pnls = array.new_float(0)                                                       

if(i_eq_to_dd == "Compound Equity")
    var initial_equity = strategy.equity                                                
    cur_month_pnl = nz((strategy.equity - initial_equity) / initial_equity)                     // Current month's equity change
    if(new_month or barstate.isfirst)
        array.push(monthly_comp_pnls, cur_month_pnl)
    else 
        array.set(monthly_comp_pnls, array.size(monthly_comp_pnls) - 1, cur_month_pnl)
    
    cur_year_pnl = nz((strategy.equity - initial_equity) / initial_equity)
    if (new_year or barstate.isfirst)
        array.push(yearly_comp_pnls, cur_year_pnl)
    else 
        array.set(yearly_comp_pnls, array.size(yearly_comp_pnls) - 1, cur_year_pnl)
// }
    
// DRAWDOWN CALCULATIONS {
// Drawdowns are calculated from highest equity to lowest trough for the month/year
var monthly_dds = array.new_float(0)                                                            // Array of all monthly drawdowns
var yearly_dds = array.new_float(0)                                                             

if (i_eq_to_dd == "Drawdown")
    total_equity = strategy.equity - strategy.openprofit                        
    
    var cur_month_dd = 0.0  
    var m_ATH = total_equity                                                                    // Monthly All-Time-High (ATH). It is reset each month
    m_ATH := math.max(total_equity, nz(m_ATH[1]))
    m_drawdown = -math.abs(total_equity / m_ATH * 100 - 100) / 100                              // Drawdown at current bar
    if(m_drawdown < cur_month_dd)
        cur_month_dd := m_drawdown
    if(new_month or barstate.isfirst)
        cur_month_dd := 0.0
        m_ATH := strategy.equity - strategy.openprofit
        array.push(monthly_dds, 0)
    else 
        array.set(monthly_dds, array.size(monthly_dds) - 1, cur_month_dd)
    
    var cur_year_dd = 0.0
    var y_ATH = total_equity
    y_ATH := math.max(total_equity, nz(y_ATH[1]))
    y_drawdown = -math.abs(total_equity / y_ATH * 100 - 100) / 100
    if(y_drawdown < cur_year_dd)
        cur_year_dd := y_drawdown
    if (new_year or barstate.isfirst)
        cur_year_dd := 0.0
        y_ATH := strategy.equity - strategy.openprofit
        array.push(yearly_dds, 0)
    else 
        array.set(yearly_dds, array.size(yearly_dds) - 1, cur_year_dd) 
// }

// TABLE LOGIC { 
var main_table = table(na)
table.clear(main_table, 0, 0, 13, new_year ? array.size(year_times) - 1 : array.size(year_times))
main_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_times) + 1, border_width = 1)

t_set_headers() =>                                                                              // Sets time headers of the table
    // Set month headers
    table.cell(main_table, 0,  0, "",     text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 1,  0, "Jan",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 2,  0, "Feb",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 3,  0, "Mar",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 4,  0, "Apr",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 5,  0, "May",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 6,  0, "Jun",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 7,  0, "Jul",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 8,  0, "Aug",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 9,  0, "Sep",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 10, 0, "Oct",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 11, 0, "Nov",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 12, 0, "Dec",  text_color = i_headers_text_col, bgcolor = i_headers_col)
    table.cell(main_table, 13, 0, str.tostring(i_eq_to_dd), text_color = i_headers_text_col, bgcolor = i_headers_col)

    // Set year headers
    for i = 0 to array.size(year_times) - 1
        table.cell(main_table, 0,  i + 1, str.tostring(year(array.get(year_times, i))), text_color = i_headers_text_col, bgcolor = i_headers_col)

t_set_months() =>                                                                               // Sets inner monthly data of the table
    display_array = switch i_eq_to_dd 
        "Simple Equity" => monthly_simp_pnls 
        "Compound Equity" => monthly_comp_pnls
        => monthly_dds
    for i = 0 to array.size(month_times) - 1
        m_row = year(array.get(month_times, i)) - year(array.get(year_times, 0)) + 1
        m_col = month(array.get(month_times, i)) 
        m_color = array.get(display_array, i) == 0 ? color.new(i_zero_col, transp = 30) : array.get(display_array, i) > 0 ? color.new(i_pos_col, transp = 30) : color.new(i_neg_col, transp = 30)
        table.cell(main_table, m_col, m_row, str.tostring(math.round(array.get(display_array, i) * 100, i_precision)), bgcolor = m_color, text_color = i_cell_text_col)
        
t_set_years() =>                                                                                // Sets inner yearly data of the table
    display_array = switch i_eq_to_dd 
        "Simple Equity" => yearly_simp_pnls 
        "Compound Equity" => yearly_comp_pnls
        => yearly_dds
    for i = 0 to array.size(year_times) - 1
        y_color = array.get(display_array, i) == 0 ? color.new(i_zero_col, transp = 30) : array.get(display_array, i) > 0 ? color.new(i_pos_col, transp = 20) : color.new(i_neg_col, transp = 20)
        table.cell(main_table, 13, i + 1, str.tostring(math.round(array.get(display_array, i) * 100, i_precision)), bgcolor = y_color, text_color = i_cell_text_col)

t_set_headers() 
t_set_months()
t_set_years()
// }

// PLACE YOUR STRATEGY CODE HERE {
// This is a sample code of a working strategy to show the table in action
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD
if (ta.crossover(delta, 0))
	strategy.entry("MacdLE", strategy.long, comment = "MacdLE")
if (ta.crossunder(delta, 0))
	strategy.entry("MacdSE", strategy.short, comment = "MacdSE")
// }