এই কৌশলটি একটি প্রবণতা অনুসরণকারী কৌশল যা দামের সিরিজ থেকে নিম্ন ফ্রিকোয়েন্সির প্রবণতা উপাদানগুলি বের করার জন্য নিম্ন-ফ্রিকোয়েন্সি ফুরিয়ার রূপান্তর ব্যবহার করে এবং প্রবণতা সনাক্ত করতে এবং ট্রেডিং সংকেত তৈরি করতে তিনটি চলমান গড় (দ্রুত, মাঝারি এবং ধীর) একত্রিত করে। যখন দ্রুত এমএ মাঝারি এমএ এর উপরে অতিক্রম করে এবং দাম ধীর এমএ এর উপরে থাকে এবং যখন দ্রুত এমএ মাঝারি এমএ এর নীচে অতিক্রম করে এবং দাম ধীর এমএ এর নীচে থাকে তখন এটি দীর্ঘ হয়। এই কৌশলটি মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা ট্র্যাক করার জন্য উপযুক্ত।
দামের সিরিজ থেকে নিম্ন-ফ্রিকোয়েন্সি ট্রেন্ড উপাদানগুলি বের করার জন্য নিম্ন-ফ্রিকোয়েন্সি ফুরিয়ে রূপান্তর ব্যবহার করুন। নিম্ন-ফ্রিকোয়েন্সি ফুরিয়ে রূপান্তর কার্যকরভাবে উচ্চ-ফ্রিকোয়েন্সি গোলমাল ফিল্টার করতে পারে, যা নিষ্কাশিত ট্রেন্ড সংকেতগুলি মসৃণ করে তোলে।
প্রবণতা বিচার করার জন্য তিনটি চলমান গড় (দ্রুত, মাঝারি এবং ধীর) ব্যবহার করুন। ধীর এমএ এর 200 এর একটি সময়কাল রয়েছে, মাঝারি এমএ এর 20 এর একটি সময়কাল রয়েছে এবং দ্রুত এমএ এর 5 এর একটি সময়কাল রয়েছে। ধীর এমএ গোলমাল ফিল্টার করে, মাঝারি এমএ প্রবণতা বিপরীত ধারণ করে এবং দ্রুত এমএ ট্রেডিং সংকেত উত্পন্ন করে।
যখন দ্রুত এমএ মাঝারি এমএ এর উপরে অতিক্রম করে এবং দাম ধীর এমএ এর উপরে থাকে, তখন বাজারটি একটি উত্থান প্রবণতায় প্রবেশ করছে বলে বিবেচিত হয়, দীর্ঘ যান। যখন দ্রুত এমএ মাঝারি এমএ এর নীচে অতিক্রম করে এবং দাম ধীর এমএ এর নীচে থাকে, তখন বাজারটি হ্রাস প্রবণতায় প্রবেশ করছে বলে বিবেচিত হয়, শর্ট যান।
এটি একটি প্রবণতা অনুসরণকারী কৌশল। একবার একটি প্রবণতা সনাক্ত করা হলে, এটি প্রবণতা থেকে মুনাফা অর্জনের জন্য যতটা সম্ভব অবস্থান ধরে রাখার চেষ্টা করবে।
নিম্ন-ফ্রিকোয়েন্সি ফুরিয়ে রূপান্তর কার্যকরভাবে উচ্চ-ফ্রিকোয়েন্সি গোলমাল ফিল্টার করে, সনাক্ত ট্রেন্ড সংকেতগুলিকে আরও নির্ভরযোগ্য এবং স্থিতিশীল করে তোলে।
দ্রুত, মাঝারি এবং ধীর গতির এমএ গ্রহণের ফলে বাজারের প্রবণতার বিপরীতমুখীতা কার্যকরভাবে বিচার করা হয় এবং মিথ্যা সংকেত এড়ানো হয়। ধীর গতির এমএ এর বড় প্যারামিটার সেটিং কার্যকরভাবে গোলমাল ফিল্টার করে।
এই কৌশলটি মাঝারি ও দীর্ঘমেয়াদী প্রবণতা ট্র্যাক করার ক্ষেত্রে উল্লেখযোগ্য সুবিধা রয়েছে। একবার একটি প্রবণতা চিহ্নিত হয়ে গেলে, এটি প্রবণতা ট্র্যাক করার জন্য অবস্থান যুক্ত করতে থাকবে, যার ফলে অতিরিক্ত রিটার্ন পাওয়া যাবে।
এই কৌশলটিতে বড় প্যারামিটার অপ্টিমাইজেশন স্পেস রয়েছে। ব্যবহারকারীরা অভিযোজনযোগ্যতা উন্নত করতে বিভিন্ন জাত এবং চক্র অনুযায়ী প্যারামিটারগুলি সামঞ্জস্য করতে পারেন।
ট্রেন্ড অনুসরণকারী কৌশল হিসাবে, এই কৌশলটি হঠাৎ ঘটনার কারণে প্রবণতা বিপরীতমুখী হওয়ার জন্য কার্যকরভাবে নির্ধারণ এবং প্রতিক্রিয়া জানাতে পারে না, যা ক্ষতির বৃদ্ধি হতে পারে।
বাজারের অস্থিরতায়, এই কৌশলটি লাভজনক এবং ক্ষতিগ্রস্ত ট্রেড তৈরি করবে। কিন্তু এটি এখনও লাভজনক হতে পারে, শেষ পর্যন্ত, কিছু মানসিক সহনশীলতার প্রয়োজন।
ঐতিহ্যবাহী প্রবণতা অনুসরণকারী কৌশলগুলি
স্টপ লস একক ক্ষতি নিয়ন্ত্রণ করতে সেট করা যেতে পারে। কৌশলটির ঝুঁকি প্রতিরোধের মূল্যায়নের জন্য হঠাৎ ইভেন্ট পরীক্ষাগুলি ব্যাকটেস্টিংয়ে অন্তর্ভুক্ত করা যেতে পারে।
আরও বিভিন্ন প্রজাতি এবং চক্রের সাথে মানিয়ে নিতে বিভিন্ন চলমান গড় অ্যালগরিদম চেষ্টা করুন।
ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস, ক্রমাগত লস আউট এবং অন্যান্য স্টপ লস কৌশল যোগ করুন।
অস্থির বা দুর্বল প্রবণতা বাজারে খুব বেশি লেনদেন এড়াতে প্রবণতা শক্তির সূচক যুক্ত করুন।
মেশিন লার্নিং মডেল যোগ করুন প্রবণতা বিপরীত বিচার করার জন্য, কৌশল কিছু আকস্মিক ঘটনার জন্য অভিযোজিত করে তোলে।
চলমান গড় কৌশল অনুসরণ করে এই নিম্ন ফ্রিকোয়েন্সি ফুরিয়ার রূপান্তর প্রবণতা শব্দ ফিল্টারিং, প্রবণতা সনাক্তকরণ, এবং প্রবণতা ট্র্যাকিং সুবিধার আছে। এটি মাঝারি এবং দীর্ঘমেয়াদী হোল্ডিং জন্য উপযুক্ত। একটি প্রবণতা অনুসরণ কৌশল হিসাবে, এটি প্রধানত প্রবণতা বিপরীত এবং স্থায়ী দোলনের ঝুঁকি সম্মুখীন হয়। এই ঝুঁকিগুলির জন্য coping কৌশল আছে। সাধারণভাবে, এই কৌশল বড় পরামিতি স্থান এবং উচ্চ অপ্টিমাইজেশান সম্ভাবনা আছে। এটি নির্দিষ্ট কৌশল উন্নয়ন এবং ঝুঁকি নিয়ন্ত্রণ ক্ষমতা সঙ্গে বিনিয়োগকারীদের লাইভ ট্রেডিং যাচাই করার জন্য উপযুক্ত।
/*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)