ADX اشارے پر مبنی موافقت پذیر تجارتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-17 15:33:37
ٹیگز:

img

جائزہ

اس حکمت عملی کا بنیادی مقصد مارکیٹ کے رجحانات کا جائزہ لینے کے لئے ADX اشارے کا استعمال کرنا ہے ، اور DI + اور DI- کے درمیان فرق کو یکجا کرکے موافقت پذیر تجارت کے لئے بریک آؤٹ پوائنٹس کی خود بخود نشاندہی کرنا ہے۔ جب DI + اور ADX کے درمیان فرق مقررہ حد سے تجاوز کرتا ہے تو ، طویل ہوجائیں۔ جب DI- اور ADX کے درمیان فرق مقررہ حد سے تجاوز کرتا ہے تو ، مختصر ہوجائیں۔ یہ حکمت عملی دستی مداخلت کے بغیر خود بخود رجحان بریک آؤٹ پوائنٹس کی نشاندہی کرسکتی ہے ، جو درمیانی اور طویل مدتی ہولڈنگ کے لئے موزوں ہے۔

حکمت عملی کا اصول

  1. DI +، DI، DX اور ADX اشارے حاصل کرنے کے لئے حقیقی رینج، سمت کی نقل و حرکت کے اشارے کا حساب لگائیں.

  2. DI + اور ADX کے درمیان فرق طول و عرض1 کا موازنہ کریں، اور DI- اور ADX کے درمیان فرق طول و عرض2 کا موازنہ کریں.

  3. جب طول و عرض 1 مقررہ حد سے زیادہ ہے (مثال کے طور پر 10) ، ایک طویل سگنل پیدا ہوتا ہے۔ جب طول و عرض 2 مقررہ حد سے زیادہ ہے (مثال کے طور پر 10) ، ایک مختصر سگنل پیدا ہوتا ہے۔

  4. اور غلط سگنلز کو فلٹر کرنے کے لیے ADX کو DI+ اور DI- کے درمیان رکھنے کی ضرورت ہوتی ہے۔

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

حکمت عملی کے فوائد

  1. دستی فیصلے کے بغیر خود بخود رجحان توڑ پوائنٹس کی نشاندہی.

  2. مختلف مارکیٹ کے ماحول کو اپنانے کے لئے DI اور ADX کے درمیان فرق کی حد کو لچکدار طریقے سے ایڈجسٹ کریں۔

  3. مؤثر طریقے سے ADX اشارے کو یکجا کرکے غلط سگنل کو فلٹر کریں.

  4. طویل عرصے تک انعقاد، اعلی تعدد کی تجارت کی ضرورت نہیں، اعلی سرمایہ استعمال.

  5. قابو پانے والی واپسی اور مستحکم ترقی۔

اسٹریٹجی کے خطرات

  1. ADX اشارے میں تاخیر ہوتی ہے اور قلیل مدتی تجارتی مواقع سے محروم ہوسکتے ہیں۔ حساسیت کو بہتر بنانے کے ل Other دوسرے اشارے کو جوڑ دیا جاسکتا ہے یا ADX پیرامیٹرز کو کم کیا جاسکتا ہے۔

  2. رینج سے منسلک مارکیٹوں میں پھنسنا آسان ہے۔ پھنسنے کے امکان کو کم کرنے کے لئے اسٹاپ نقصان کی حکمت عملی متعارف کروائی جاسکتی ہے یا ADX فلٹرنگ کے حالات شامل کیے جاسکتے ہیں۔

  3. بڑے رجحان کی تبدیلیوں کے دوران بڑے نقصانات کا شکار ہوتا ہے۔ خطرات کو کنٹرول کرنے کے لئے اسٹاپ نقصان کو منتقل کرنا یا ٹریلنگ اسٹاپ نقصان مرتب کیا جاسکتا ہے۔

اصلاح کی ہدایات

  1. بہترین پیرامیٹر مجموعہ تلاش کرنے کے لئے مختلف مارکیٹوں اور مصنوعات پر ٹیسٹ کریں.

  2. سگنل کی درستگی کو بہتر بنانے کے لئے دیگر تکنیکی اشارے شامل کرنے پر غور کریں ، جیسے MACD ، KD وغیرہ۔

  3. ڈراؤونگ اور زیادہ سے زیادہ نقصانات کو کنٹرول کرنے کے لئے سٹاپ نقصان کی حکمت عملی شامل کریں.

  4. مارکیٹ کے حالات کی بنیاد پر پوزیشنوں کو ایڈجسٹ کرنے کے لئے پوزیشن سائزنگ متعارف کروانا۔

  5. تجارتی خطرات کو کم کرنے کے لئے داخلہ اور باہر نکلنے کے معیار کو بہتر بنائیں.

