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


সৃষ্টির তারিখ: 2023-12-05 14:56:06 অবশেষে সংশোধন করুন: 2023-12-05 14:56:06
অনুলিপি: 0 ক্লিকের সংখ্যা: 807
1
ফোকাস
1619
অনুসারী

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

ওভারভিউ

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

কৌশল নীতি

  1. নিম্ন-ফ্রিকোয়েন্সি ক্যালিফার রূপান্তর ব্যবহার করে মূল্যের ক্রমের নিষ্কাশন নিম্ন-ফ্রিকোয়েন্সি প্রবণতা উপাদান। নিম্ন-ফ্রিকোয়েন্সি ক্যালিফার রূপান্তর কার্যকরভাবে উচ্চ-ফ্রিকোয়েন্সি গোলমাল ফিল্টার করতে পারে, যা প্রবণতা সংকেতকে আরও মসৃণ করে তোলে।

  2. প্রবণতা নির্ণয় করার জন্য দ্রুত এবং ধীর তিনটি চলমান গড়। যার মধ্যে ধীর এমএ 200 চক্র, মাঝারি এমএ 20 চক্র এবং দ্রুত এমএ 5 চক্র। ধীর এমএ শব্দ ফিল্টার করে, মাঝারি এমএ প্রবণতা ঘুরিয়ে ধরে, দ্রুত এমএ ট্রেডিং সংকেত দেয়।

  3. যখন দ্রুত এমএ মধ্যম এমএ অতিক্রম করে এবং দাম ধীর এমএ এর চেয়ে বেশি হয়, তখন বাজারটি উত্থান প্রবণতাতে প্রবেশ করে, আরও বেশি করে; যখন দ্রুত এমএ মধ্যম এমএ অতিক্রম করে এবং দাম ধীর এমএ এর চেয়ে কম হয়, তখন বাজারটি পতনের প্রবণতাতে প্রবেশ করে, খালি করে দেয়।

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

সামর্থ্য বিশ্লেষণ

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

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

  3. এই কৌশলটি মাঝারি-দীর্ঘ লাইন প্রবণতা অনুসরণ করার সুস্পষ্ট সুবিধা রয়েছে। যখন বাজারের প্রবণতা প্রবেশের বিচার করা হয়, তখন প্রবণতা অনুসরণ করার জন্য পজিশনিং অব্যাহত থাকে, যার ফলে অতিরিক্ত আয় হয়।

  4. এই কৌশলটি প্যারামিটার অপ্টিমাইজেশনের জন্য প্রশস্ত, ব্যবহারকারীরা বিভিন্ন জাত এবং সময়কাল অনুসারে প্যারামিটারগুলি সামঞ্জস্য করতে পারে, এবং এটি অত্যন্ত অভিযোজিত।

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

  1. ট্রেন্ড ট্র্যাকিং কৌশল হিসেবে, এই কৌশলটি কার্যকরভাবে মূল্যায়ন করতে পারে না এবং প্রবণতা বিপরীতকরণে প্রতিক্রিয়া জানাতে পারে, যা ক্ষতির বৃদ্ধি হতে পারে।

  2. এই কৌশলটি ঝড়ের সময় বেশি লাভজনক এবং ক্ষতিগ্রস্ত লেনদেন করে। তবে শেষ পর্যন্ত এটি লাভজনক হতে পারে এবং কিছু মানসিক সহনশীলতা প্রয়োজন।

  3. ঐতিহ্যগত ট্রেন্ড ট্র্যাকিং কৌশলগুলি হাইড্রোজেন তৈরির জন্য সহজ, এবং ট্রেন্ড থেকে প্রারম্ভিক প্রস্থানগুলি এই কৌশলগুলির জন্য একটি সমস্যা।

  4. স্টপ লস একক ক্ষতি নিয়ন্ত্রণ করতে সেট করা যেতে পারে। এছাড়াও, প্রতিক্রিয়া মধ্যে যোগ করা যেতে পারে অপ্রত্যাশিত ঘটনা পরীক্ষা, কৌশল ঝুঁকি প্রতিরোধের ক্ষমতা মূল্যায়ন।

অপ্টিমাইজেশান দিক

  1. বিভিন্ন প্রজাতি এবং সময়কালের জন্য বিভিন্ন চলমান গড় অ্যালগরিদম চেষ্টা করুন।

  2. ঝুঁকি নিয়ন্ত্রণের জন্য ক্ষতি প্রতিরোধের কৌশল যেমন ক্ষতি বন্ধ করা, ক্রমাগত ক্ষতি থেকে বেরিয়ে আসা।

  3. প্রবণতা শক্তির সূচক বৃদ্ধি করুন, যাতে অস্থিরতা এবং দুর্বল প্রবণতার সময় অত্যধিক লেনদেন এড়ানো যায়।

  4. মেশিন লার্নিং মডেল যুক্ত করে ট্রেন্ড রিভার্সনের বিচার করা হয়, যাতে কৌশলগুলি অপ্রত্যাশিত ঘটনাগুলির জন্য কিছুটা অভিযোজিত হতে পারে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-11-27 00:00:00
end: 2023-11-29 02: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/
// © 03.freeman

//@version=4
strategy("FTSMA", overlay=true )
src=input(close,"Source")
slowMA=input(200,"Slow MA period")
mediumMA=input(20,"Mid MA period")
fastMA=input(5,"Fast MA period")
plotSMA=input(true,"Use MA")
sin1=input(1,"First sinusoid",minval=1)
sin2=input(2,"Second sinusoid",minval=1)
sin3=input(3,"Third sinusoid",minval=1)
smoothinput = input('EMA', title = "MA Type", options =['EMA', 'SMA', 'ALMA','FRAMA','RMA', 'SWMA', 'VWMA','WMA','LinearRegression'])
linearReg=input(false, "Use linear regression?")
linregLenght=input(13, "Linear regression lenght")
linregOffset=input(0, "Linear regression offset")

