অ্যাডাপ্টিভ এক্সপোনেনশিয়াল মুভিং মিডিয়ার রেঞ্জ কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০২-২৬ 14:58:32
ট্যাগঃ

img

সারসংক্ষেপ

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

কৌশল নীতি

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

  2. RangeWidth প্যারামিটারের উপর ভিত্তি করে EHMA এর উপরে এবং নীচে একটি অভিযোজিত চ্যানেল তৈরি করুন। কেবলমাত্র যখন দাম উপরের চ্যানেল লাইনের উপরে উঠে যায় বা নীচের চ্যানেল লাইনের নীচে পড়ে, তখনই প্রবণতা পরিবর্তন হয়েছে বলে মনে করা হয় এবং ট্রেডিং সংকেতগুলি ট্রিগার করা হয়।

  3. চ্যানেলের সাথে মূল্যের সম্পর্ক নির্ধারণ করুন। যখন দাম উপরের লাইনটি ভেঙে যায় তখন লং, যখন নীচের লাইনটি ভেঙে যায় তখন শর্ট। যখন দাম উপরের লাইনের নীচে ক্রস করে তখন দীর্ঘ অবস্থান বন্ধ করুন, যখন দাম নীচের লাইনের উপরে ক্রস করে তখন শর্ট অবস্থান বন্ধ করুন।

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

সাধারণ চলমান গড় কৌশলগুলির তুলনায়, এই কৌশলটির নিম্নলিখিত সুবিধা রয়েছেঃ

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

  2. এডাপ্টিভ চ্যানেল কার্যকরভাবে মূল্যের ওঠানামা ফিল্টার করতে পারে। যখন দামের প্রবণতা দৃ firm়ভাবে পরিবর্তিত হয় তখনই ট্রেডিং সংকেতগুলি ট্রিগার হয়। এটি কিছু অকার্যকর বাণিজ্য ফিল্টার করতে পারে এবং লাভজনকতা উন্নত করতে পারে।

  3. বিভিন্ন বাজারের অবস্থার সাথে খাপ খাইয়ে নেওয়ার জন্য চ্যানেলের প্রস্থ নমনীয়ভাবে সামঞ্জস্য করা যায়। বৃহত্তর চ্যানেলগুলি আরও বেশি ওঠানামা ফিল্টার করতে পারে এবং ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করতে পারে। সংকীর্ণ চ্যানেলগুলি প্রবণতা পরিবর্তনগুলি আরও আগে সনাক্ত করতে পারে এবং ট্রেডিং ফ্রিকোয়েন্সি বাড়িয়ে তুলতে পারে।

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

এই কৌশলটির সাথে কিছু ঝুঁকিও রয়েছেঃ

  1. ভুয়া ব্রেকআউট এখনও সম্পূর্ণরূপে এড়ানো যায় না। দাম চ্যানেলের বাইরে ফাঁক হতে পারে। ঝুঁকি নিয়ন্ত্রণের জন্য পরামিতিগুলি যথাযথভাবে সামঞ্জস্য করতে হবে।

  2. যদি চ্যানেলটি খুব প্রশস্ত হয় তবে কিছু ট্রেডিং সুযোগ মিস করা যেতে পারে। সংবেদনশীলতা বাড়ানোর জন্য চ্যানেলটি যুক্তিসঙ্গতভাবে সংকীর্ণ করুন।

  3. খুব সংকীর্ণ চ্যানেলগুলি অকার্যকর বাণিজ্য বাড়িয়ে তুলতে পারে। স্থিতিশীলতা বাড়ানোর জন্য চ্যানেলের প্রস্থ যথাযথভাবে প্রসারিত করুন।

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

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

  1. পেরিওড প্যারামিটার অপ্টিমাইজ করুন। বিভিন্ন পণ্য এবং সময়সীমার সাথে মানিয়ে নিতে চলমান গড় গণনা চক্র সামঞ্জস্য করুন।

  2. রেঞ্জউইডথ প্যারামিটার অপ্টিমাইজ করুন। বাজারের অস্থিরতা এবং ব্যক্তিগত ঝুঁকি পছন্দ উপর ভিত্তি করে চ্যানেলের সুযোগ সামঞ্জস্য করুন।

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

  4. এন্ট্রি ফিল্টারিংয়ের জন্য অন্যান্য সূচকগুলির সাথে একত্রিত করুন। উদাহরণস্বরূপ, মিথ্যা এন্ট্রি হ্রাস করার জন্য ভলিউম যুক্ত করুন।

  5. কৌশল অ্যাপ্লিকেশন বৈচিত্র্য এবং প্যারামিটার অপ্টিমাইজ করুন। আরো পণ্য এবং সময়সীমা জুড়ে সর্বজনীন প্যারামিটার পরীক্ষা এবং অপ্টিমাইজ করুন।

সংক্ষিপ্তসার

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


/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

আরো