গাউসিয়ান মুভিং এভারেজ ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখঃ 2024-01-03 16:06:45
ট্যাগঃ

img

সারসংক্ষেপ

এই কৌশলটি গাউসিয়ান বিতরণের ধারণা প্রয়োগ করে এবং হেকিন-আশি মোমবাতি বন্ধের দামের 10-পরিসরের এক্সপোনেন্সিয়াল চলমান গড়ের উপর ভিত্তি করে Z- স্কোর গণনা করে। তারপরে বক্ররেখাটি তাদের অতিক্রম করার সময় প্রবেশ এবং প্রস্থান সংকেতের জন্য Z- স্কোরের 20-পরিসরের এক্সপোনেন্সিয়াল চলমান গড়ের উপর ভিত্তি করে থ্রেশহোল্ডগুলি সেট করা হয়।

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

  1. হেকিন-আশি মোমবাতি বন্ধের মূল্যের দশ-পরিসরের এক্সপোনেন্সিয়াল চলমান গড় গণনা করুন।

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

  3. Z-স্কোরের 20 পেরিওড এক্সপোনেন্সিয়াল মুভিং মিডিয়ার থেকে emaScore নামে একটি বক্ররেখা পাওয়া যায়। এই বক্ররেখা Z-স্কোরের দীর্ঘমেয়াদী প্রবণতা প্রতিফলিত করে।

  4. emaScore ডেটার বিতরণের উপর ভিত্তি করে উপরের এবং নীচের থ্রেশহোল্ডগুলি সেট করুন। কার্ভের কিছু ওঠানামা বিবেচনা করে, 90% এবং 10% স্তরগুলি থ্রেশহোল্ড হিসাবে বেছে নেওয়া হয়।

  5. দীর্ঘ যখন emaScore মাঝারি রেখা বা নীচের প্রান্তিক সীমা অতিক্রম করে। সংক্ষিপ্ত যখন emaScore উপরের প্রান্তিক সীমা অতিক্রম করে, নিম্ন প্রান্তিক সীমা অতিক্রম করে বা 100-পরিসরের সর্বোচ্চ নীচে।

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

  1. Z-স্কোরের মাধ্যমে গাউসিয়ান বিতরণ ধারণা প্রয়োগ করুন স্বাভাবিকতা বিচার করতে এবং মিথ্যা ব্রেকআউট ফিল্টার করতে।

  2. দীর্ঘমেয়াদী প্রবণতা নির্ধারণের জন্য ডাবল এক্সপোনেন্সিয়াল মুভিং মিডিয়ার একটি ফিল্টারিং প্রভাব রয়েছে।

  3. যুক্তিসঙ্গত থ্রেশহোল্ড সেটিং ভুল ট্রেডিংয়ের সম্ভাবনা কমিয়ে দেয়।

  4. ১০০ পেরিওডের সর্বোচ্চ/নিম্নতম পয়েন্টগুলি অন্তর্ভুক্ত করা বিপরীতমুখী সুযোগগুলি ধরতে সহায়তা করে।

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

  1. জেড-স্কোর এবং এমএ এর সমন্বয় প্যারামিটার টিউনিং এর জন্য সংবেদনশীল। অপ্টিমাইজেশান প্রয়োজন।

  2. সঠিক থ্রেশহোল্ডের মাত্রা সরাসরি কৌশল বৈধতার সাথে সম্পর্কিত। খুব প্রশস্ত বা সংকীর্ণ ব্যর্থ হবে।

  3. ১০০-পরিসরের সর্বোচ্চ/নিম্নতম পয়েন্টগুলি সহজেই ভুল সংকেত তৈরি করতে পারে।

  4. হেকিন-আশি নিজেও কিছুটা পিছিয়ে আছে।

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

  1. বিভিন্ন চলমান গড়ের সময় পরীক্ষা করুন, Z-স্কোর ব্যাক উইন্ডো।

  2. অটো অপ্টিমাইজ পরামিতিগুলির জন্য ওয়াক ফরওয়ার্ড বিশ্লেষণ ব্যবহার করুন।

  3. বিভিন্ন থ্রেশহোল্ড সেটিং পদ্ধতি চেষ্টা করুন, যেমন এসটিডি মাল্টিপল।

  4. ভুল সংকেত রোধ করার জন্য সর্বোচ্চ/নিম্নতম পয়েন্ট লজিক উন্নত করুন।

  5. হেইকিন-আশিকে প্রতিস্থাপনের জন্য অন্যান্য মোমবাতি প্রকার বা সাধারণ মূল্য পরীক্ষা করুন।

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

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


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
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/
// © jensenvilhelm

// Here is an attempt to create a robust strategy for BTCUSD on a 5 minute chart
// I can't seem to get this code to work the way i want.... if you want to give it a try, please let me know -
// how it goes in comment section. 

//@version=5
// Define the strategy settings
strategy("The Z-score", shorttitle="TZS", overlay=true)

// User can set the start date for the strategy
startDate = timestamp("2023 06 01")

// Heikin-Ashi Open, Close, High and Low calculation
haClose = ohlc4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haHigh = math.max(nz(haOpen, high), nz(haClose, high), high)
haLow = math.min(nz(haOpen, low), nz(haClose, low), low)

// Function to calculate the Z-Score
z_score(_series, _length) =>
    _mean = ta.sma(_series, _length)
    _stddev = ta.stdev(_series, _length)
    (_series - _mean) / _stddev

// Compute the score and its EMA
score = z_score(ta.ema(haClose, 10), 25)
emaScore = ta.ema(score, 20)

// Calculate lower and upper thresholds using percentiles of EMA
lowerBlue = ta.percentile_linear_interpolation(emaScore, 50, 10)
upperBlue = ta.percentile_linear_interpolation(emaScore, 50, 90)

// Calculate the middle line as 50th percentile
middleLine = ta.percentile_linear_interpolation(emaScore, 50, 50) 

// Plot the EMA of the score and the thresholds
plot(emaScore,"The White Line", color=color.white, linewidth=2)
plot(lowerBlue,"Lower Blue Line", linewidth=2)
plot(upperBlue, "Upper Blue Line", linewidth=2)
plot(middleLine, "Middle Yellow Line", linewidth=2, color=color.yellow)
plot(score,"The Z-Score Mixed With EMA 10", color=color.green)

// Calculate highest and lowest EMA score over 100 bars period
highest = ta.highest(emaScore, 100)
lowest = ta.lowest(emaScore, 100)

// Plot highest and lowest EMA score lines 
plot(highest, "Highest of emaScore", color=color.red, linewidth=2)
plot(lowest, "Lowest of emaScore", color=color.red, linewidth=2)

// Define entry and exit conditions for long and short positions
longCon = ta.crossover(score, lowerBlue) or ta.crossover(emaScore, middleLine)
addOn = ta.crossover(score, highest)
shortCon = ta.crossunder(emaScore, upperBlue) or ta.crossunder(emaScore, lowerBlue) or ta.crossunder(emaScore, highest)

// Execute trading logic based on conditions and after the start date
if (time >= startDate)
    if longCon
        strategy.entry("Long", strategy.long)
        if shortCon
            strategy.close("Long")
    if addOn
        strategy.entry("LongNR2", strategy.long)
        if shortCon
            strategy.close("LongNR2")
    
    if shortCon
        strategy.entry("Short", strategy.short)
        if longCon
            strategy.close("Short")


আরো