ADX সূচক ভিত্তিক অভিযোজিত ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০১-১৭ ১৫ঃ৩৩ঃ৩৭
ট্যাগঃ

img

সারসংক্ষেপ

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

কৌশল নীতি

  1. DI+, DI-, DX এবং ADX সূচক পেতে True Range, Directional Movement সূচক গণনা করুন।

  2. ডিআই+ এবং এডিএক্সের মধ্যে পার্থক্য প্রশস্ততা1 এবং ডিআই- এবং এডিএক্সের মধ্যে পার্থক্য প্রশস্ততা2 তুলনা করুন।

  3. যখন amplitude1 সেট থ্রেশহোল্ড (উদাহরণস্বরূপ 10), একটি দীর্ঘ সংকেত উত্পন্ন হয়। যখন amplitude2 সেট থ্রেশহোল্ড (উদাহরণস্বরূপ 10), একটি সংক্ষিপ্ত সংকেত উত্পন্ন হয়।

  4. এবং ADX এর ডিআই+ এবং ডিআই- এর মধ্যে থাকা প্রয়োজন যাতে ভুল সংকেত ফিল্টার করা যায়।

সুতরাং, যখন বাজার একটি প্রবণতায় প্রবেশ করে, ডিআই + বা ডিআই- বিশেষত এডিএক্সকে নেতৃত্ব দেবে, ট্রেডিং সংকেত উত্পন্ন করবে। যখন বাজারের প্রবণতা শেষ হয়, ডিআই +, ডিআই- এবং এডিএক্স আবার কাছাকাছি আসবে, উচ্চতা এবং বিক্রয় সর্বনিম্ন অনুসরণ এড়ানো।

কৌশলটির সুবিধা

  1. ম্যানুয়াল বিচার ছাড়াই প্রবণতা ব্রেকআউট পয়েন্ট স্বয়ংক্রিয়ভাবে চিহ্নিত করুন।

  2. ডিআই এবং এডিএক্সের মধ্যে পার্থক্যের সীমা নমনীয়ভাবে সামঞ্জস্য করুন যাতে বিভিন্ন বাজারের পরিবেশের সাথে মানিয়ে নেওয়া যায়।

  3. ADX ইন্ডিকেটর সংযুক্ত করে ভুল সংকেতগুলি কার্যকরভাবে ফিল্টার করুন।

  4. দীর্ঘায়িত হোল্ডিং পিরিয়ড, উচ্চ ফ্রিকোয়েন্সি ট্রেডিংয়ের প্রয়োজন নেই, উচ্চ মূলধন ব্যবহার।

  5. নিয়ন্ত্রিত প্রত্যাহার এবং স্থিতিশীল বৃদ্ধি।

কৌশলটির ঝুঁকি

  1. ADX সূচকটি পিছিয়ে পড়ে এবং স্বল্পমেয়াদী ট্রেডিং সুযোগগুলি মিস করতে পারে। সংবেদনশীলতা উন্নত করতে অন্যান্য সূচকগুলি একত্রিত করা যেতে পারে বা ADX পরামিতিগুলি হ্রাস করা যেতে পারে।

  2. ব্যাপ্তি-সীমাবদ্ধ বাজারে ফাঁদে পড়া সহজ। ফাঁদে পড়ার সম্ভাবনা কমাতে স্টপ লস কৌশল চালু করা যেতে পারে বা এডিএক্স ফিল্টারিং শর্ত যুক্ত করা যেতে পারে।

  3. প্রধান প্রবণতা বিপরীতকালে বিশাল ক্ষতির প্রবণতা। ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস বা ট্রেলিং স্টপ লস সরানো সেট আপ করা যেতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

  1. সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে পেতে বিভিন্ন বাজার এবং পণ্য পরীক্ষা করুন।

  2. সিগন্যালের নির্ভুলতা বাড়ানোর জন্য অন্যান্য প্রযুক্তিগত সূচক অন্তর্ভুক্ত করার কথা বিবেচনা করুন, যেমন এমএসিডি, কেডি ইত্যাদি।

  3. ড্রাউনডাউন এবং সর্বোচ্চ ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস কৌশল যুক্ত করুন।

  4. বাজারের অবস্থার উপর ভিত্তি করে অবস্থানগুলিকে সামঞ্জস্য করার জন্য পজিশন সাইজিং প্রবর্তন করুন।

  5. ট্রেডিং ঝুঁকি হ্রাস করার জন্য প্রবেশ ও প্রস্থান মানদণ্ড অপ্টিমাইজ করা।

সিদ্ধান্ত

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


/*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)

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

আরো