نتیجہ

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


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 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/
// © MAURYA_ALGO_TRADER

//@version=5
strategy("Monthly Performance by Dr. Maurya", overlay=true, default_qty_value = 15, commission_type = strategy.commission.percent, commission_value = 0.1)


len = input(14)
th = input(20)

TrueRange = math.max(math.max(high - low, math.abs(high - nz(close[1]))), math.abs(low - nz(close[1])))
DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0
DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0

SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange

SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus

SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - nz(SmoothedDirectionalMovementMinus[1]) / len + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = math.abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100
ADX = ta.sma(DX, len)


//diff_1 = math.abs(DIPlus - DIMinus)
diff_2 = math.abs(DIPlus-ADX)
diff_3 = math.abs(DIMinus - ADX)

long_diff = input(10, "Long Difference")
short_diff = input(10, "Short Difference")

buy_condition = diff_2 >=long_diff and diff_3 >=long_diff and (ADX < DIPlus and ADX > DIMinus)
sell_condition = diff_2 >=short_diff and diff_3 >=short_diff and (ADX > DIPlus and ADX < DIMinus)


if buy_condition
    strategy.entry("Long Entry", strategy.long, comment = "Long")
if sell_condition
    strategy.entry("Short Entry", strategy.short, comment = "Short")



// Copy below code to end of the desired strategy script
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                 monthly pnl performance  by Dr. Maurya @MAURYA_ALGO_TRADER                        //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
show_performance = input.bool(true, 'Show Monthly Monthly Performance ?', group='Monthly Performance')

dash_loc_mp = input("Bottom Right","Location"  ,options=["Top Right","Bottom Right","Top Left","Bottom Left", "Middle Right","Bottom Center"]  ,group='Monthly Performance', inline = "performance")

text_size_mp = input('Small',"Size"  ,options=["Tiny","Small","Normal","Large"]  ,group='Monthly Performance', inline = "performance")

bg_c = input.color( color.rgb(7, 226, 242, 38), "Background Color", group='Monthly Performance')

text_head_color = input.color( color.rgb(0,0,0), "Month/Year Heading Color", group='Monthly Performance')

tab_month_c = input.color( color.white, "Month PnL Data Color", group='Monthly Performance')

tab_year_c = input.color( color.rgb(0,0,0), "Year PnL Data Color", group='Monthly Performance')

border_c = input.color( color.white, "Table Border Color", group='Monthly Performance')



var table_position_mp = dash_loc_mp == 'Top Left' ? position.top_left :
  dash_loc_mp == 'Bottom Left' ? position.bottom_left :
  dash_loc_mp == 'Middle Right' ? position.middle_right :
  dash_loc_mp == 'Bottom Center' ? position.bottom_center :
  dash_loc_mp == 'Top Right' ? position.top_right : position.bottom_right
  
var table_text_size_mp = text_size_mp == 'Tiny' ? size.tiny :
  text_size_mp == 'Small' ? size.small :
  text_size_mp == 'Normal' ? size.normal : size.large

/////////////////
strategy.initial_capital =50000

/////////////////////////////////////////////

// var bool new_month = na
new_month = ta.change(month) //> 0 ? true : false
newest_month = new_month and strategy.closedtrades >= 1

// profit
only_profit = strategy.netprofit
initial_balance = strategy.initial_capital

// month number
var int month_number = na
month_number := (ta.valuewhen(newest_month, month(time), 0)) //and month(time) > 1 ? (ta.valuewhen(newest_month, month(time), 0) - 1) :  12 //1 to 12

//month_year
var int month_time = na
month_time := ta.valuewhen(newest_month, time, 0) - 2419200000 


var int m_counter = 0
if newest_month
    m_counter += 1



// current month values
var bool new_year = na
new_year := ta.change(year)
curr_m_pnl = only_profit - nz(ta.valuewhen(newest_month, only_profit, 0), 0)
curr_m_number = newest_month ? ta.valuewhen(newest_month, month(time), 0) : month(time)
curr_y_pnl = (only_profit - nz(ta.valuewhen(new_year, only_profit, 0),0)) 



var float [] net_profit_array = array.new_float()
var int [] month_array = array.new_int()
var int [] month_time_array = array.new_int()


if newest_month
    array.push(net_profit_array, only_profit)
    array.push(month_array, month_number)
    array.push(month_time_array, month_time)



var float [] y_pnl_array = array.new_float()
var int [] y_number_array = array.new_int()
var int [] y_time_array = array.new_int()

