বেসলাইন ক্রস ক্লাইফাইয়ার ATR Volatility & HMA Trend Bias Mean Reversal Strategy

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

img

সারসংক্ষেপ

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

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

কৌশলটি বেসলাইন হিসাবে একটি 37-পরিঘরের চলমান গড় ব্যবহার করে। যখন মূল্য এই বেসলাইন থেকে উপরে ভাঙ্গবে, এটি একটি ক্রয় সংকেত উত্পন্ন করে এবং যখন এটি উপরে থেকে ভেঙে যায়, এটি একটি বিক্রয় সংকেত উত্পন্ন করে। মিথ্যা সংকেত এড়ানোর জন্য, কৌশলটির প্রয়োজন হয় যে মূল্যটি বেসলাইনটি প্রবেশ করার পরে 2xATR অস্থিরতার বাইরে চলে যায় যাতে সংকেতগুলির বৈধতা নিশ্চিত হয়। এছাড়াও, কৌশলটি প্রধান প্রবণতা বিচার করতে 11 পিরিয়ড এইচএমএ ব্যবহার করে। এটি কেবলমাত্র বৈধ সংকেতগুলি নিশ্চিত করে যখন মূল্য অনুপ্রবেশের বেসলাইনটি প্রতিকূল নির্বাচন রোধ করতে এইচএমএর দিকের সাথে সারিবদ্ধ করা হয়।

মুনাফা গ্রহণের জন্য, কৌশলটি এক বা একাধিক (দুই বা তিনটি) মুনাফা গ্রহণের স্তর ব্যবহার সমর্থন করে। স্টপ লসের জন্য, এটি কেবল লং এবং শর্ট পজিশনের জন্য SL হিসাবে উপরের এবং নীচের ব্যান্ড লাইনগুলি নেয়।

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

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

ঝুঁকি ও সমাধান

মূল ঝুঁকিটি হ'ল এটিআর অস্থিরতা ফিল্টারটি কিছু বৈধ সংকেত সরিয়ে ফেলতে পারে, যার ফলে সময়মতো অবস্থানগুলি খোলার ব্যর্থতা ঘটে। এছাড়াও, এইচএমএ প্রবণতা রায়টি কখনও কখনও খুব গুরুত্বপূর্ণ হয় না যখন দামটি কেবল স্বল্পমেয়াদী পুনরুদ্ধার হয়, বিপরীত হয় না। এটি অপ্রয়োজনীয় স্টপ লস হতে পারে। ঝুঁকিগুলি হ্রাস করার জন্য, আমরা আরও সংকেত দেওয়ার জন্য এটিআর অস্থিরতা ফিল্টার প্যারামিটারটি হ্রাস করতে পারি। আমরা স্বল্পমেয়াদী ওঠানামা থেকে হস্তক্ষেপ রোধ করে বড় প্রবণতা রায় করার জন্য দীর্ঘমেয়াদী এইচএমএ ব্যবহার করতে এইচএমএ সময়ের প্যারামিটারটিও সামঞ্জস্য করতে পারি।

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

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

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

  2. মডেলের দৃঢ়তা বাড়াতে বাজারের পরিস্থিতি বিচার করার জন্য আরও ফিল্টার বা দোলক যুক্ত করুন।

  3. মুনাফা গ্রহণের জন্য পরামিতিগুলি অনুকূল করা, আরও মূল্য স্তর এবং বরাদ্দ স্কিম পরীক্ষা করা।

  4. আরও কার্যকর ট্রেডিং সিগন্যাল তৈরির জন্য মেশিন লার্নিং মডেল অন্তর্ভুক্ত করা।

সিদ্ধান্ত

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


/*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/
// © sevencampbell

//@version=5
strategy(title="Baseline Cross Qualifier Volatility Strategy with HMA Trend Bias", overlay=true)

// --- User Inputs ---

// Baseline Inputs
baselineLength = input.int(title="Baseline Length", defval=20)
baseline = ta.sma(close, baselineLength)

// PBCQ Inputs
pbcqEnabled = input.bool(title="Post Baseline Cross Qualifier Enabled", defval=true)
pbcqBarsAgo = input.int(title="Post Baseline Cross Qualifier Bars Ago", defval=3)

// Volatility Inputs
atrLength = input.int(title="ATR Length", defval=14)
multiplier = input.float(title="Volatility Multiplier", defval=2.0)
rangeMultiplier = input.float(title="Volatility Range Multiplier", defval=1.0)
qualifierMultiplier = input.float(title="Volatility Qualifier Multiplier", defval=0.5)

// Take Profit Inputs
takeProfitType = input.string(title="Take Profit Type", options=["1 Take Profit", "2 Take Profits", "3 Take Profits"], defval="1 Take Profit")

// HMA Inputs
hmaLength = input.int(title="HMA Length", defval=50)

// --- Calculations ---

// ATR
atr = ta.atr(atrLength)

// Range Calculation
rangeHigh = baseline + rangeMultiplier * atr
rangeLow = baseline - rangeMultiplier * atr
rangeColor = rangeLow <= close and close <= rangeHigh ? color.yellow : na
bgcolor(rangeColor, transp=90)

// Qualifier Calculation
qualifier = qualifierMultiplier * atr

// Dot Calculation
isLong = close > baseline and (close - baseline) >= qualifier and close > ta.hma(close, hmaLength)
isShort = close < baseline and (baseline - close) >= qualifier and close < ta.hma(close, hmaLength)
colorDot = isLong ? color.green : isShort ? color.red : na
plot(isLong or isShort ? baseline : na, color=colorDot, style=plot.style_circles, linewidth=3)

// --- Strategy Logic ---

// PBCQ
pbcqValid = not pbcqEnabled or low[pbcqBarsAgo] > baseline

// Entry Logic
longCondition = isLong and pbcqValid
shortCondition = isShort and pbcqValid
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic
if (takeProfitType == "1 Take Profit")
    strategy.exit("TP/SL", "Long", limit=rangeHigh, stop=rangeLow)
    strategy.exit("TP/SL", "Short", limit=rangeLow, stop=rangeHigh)
else if (takeProfitType == "2 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh)
    strategy.exit("TP1", "Short", qty=strategy.position_size * 0.5, limit=rangeLow / 2)
    strategy.exit("TP2", "Short", qty=strategy.position_size * 0.5, limit=rangeLow)
else if (takeProfitType == "3 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 0.75)
    strategy.exit("TP3", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 1.5)


আরো