//------FRAMA ma---------
ma(src, len) =>
    float result = 0
    int len1 = len/2
    frama_SC=200
    frama_FC=1
    e = 2.7182818284590452353602874713527
    w = log(2/(frama_SC+1)) / log(e) // Natural logarithm (ln(2/(SC+1))) workaround
    H1 = highest(high,len1)
    L1 = lowest(low,len1)
    N1 = (H1-L1)/len1
    H2_ = highest(high,len1)
    H2 = H2_[len1]
    L2_ = lowest(low,len1)
    L2 = L2_[len1]
    N2 = (H2-L2)/len1
    H3 = highest(high,len)
    L3 = lowest(low,len)
    N3 = (H3-L3)/len
    dimen1 = (log(N1+N2)-log(N3))/log(2)
    dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
    alpha1 = exp(w*(dimen-1))
    oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
    oldN = (2-oldalpha)/oldalpha
    N = (((frama_SC-frama_FC)*(oldN-1))/(frama_SC-1))+frama_FC
    alpha_ = 2/(N+1)
    alpha = alpha_<2/(frama_SC+1)?2/(frama_SC+1):(alpha_>1?1:alpha_)
    frama = 0.0
    frama :=(1-alpha)*nz(frama[1]) + alpha*src
    result := frama
    result

// ----------MA calculation - ChartArt and modified by 03.freeman-------------
calc_ma(src,l) => 
    _ma = smoothinput=='SMA'?sma(src, l):smoothinput=='EMA'?ema(src, l):smoothinput=='WMA'?wma(src, l):smoothinput=='LinearRegression'?linreg(src, l,0):smoothinput=='VWMA'?vwma(src,l):smoothinput=='RMA'?rma(src, l):smoothinput=='ALMA'?alma(src,l,0.85,6):smoothinput=='SWMA'?swma(src):smoothinput=='FRAMA'?ma(sma(src,1),l):na
    
//----------------------------------------------


//pi = acos(-1)
// Approximation of Pi in _n terms --- thanks to e2e4mfck
f_pi(_n) =>
    _a = 1. / (4. * _n + 2)
    _b = 1. / (6. * _n + 3)
    _pi = 0.
    for _i = _n - 1 to 0
        _a := 1 / (4. * _i + 2) - _a / 4.
        _b := 1 / (6. * _i + 3) - _b / 9.
    _pi := (4. * _a) + (4. * _b) - _pi
pi=f_pi(20)

//---Thanks to xyse----https://www.tradingview.com/script/UTPOoabQ-Low-Frequency-Fourier-Transform/
//Declaration of user-defined variables
N = input(defval=64, title="Lookback Period", type=input.integer, minval=2, maxval=600, confirm=false, step=1, options=[2,4,8,16,32,64,128,256,512,1024,2048,4096])

//Real part of the Frequency Domain Representation
ReX(k) =>
    sum = 0.0
    for i=0 to N-1
        sum := sum + src[i]*cos(2*pi*k*i/N)
    return = sum
    
//Imaginary part of the Frequency Domain Representation
ImX(k) =>
    sum = 0.0
    for i=0 to N-1
        sum := sum + src[i]*sin(2*pi*k*i/N)
    return = -sum

//Get sinusoidal amplitude from frequency domain  
ReX_(k) =>
    case = 0.0
    if(k!=0 and k!=N/2)
        case := 2*ReX(k)/N
    if(k==0)
        case := ReX(k)/N
    if(k==N/2)
        case := ReX(k)/N
    return = case
    
 //Get sinusoidal amplitude from frequency domain  
ImX_(k) =>
    return = -2*ImX(k)/N
    
//Get full Fourier Transform
x(i, N) =>
    sum1 = 0.0
    sum2 = 0.0
    for k=0 to N/2
        sum1 := sum1 + ReX_(k)*cos(2*pi*k*i/N)
    for k=0 to N/2
        sum2 := sum2 + ImX_(k)*sin(2*pi*k*i/N)
    return = sum1+sum2
    
//Get single constituent sinusoid
sx(i, k) =>
    sum1 = ReX_(k)*cos(2*pi*k*i/N)
    sum2 = ImX_(k)*sin(2*pi*k*i/N)
    return = sum1+sum2
//Calculations for strategy
SLOWMA = plotSMA?calc_ma(close+sx(0,sin1),slowMA):close+sx(0,sin1)
MEDMA = plotSMA?calc_ma(close+sx(0,sin2),mediumMA):close+sx(0,sin2)
FASTMA = plotSMA?calc_ma(close+sx(0,sin3),fastMA):close+sx(0,sin3)

SLOWMA := linearReg?linreg(SLOWMA,linregLenght,linregOffset):SLOWMA
MEDMA := linearReg?linreg(MEDMA,linregLenght,linregOffset):MEDMA
FASTMA := linearReg?linreg(FASTMA,linregLenght,linregOffset):FASTMA

//Plot 3 Low-Freq Sinusoids
plot(SLOWMA, color=color.green)
plot(MEDMA, color=color.red)
plot(FASTMA, color=color.blue)

//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

longCondition = FASTMA>MEDMA and close > SLOWMA             //crossover(FASTMA, MEDMA) and close > SLOWMA
if (longCondition)
    strategy.entry("Long Entry", strategy.long)

shortCondition = FASTMA<MEDMA and close < SLOWMA            //crossunder(FASTMA, MEDMA) and close < SLOWMA
if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Long Entry", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Short Entry", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)