newest_year = ta.change(year) and strategy.closedtrades >= 1
get_yearly_pnl = nz(ta.valuewhen(newest_year, strategy.netprofit, 0) - nz(ta.valuewhen(newest_year, strategy.netprofit, 1), 0), 0)
get_m_year = ta.valuewhen(newest_year, year(time), 1)
get_y_time = ta.valuewhen(newest_year, time, 0)

if newest_year
    array.push(y_pnl_array, get_yearly_pnl)
    array.push(y_number_array, get_m_year)
    array.push(y_time_array, get_y_time)
var float monthly_profit = na
var int column_month_number = na
var int row_month_time = na

 


var testTable = table.new(position = table_position_mp, columns = 14, rows = 40, bgcolor = bg_c, border_color = border_c, border_width = 1)
if barstate.islastconfirmedhistory and show_performance
    table.cell(table_id = testTable, column = 0, row = 0, text = "YEAR", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 1, row = 0, text = "JAN", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 2, row = 0, text = "FEB", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 3, row = 0, text = "MAR", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 4, row = 0, text = "APR", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 5, row = 0, text = "MAY", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 6, row = 0, text = "JUN", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 7, row = 0, text = "JUL", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 8, row = 0, text = "AUG", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 9, row = 0, text = "SEP", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 10, row = 0, text = "OCT", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 11, row = 0, text = "NOV", text_color = text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 12, row = 0, text = "DEC", text_color =text_head_color, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 13, row = 0, text = "YEAR P/L", text_color = text_head_color, text_size=table_text_size_mp)

    for i = 0 to (array.size(y_number_array) == 0 ? na : array.size(y_number_array) - 1)
        row_y = year(array.get(y_time_array, i)) - year(array.get(y_time_array, 0)) + 1
        table.cell(table_id = testTable, column = 13, row = row_y, text = str.tostring(array.get(y_pnl_array , i), "##.##") + '\n' + '(' + str.tostring(array.get(y_pnl_array , i)*100/initial_balance, "##.##") + ' %)', bgcolor = array.get(y_pnl_array , i) > 0 ? color.green : array.get(y_pnl_array , i) < 0 ? color.red : color.gray, text_color = tab_year_c, text_size=table_text_size_mp)
    curr_row_y = array.size(month_time_array) == 0 ? 1 : (year(array.get(month_time_array, array.size(month_time_array) - 1))) - (year(array.get(month_time_array, 0))) + 1
    table.cell(table_id = testTable, column = 13, row = curr_row_y, text = str.tostring(curr_y_pnl, "##.##") + '\n' + '(' + str.tostring(curr_y_pnl*100/initial_balance, "##.##") + ' %)', bgcolor = curr_y_pnl > 0 ? color.green : curr_y_pnl < 0 ? color.red : color.gray, text_color = tab_year_c, text_size=table_text_size_mp)
    

    for i = 0 to (array.size(net_profit_array) == 0 ? na : array.size(net_profit_array) - 1)
        monthly_profit := i > 0 ? ( array.get(net_profit_array, i) - array.get(net_profit_array, i - 1) ) : array.get(net_profit_array, i) 
        column_month_number := month(array.get(month_time_array, i)) 
        row_month_time :=((year(array.get(month_time_array, i))) - year(array.get(month_time_array, 0)) ) + 1 
        table.cell(table_id = testTable, column = column_month_number, row = row_month_time, text = str.tostring(monthly_profit, "##.##") + '\n' + '(' + str.tostring(monthly_profit*100/initial_balance, "##.##") + ' %)', bgcolor = monthly_profit > 0 ? color.green : monthly_profit < 0 ? color.red : color.gray, text_color = tab_month_c, text_size=table_text_size_mp)
        table.cell(table_id = testTable, column = 0, row =row_month_time, text = str.tostring(year(array.get(month_time_array, i)), "##.##"), text_color = text_head_color, text_size=table_text_size_mp)
       
    curr_row_m = array.size(month_time_array) == 0 ? 1 : (year(array.get(month_time_array, array.size(month_time_array) - 1))) - (year(array.get(month_time_array, 0))) + 1
    table.cell(table_id = testTable, column = curr_m_number, row = curr_row_m, text = str.tostring(curr_m_pnl, "##.##") + '\n' + '(' + str.tostring(curr_m_pnl*100/initial_balance, "##.##") + ' %)', bgcolor = curr_m_pnl > 0 ? color.green : curr_m_pnl < 0 ? color.red : color.gray, text_color = tab_month_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 0, row =curr_row_m, text = str.tostring(year(time), "##.##"), text_color = text_head_color, text_size=table_text_size_mp)

//============================================================================================================================================================================

مزید