গতি ট্র্যাকিং অভিযোজিত পরিসংখ্যানগত মধ্যস্থতা কৌশল

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

img

সারসংক্ষেপ

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

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

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

সুবিধা

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

ঝুঁকি

  1. গাণিতিক মডেলের তাত্ত্বিক প্রকৃতি, লাইভ ট্রেডিংয়ে কম পারফর্ম করতে পারে।
  2. মূল পরামিতিগুলির জন্য বিশেষজ্ঞের প্রয়োজন, ভুল সেটিংস লাভজনকতার ক্ষতি করতে পারে।
  3. যদি ইস্যুটি বিলম্বিত হয় তবে কিছু ট্রেডিং সুযোগ হারাতে পারে।
  4. অত্যন্ত অস্থির বাজারে হুইপসাউসের জন্য সংবেদনশীল।

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

উন্নতির দিকনির্দেশ

  1. সেরা সমন্বয় খুঁজে পেতে পরামিতি আরও অপ্টিমাইজ করুন।
  2. মেশিন লার্নিং পদ্ধতি প্রয়োগ করুন স্বয়ংক্রিয়ভাবে সর্বোত্তম পরামিতি নির্বাচন করতে।
  3. নির্দিষ্ট বাজারের পরিবেশে কৌশল সক্রিয় করতে ফিল্টার যোগ করুন।
  4. বিভ্রান্তিকর সংকেত ফিল্টার করার জন্য অন্যান্য সূচক অন্তর্ভুক্ত করুন।
  5. বিভিন্ন গাণিতিক মডেল অ্যালগরিদম চেষ্টা করুন।

সিদ্ধান্ত

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


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche
//@version=5

strategy("Nadaraya-Watson Envelope Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=20)

// Helper Functions
getEnvelopeBounds(_atr, _nearFactor, _farFactor, _envelope) => 
    _upperFar = _envelope + _farFactor*_atr
    _upperNear = _envelope + _nearFactor*_atr
    _lowerNear = _envelope - _nearFactor*_atr
    _lowerFar = _envelope - _farFactor*_atr
    _upperAvg = (_upperFar + _upperNear) / 2
    _lowerAvg = (_lowerFar + _lowerNear) / 2 
    [_upperNear, _upperFar, _upperAvg, _lowerNear, _lowerFar, _lowerAvg]

customATR(length, _high, _low, _close) =>
    trueRange = na(_high[1])? math.log(_high)-math.log(_low) : math.max(math.max(math.log(_high) - math.log(_low), math.abs(math.log(_high) - math.log(_close[1]))), math.abs(math.log(_low) - math.log(_close[1])))
    ta.rma(trueRange, length)

customKernel(x, h, alpha, x_0) =>
    sumWeights = 0.0
    sumXWeights = 0.0
    for i = 0 to h
        weight = math.pow(1 + (math.pow((x_0 - i), 2) / (2 * alpha * h * h)), -alpha)
        sumWeights := sumWeights + weight
        sumXWeights := sumXWeights + weight * x[i]
    sumXWeights / sumWeights

// Custom Settings
customLookbackWindow = input.int(8, 'Lookback Window (Custom)', group='Custom Settings')
customRelativeWeighting = input.float(8., 'Relative Weighting (Custom)', step=0.25, group='Custom Settings')
customStartRegressionBar = input.int(25, "Start Regression at Bar (Custom)", group='Custom Settings')

// Envelope Calculations
customEnvelopeClose = math.exp(customKernel(math.log(close), customLookbackWindow, customRelativeWeighting, customStartRegressionBar))
customEnvelopeHigh = math.exp(customKernel(math.log(high), customLookbackWindow, customRelativeWeighting, customStartRegressionBar))
customEnvelopeLow = math.exp(customKernel(math.log(low), customLookbackWindow, customRelativeWeighting, customStartRegressionBar))
customEnvelope = customEnvelopeClose
customATRLength = input.int(60, 'ATR Length (Custom)', minval=1, group='Custom Settings')
customATR = customATR(customATRLength, customEnvelopeHigh, customEnvelopeLow, customEnvelopeClose)
customNearATRFactor = input.float(1.5, 'Near ATR Factor (Custom)', minval=0.5, step=0.25, group='Custom Settings')
customFarATRFactor = input.float(2.0, 'Far ATR Factor (Custom)', minval=1.0, step=0.25, group='Custom Settings')
[customUpperNear, customUpperFar, customUpperAvg, customLowerNear, customLowerFar, customLowerAvg] = getEnvelopeBounds(customATR, customNearATRFactor, customFarATRFactor, math.log(customEnvelopeClose))

// Colors
customUpperBoundaryColorFar = color.new(color.red, 60)
customUpperBoundaryColorNear = color.new(color.red, 80)
customBullishEstimatorColor = color.new(color.teal, 50)
customBearishEstimatorColor = color.new(color.red, 50)
customLowerBoundaryColorNear = color.new(color.teal, 80)
customLowerBoundaryColorFar = color.new(color.teal, 60)

// Plots
customUpperBoundaryFar = plot(math.exp(customUpperFar), color=customUpperBoundaryColorFar, title='Upper Boundary: Far (Custom)')
customUpperBoundaryAvg = plot(math.exp(customUpperAvg), color=customUpperBoundaryColorNear, title='Upper Boundary: Average (Custom)')
customUpperBoundaryNear = plot(math.exp(customUpperNear), color=customUpperBoundaryColorNear, title='Upper Boundary: Near (Custom)') 
customEstimationPlot = plot(customEnvelopeClose, color=customEnvelope > customEnvelope[1] ? customBullishEstimatorColor : customBearishEstimatorColor, linewidth=2, title='Custom Estimation')
customLowerBoundaryNear = plot(math.exp(customLowerNear), color=customLowerBoundaryColorNear, title='Lower Boundary: Near (Custom)')
customLowerBoundaryAvg = plot(math.exp(customLowerAvg), color=customLowerBoundaryColorNear, title='Lower Boundary: Average (Custom)') 
customLowerBoundaryFar = plot(math.exp(customLowerFar), color=customLowerBoundaryColorFar, title='Lower Boundary: Far (Custom)')

// Fills
fill(customUpperBoundaryFar, customUpperBoundaryAvg, color=customUpperBoundaryColorFar, title='Upper Boundary: Farmost Region (Custom)')
fill(customUpperBoundaryNear, customUpperBoundaryAvg, color=customUpperBoundaryColorNear, title='Upper Boundary: Nearmost Region (Custom)')
fill(customLowerBoundaryNear, customLowerBoundaryAvg, color=customLowerBoundaryColorNear, title='Lower Boundary: Nearmost Region (Custom)')
fill(customLowerBoundaryFar, customLowerBoundaryAvg, color=customLowerBoundaryColorFar, title='Lower Boundary: Farmost Region (Custom)')


longCondition = ta.crossover(close, customEnvelopeLow)
if (longCondition)
    strategy.entry("Buy", strategy.long)

exitLongCondition = ta.crossover(customEnvelopeHigh, close)
if (exitLongCondition)
    strategy.close("Buy")


আরো