گولڈن کراس اور ڈیتھ کراس ڈبل موونگ ایوریج ٹریڈنگ حکمت عملی


تخلیق کی تاریخ: 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 smoothing factor کے لئے ہے۔ اشاریہ منتقل اوسط عام ریاضی کی اوسط سے مختلف ہے کہ اشاریہ منتقل اوسط حالیہ اعداد و شمار کو زیادہ وزن دیتا ہے ، جس سے قیمت میں تبدیلیوں کا زیادہ تیزی سے جواب دیا جاسکتا ہے۔

دو طرفہ حکمت عملی کے لئے ٹریڈنگ کے قواعد یہ ہیں:

  • جب تیز لکیر نیچے سے سست لکیر کو پار کرتی ہے تو ، گولڈن کراس گولڈ فورک تشکیل دیتا ہے ، جس میں زیادہ انٹری ہوتی ہے۔
  • جب تیز لکیر اوپر سے نیچے سے سست لکیر کو پار کرتی ہے تو ، ڈیڈ کراس ڈیڈ فورک تشکیل دیتا ہے ، جو خالی جگہ میں داخل ہوتا ہے۔
  • جب فاسٹ لائن اور سست لائن الگ ہوجاتی ہے تو ، فین پوجن باہر ہوجاتا ہے۔

مساوات کی کراس شکل کی نگرانی کی گرفتاری کے ذریعے ، مارکیٹ میں طلب اور رسد کے تعلقات اور رجحانات میں تبدیلیوں کا بروقت ردعمل ، منافع بخش حاصل کریں۔

طاقت کا تجزیہ

باہمی یکساں ٹریڈنگ حکمت عملی ایک زیادہ پختہ تکنیکی اشارے کی حکمت عملی کے طور پر مندرجہ ذیل فوائد ہیں:

  1. واضح سوچ، آسانی سے سمجھنے اور عملدرآمد کے قابل؛
  2. مارکیٹ میں طلب اور رسد کے تعلقات کے بارے میں درست فیصلے اور اعلی جیت کی شرح؛
  3. مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کریں اور اہم رجحانات کو پکڑیں؛
  4. مختلف مارکیٹوں اور ٹائم فریموں میں قابل اطلاق۔
  5. یہ دیگر تکنیکی اشارے کے ساتھ مل کر حکمت عملی میں اضافہ کر سکتا ہے۔
  6. فنڈز کا استعمال اعلی ہے اور بڑے فنڈز کی ضرورت کو پورا کرتا ہے۔

خطرے کا تجزیہ

دو طرفہ تجارت کی حکمت عملی میں کچھ خامیاں اور خطرات بھی ہیں:

  1. اس کے علاوہ ، یہ بھی کہا گیا ہے کہ اس طرح کے حالات میں ، “اسٹیٹ بینک” کے پاس کوئی اختیار نہیں ہے۔
  2. اس کے علاوہ ، یہ بھی کہا گیا ہے کہ اس کے نتیجے میں ، اس کی وجہ یہ ہے کہ اس میں تیزی سے اضافہ ہوا ہے ، اور اس کی وجہ سے ، اس میں اضافہ ہوا ہے۔
  3. مختلف اقسام اور وقت کے دورانیوں کے لئے پیرامیٹرز کو بہتر بنانے کی ضرورت ہے؛
  4. اس کے علاوہ ، یہ بھی کہا گیا ہے کہ اس کے نتیجے میں ، اس کی قیمتوں میں کمی واقع ہوئی ہے۔

مندرجہ بالا خطرات کے لئے ، اوسط لکیری مدت کے پیرامیٹرز کو ایڈجسٹ کرنے ، اضافی فلٹرز متعارف کرانے اور دیگر طریقوں سے اصلاح کی جاسکتی ہے ، تاکہ حکمت عملی کو زیادہ مستحکم بنایا جاسکے۔

اصلاح کی سمت

دو طرفہ لین دین کی حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:

  1. مضبوط اور کمزور رجحانات کا اندازہ لگانے کے لئے MACD اشارے متعارف کروائیں تاکہ کمزور اور ہلکے بازاروں میں غلط تجارت سے بچا جاسکے۔
  2. ٹریڈنگ کے حجم میں اضافے کو ایک تصدیق کے اشارے کے طور پر استعمال کیا جاتا ہے تاکہ رجحانات کو تبدیل کرنے سے بچنے کے لئے جعلی توڑ سے بچایا جاسکے۔
  3. دیگر تکنیکی اشارے جیسے برن لائن، K لائن وغیرہ کے ساتھ مل کر، داخلہ اور باہر نکلنے کے لئے زیادہ درست شرائط مقرر کریں؛
  4. مشین لرننگ کے طریقوں جیسے LSTM کا استعمال کرتے ہوئے اوسط لائن پیرامیٹرز کو خود بخود بہتر بنانے کے ل better بہتر مارکیٹ موافقت حاصل کریں۔

خلاصہ کریں۔

ڈبل یکساں لائن ٹریڈنگ حکمت عملی ، قیمت کے رجحان کے الٹ پلٹ کے بارے میں فیصلہ کرنے ، اور مستحکم منافع حاصل کرنے کے لئے یکساں لائن کے سنہری فورک اور ڈیڈ فورک ٹریڈنگ کے مواقع کو پکڑنے کے ذریعے مستحکم منافع حاصل کرتی ہے۔ اس حکمت عملی کی خوبی یہ ہے کہ یہ سادہ اور واضح ہے ، سرمایہ کاری کے لئے موثر ہے ، اور یہ مقدار میں داخل ہونے کی ترجیحی حکمت عملی ہے۔ لیکن اس میں کچھ خامیاں بھی ہیں ، جیسے جعلی سگنل پیدا کرنا ، اور زیادہ اشارے متعارف کرانے کی ضرورت ہے تاکہ اسے مخصوص اقسام اور تجارتی ماحول کے لئے بہتر بنایا جاسکے۔ مجموعی طور پر ، ڈبل یکساں لائن ٹریڈنگ حکمت عملی ایک بہت ہی عملی تکنیکی اشارے کی حکمت عملی ہے۔

حکمت عملی کا ماخذ کوڈ
/*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")
// }