ATR এবং ব্রেকআউটের উপর ভিত্তি করে ETF ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-12-26 16:05:55 অবশেষে সংশোধন করুন: 2023-12-26 16:05:55
অনুলিপি: 2 ক্লিকের সংখ্যা: 822
1
ফোকাস
1623
অনুসারী

ATR এবং ব্রেকআউটের উপর ভিত্তি করে ETF ট্রেডিং কৌশল

ওভারভিউ

এটি একটি স্বয়ংক্রিয় ইটিএফ ট্রেডিং কৌশল যা গড় প্রকৃত তরঙ্গদৈর্ঘ্য (এটিআর) এবং দামের ব্রেকডাউনগুলির উপর ভিত্তি করে। এটি এটিআর ব্যবহার করে স্টপ লস এবং স্টপ লস গণনা করে এবং যখন দামগুলি একটি নির্দিষ্ট সময়ের সর্বোচ্চ বা সর্বনিম্ন মূল্য অতিক্রম করে তখন পজিশনটি বেশি বা কম করে।

কৌশল নীতি

এই কৌশলটি মূলত নিম্নলিখিত নীতির উপর ভিত্তি করে তৈরি করা হয়েছেঃ

  1. একটি নির্দিষ্ট সময়কালের সর্বোচ্চ এবং সর্বনিম্ন মূল্য ব্যবহার করে (যেমন 20 কে লাইন) দামের গতি এবং দিকনির্দেশের বিচার করুন। যখন দামটি চক্রের সর্বোচ্চ মূল্যকে ভেঙে দেয়, তখন আরও বেশি করুন; যখন দাম চক্রের সর্বনিম্ন মূল্যকে ভেঙে দেয়, তখন খালি করুন।

  2. এটিআর ব্যবহার করে স্টপ লস গতিশীলভাবে গণনা করুন। স্টপ লস থেকে প্রবেশাধিকার মূল্য একটি এটিআর চক্রের এটিআর মান গুণিতক ((যেমন 2) ।

  3. এটিআর ব্যবহার করে স্টপ লেভেল গণনা করুন। স্টপ লেভেল থেকে প্রবেশের দামটি একটি এটিআর চক্রের জন্য এটিআর মানের গুণিতক ((যেমন 1) ।

  4. এটিআরট্রেইলার মাল্টিফ্যাক্টর ব্যবহার করে স্টপ ট্র্যাক করুন। যখন দামটি ট্রেইলার স্টপ পয়েন্টটি বিপরীত দিকে অতিক্রম করে, তখন পজিশন স্টপ।

এই কৌশলটি সহজ এবং নির্ভরযোগ্য, কারণ এটি মূল্যের প্রবণতার দিক বিবেচনা করে, যা মূল্যের প্রবণতাকে সময়মতো ধরতে সহায়তা করে; এবং স্টপ লস এবং স্টপ পজিশন সেট করে, যা মুনাফা অর্জনের সুযোগ এবং ঝুঁকি নিয়ন্ত্রণে সহায়তা করে।

সামর্থ্য বিশ্লেষণ

এই কৌশলটির সুবিধাগুলো হলঃ

  1. কৌশলগুলি সহজ, সুস্পষ্ট, সহজে বোঝা যায় এবং বাস্তবায়িত হয়।

  2. এটিআর ব্যবহার করে স্টপ লস হিসাব করা যায়, পজিশনের আকারকে গতিশীলভাবে সামঞ্জস্য করা যায় এবং ঝুঁকি নিয়ন্ত্রণে নমনীয়তা পাওয়া যায়।

  3. চক্র বিরতি বিচার কৌশল সহজেই মূল্য প্রবণতা ক্যাপচার, ভাল আয়।

  4. ট্রেলার ক্ষতির সময়সীমা বাড়ানো যায় এবং ঝুঁকি এড়ানো যায়।

  5. ট্রেন্ডিং প্রজাতির জন্য প্রযোজ্য, যেমন ইটিএফ, শেয়ার ইত্যাদি।

ঝুঁকি বিশ্লেষণ

এই কৌশলটি নিম্নলিখিত ঝুঁকিগুলিও বহন করেঃ

  1. দামের অস্থিরতার সময়, ভুল সংকেত এবং বিপরীত পজিশন খোলার সম্ভাবনা বেশি থাকে।

  2. চক্রের পরামিতিগুলি ভুলভাবে সেট করা হয়েছে, যার ফলে মূল্যের প্রবণতা মিস হতে পারে বা খুব বেশি পরিমাণে ট্রেডিং করা যেতে পারে।

  3. ফ্যাক্টর প্যারামিটারগুলি ভুলভাবে সেট করা হয়েছে, যার ফলে স্টপ লস বা স্টপ স্টপগুলি খুব বেশি র্যাডিকাল বা রক্ষণশীল হতে পারে এবং মুনাফা প্রভাবিত হতে পারে।

  4. ইটিএফ-এর নিজস্ব ঝুঁকি, যেমন নীতিগত ঝুঁকি, প্রিমিয়াম ঝুঁকি ইত্যাদিও কৌশলকে প্রভাবিত করে।

সমাধানঃ

  1. ভার্চুয়াল লেনদেনের হার কমানোর জন্য প্যারামিটার অপ্টিমাইজ করুন।
  2. ট্রেডিং সিগন্যাল নির্ধারণে একাধিক ফ্যাক্টর এবং ফিল্টার ব্যবহার করা হয়।
  3. বিভিন্ন বাজারের জন্য প্যারামিটারগুলি সামঞ্জস্য করুন।
  4. ডিসক্রিমাইজড ইনভেস্টমেন্ট, একক ইটিএফ পজিশনের নিয়ন্ত্রণ।

অপ্টিমাইজেশান দিক

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও উন্নত করা যেতে পারেঃ

  1. চলমান গড়ের মতো সূচকগুলির সাথে মিলে মিথ্যা সংকেতগুলি ফিল্টার করুন।

  2. একটি অভিযোজনযোগ্যতা প্যারামিটার অপ্টিমাইজেশান মডিউল যোগ করা হয়েছে, যা স্বয়ংক্রিয়ভাবে বিভিন্ন চক্র এবং জাতের উপর ভিত্তি করে প্যারামিটারগুলিকে অপ্টিমাইজ করে।

  3. একটি মেশিন লার্নিং মডেল যুক্ত করা হয়েছে যা পরবর্তী K লাইনের উচ্চতা এবং নিম্নতা পূর্বাভাস দেয়, যাতে একটি ব্রেকিং সিগন্যাল নির্ণয় করা যায়।

  4. ট্রেডিং ওভারফ্লো ইত্যাদির মতো সূচকগুলি বিবেচনা করুন এবং ভুয়া ব্রেকডাউন প্রতিরোধ করুন।

  5. বিভিন্ন জাতের এবং বাজারের অবস্থার সাথে সামঞ্জস্য রেখে পোশাক খোলার জন্য পোশাক খোলার আকার এবং অনুপাতের অনুকূলিতকরণ।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-12-18 00:00:00
end: 2023-12-21 03:00:00
period: 1m
basePeriod: 1m
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/
// © FX_minds

//@version=4
strategy("ETF tradedr", overlay=true, pyramiding=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//------------------------------ get user input
lookback                   = input(title="HH LL lookback", type=input.integer, defval=20)
ATR_periode                = input(title="ATR period", type=input.integer, defval=14)
ATR_SL_multiplier          = input(title="ATR SL multiplier", type=input.float, defval=2)
ATR_TP_multiplier          = input(title="ATR TP multiplier", type=input.float, defval=1)
trailing_SL_ATR_multiplier = input(title="ATR trailing SL multiplier", type=input.float, defval=3.5)
lookback_trailing_SL       = input(title="trailing SL lookback", type=input.integer, defval=4)
max_sequel_trades          = input(title="max sequel trades", type=input.float, defval=1)
trade_long                 = input(title= "trade long ?", type=input.bool, defval=true)
trade_short                = input(title= "trade short ?", type=input.bool, defval=false)

//------------------------------ determine entry conditions
long_condition   = barstate.isconfirmed and crossover(high, highest(high, lookback)[1])
short_condition  = barstate.isconfirmed and crossunder(low, lowest(low, lookback)[1])


//------------------------------ count open long trades
count_open_longs = 0
count_open_longs := nz(count_open_longs[1])

if (long_condition) 
    count_open_longs := count_open_longs +1
    //label.new(bar_index, low, tostring(count_open_longs, "#"), xloc.bar_index, yloc.belowbar, color.green, label.style_none, color.green, size.large)

if (short_condition)
    count_open_longs := 0


//------------------------------ count open short trades
count_open_shorts = 0
count_open_shorts := nz(count_open_shorts[1])

if (short_condition)
    count_open_shorts := count_open_shorts +1
    //label.new(bar_index, low, tostring(count_open_shorts, "#"), xloc.bar_index, yloc.belowbar, color.red, label.style_none, color.red, size.large)

if (long_condition)
    count_open_shorts := 0


//------------------------------ calculate entryprice
entryprice_long = long_condition ? close : na
entryprice_short = short_condition ? close : na


//------------------------------ calculate SL & TP
SL_distance = atr(ATR_periode) * ATR_SL_multiplier
TP_distance  = atr(ATR_periode) * ATR_TP_multiplier
trailing_SL_distance = atr(ATR_periode) * trailing_SL_ATR_multiplier

SL_long = entryprice_long - SL_distance
SL_short = entryprice_short + SL_distance

trailing_SL_short = lowest(close, lookback_trailing_SL) + trailing_SL_distance
trailing_SL_long  = highest(close, lookback_trailing_SL) - trailing_SL_distance

trailing_SL_short_signal = crossover(high, trailing_SL_short[1])
trailing_SL_long_signal = crossunder(low, trailing_SL_long[1])


//------------------------------ plot entry price & SL  
plot(entryprice_long, style=plot.style_linebr, color=color.white)
plot(SL_long, style=plot.style_linebr, color=color.red)
plot(SL_short, style=plot.style_linebr, color=color.green)
plot(trailing_SL_short, style=plot.style_linebr, color=color.red)
plot(trailing_SL_long, style=plot.style_linebr, color=color.green)


//------------------------------ submit entry orders
if (long_condition) and (count_open_longs <= max_sequel_trades) and (trade_long == true)
    strategy.entry("Long" + tostring(count_open_longs, "#"), strategy.long)
    strategy.exit("SL Long"+ tostring(count_open_longs, "#"), 
     from_entry="Long" + tostring(count_open_longs, "#"), stop=SL_long)

if (short_condition) and (count_open_shorts <= max_sequel_trades) and (trade_short == true)
    strategy.entry("Short" + tostring(count_open_shorts, "#"), strategy.short)
    strategy.exit("SL Short" + tostring(count_open_shorts, "#"), 
     from_entry="Short" + tostring(count_open_shorts, "#"), stop=SL_short)
    

//------------------------------ submit exit conditions
if (trailing_SL_long_signal)
    strategy.close("Long" + tostring(count_open_longs, "#"))
    strategy.close("Long" + tostring(count_open_longs-1, "#"))
    strategy.close("Long" + tostring(count_open_longs-2, "#"))
    strategy.close("Long" + tostring(count_open_longs-4, "#"))
    strategy.close("Long" + tostring(count_open_longs-5, "#"))
    strategy.close("Long" + tostring(count_open_longs-6, "#"))
    strategy.close("Long" + tostring(count_open_longs-7, "#"))
    strategy.close("Long" + tostring(count_open_longs-8, "#"))
    strategy.close("Long" + tostring(count_open_longs-9, "#"))
    
if (trailing_SL_short_signal)
    strategy.close("Short" + tostring(count_open_shorts, "#"))
    strategy.close("Short" + tostring(count_open_shorts-1, "#"))
    strategy.close("Short" + tostring(count_open_shorts-2, "#"))
    strategy.close("Short" + tostring(count_open_shorts-3, "#"))
    strategy.close("Short" + tostring(count_open_shorts-4, "#"))
    strategy.close("Short" + tostring(count_open_shorts-5, "#"))
    strategy.close("Short" + tostring(count_open_shorts-6, "#"))
    strategy.close("Short" + tostring(count_open_shorts-7, "#"))
    strategy.close("Short" + tostring(count_open_shorts-8, "#"))
    strategy.close("Short" + tostring(count_open_shorts-9, "#"))