একটি এটিআর এবং ব্রেকআউট ভিত্তিক ইটিএফ ট্রেডিং কৌশল

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

img

সারসংক্ষেপ

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

কৌশলগত যুক্তি

কৌশলটি মূলত নিম্নলিখিত নীতিগুলির উপর ভিত্তি করেঃ

  1. মূল্যের প্রবণতা এবং দিকনির্দেশনা নির্ধারণের জন্য একটি নির্দিষ্ট সময়ের সর্বোচ্চ এবং সর্বনিম্ন মূল্য ব্যবহার করুন (উদাহরণস্বরূপ 20 মোমবাতি) । যখন মূল্য সময়ের সর্বোচ্চ মূল্যের মধ্য দিয়ে যায় তখন দীর্ঘ যান এবং যখন মূল্য সর্বনিম্ন মূল্যের মধ্য দিয়ে যায় তখন সংক্ষিপ্ত যান।

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

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

  4. ট্রেলার স্টপ লস ট্রেলার স্টপ লস মাল্টিপ্লিকেটর ব্যবহার করুন। যখন দামটি অনুকূল দিকের দিকে ট্রেলার স্টপ লস স্তরটি ভেঙে যায় তখন স্টপ লস দিয়ে পজিশন বন্ধ করুন।

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

সুবিধা বিশ্লেষণ

এই কৌশলটির সুবিধাগুলির মধ্যে রয়েছেঃ

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

  2. অ্যাডাপ্টিভ স্টপ লস এবং লাভের মাত্রা গণনা করার জন্য ATR ব্যবহার করে নমনীয় অবস্থান আকার এবং ঝুঁকি নিয়ন্ত্রণ করতে সহায়তা করে।

  3. ব্রেকআউট কৌশলগুলি মূল্যের প্রবণতা ধরতে ভাল, যা ভাল রিটার্নের দিকে নিয়ে যায়।

  4. ট্রেলার স্টপ লস সময়মত পজিশন বন্ধ করতে পারে, অত্যধিক ক্ষতি এড়াতে।

  5. এটি ইটিএফ এবং স্টকগুলির মতো স্পষ্ট প্রবণতা সহ পণ্যগুলির জন্য উপযুক্ত।

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

কৌশলটির ঝুঁকিগুলির মধ্যে রয়েছেঃ

  1. মূল্য সংহতকরণের সময় আরও মিথ্যা সংকেত এবং বিপরীত উদ্বোধন ঘটতে পারে।

  2. অনুপযুক্ত প্যারামিটার টিউনিং মূল্যের প্রবণতা মিস বা অত্যধিক অপ্রয়োজনীয় ট্রেড হতে পারে।

  3. পরামিতিগুলির চরম মানগুলি অত্যধিক আক্রমণাত্মক বা অত্যধিক সংরক্ষণশীল স্টপ লস এবং লাভ নিতে পারে, কৌশল লাভজনকতা প্রভাবিত করে।

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

সংশ্লিষ্ট সমাধানঃ

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

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

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

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

  2. বিভিন্ন সময়কাল এবং পণ্যের জন্য স্বয়ংক্রিয়ভাবে সেট আপ করার জন্য অভিযোজিত প্যারামিটার অপ্টিমাইজেশন মডিউল তৈরি করা।

  3. ব্রেকআউট সংকেত নির্ধারণের জন্য পরবর্তী মোমবাতিটির সর্বোচ্চ এবং সর্বনিম্ন মূল্যের পূর্বাভাস দেওয়ার জন্য মেশিন লার্নিং মডেল গ্রহণ করুন।

  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, "#"))



আরো