یہ حکمت عملی ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جو قیمت کی سیریز سے کم تعدد کے رجحان کے اجزاء کو نکالنے کے لئے کم تعدد فوریر ٹرانسفارم کا استعمال کرتی ہے اور رجحانات کی نشاندہی کرنے اور تجارتی سگنل پیدا کرنے کے لئے تین حرکت پذیر اوسط (تیز ، درمیانے اور سست) کو یکجا کرتی ہے۔ جب تیز رفتار ایم اے درمیانی ایم اے سے تجاوز کرتا ہے اور قیمت سست ایم اے سے اوپر ہوتی ہے تو یہ طویل ہوجاتا ہے ، اور جب تیز رفتار ایم اے درمیانی ایم اے سے نیچے ہوتا ہے اور قیمت سست ایم اے سے نیچے ہوتی ہے۔ یہ حکمت عملی درمیانی اور طویل مدتی رجحانات کو ٹریک کرنے کے لئے موزوں ہے۔
قیمتوں کی سیریز سے کم تعدد رجحان اجزاء کو نکالنے کے لئے کم تعدد فوریر ٹرانسفارم کا استعمال کریں۔ کم تعدد فوریر ٹرانسفارم مؤثر طریقے سے اعلی تعدد شور کو فلٹر کرسکتا ہے ، جس سے نکالے گئے رجحان سگنل ہموار ہوجاتے ہیں۔
رجحانات کا اندازہ کرنے کے لئے تین حرکت پذیر اوسط (تیز ، درمیانے اور سست) استعمال کریں۔ سست ایم اے کی مدت 200 ہے ، درمیانے ایم اے کی مدت 20 ہے ، اور تیز ایم اے کی مدت 5 ہے۔ سست ایم اے شور کو فلٹر کرتا ہے ، درمیانے ایم اے رجحان کی تبدیلیوں کو پکڑتا ہے ، اور تیز ایم اے تجارتی سگنل تیار کرتا ہے۔
جب تیز ایم اے میڈیم ایم اے سے اوپر کی طرف بڑھتا ہے اور قیمت سست ایم اے سے اوپر ہوتی ہے تو ، مارکیٹ کو بڑھتے ہوئے رجحان میں داخل ہونے کا فیصلہ کیا جاتا ہے ، طویل ہوجاتا ہے۔ جب تیز ایم اے میڈیم ایم اے سے نیچے کی طرف بڑھتا ہے اور قیمت سست ایم اے سے نیچے ہوتی ہے تو ، مارکیٹ کو نیچے کے رجحان میں داخل ہونے کا فیصلہ کیا جاتا ہے ، مختصر ہوجاتا ہے۔
یہ ایک رجحان کی پیروی کرنے والی حکمت عملی ہے۔ ایک بار جب رجحان کی نشاندہی ہوجاتی ہے تو ، یہ رجحان سے فائدہ اٹھانے کے ل position ممکنہ حد تک طویل عرصے تک پوزیشن برقرار رکھنے کی کوشش کرے گا۔
کم فریکوئنسی فوریئر ٹرانسفارم کا استعمال مؤثر طریقے سے اعلی فریکوئنسی شور کو فلٹر کرتا ہے، جس سے شناخت شدہ رجحان سگنل زیادہ قابل اعتماد اور مستحکم ہوتا ہے.
تیز ، درمیانے اور سست ایم اے کو اپنانے سے مؤثر طریقے سے مارکیٹ کے رجحانات کی تبدیلی کا اندازہ لگایا جاتا ہے اور جھوٹے اشاروں سے بچا جاتا ہے۔ سست ایم اے کی بڑی پیرامیٹر کی ترتیب مؤثر طریقے سے شور کو فلٹر کرتی ہے۔
اس حکمت عملی میں درمیانی اور طویل مدتی رجحانات کی پیروی کرنے میں اہم فوائد ہیں۔ ایک بار جب رجحان کی نشاندہی ہوجاتی ہے تو ، یہ رجحان کی پیروی کرنے کے لئے پوزیشنوں کو شامل کرتا رہے گا ، اس طرح اضافی منافع حاصل کرے گا۔
اس حکمت عملی میں پیرامیٹر کی اصلاح کی بڑی جگہ ہے۔ صارفین موافقت کو بہتر بنانے کے لئے مختلف اقسام اور سائیکلوں کے مطابق پیرامیٹرز کو ایڈجسٹ کرسکتے ہیں۔
رجحان کی پیروی کرنے والی حکمت عملی کی حیثیت سے ، یہ حکمت عملی اچانک واقعات کی وجہ سے رجحان کی تبدیلیوں کا مؤثر طریقے سے تعین اور رد عمل ظاہر نہیں کرسکتی ہے ، جس سے نقصانات میں اضافہ ہوسکتا ہے۔
اتار چڑھاؤ والی منڈیوں میں، یہ حکمت عملی زیادہ منافع بخش اور نقصان دہ تجارت پیدا کرے گی۔ لیکن یہ آخر کار منافع بخش بھی ہو سکتی ہے، جس کے لیے کچھ نفسیاتی برداشت کی ضرورت ہوتی ہے۔
روایتی رجحانات کی پیروی کرنے والی حکمت عملیوں میں
اسٹاپ نقصان کو واحد نقصان پر قابو پانے کے لئے ترتیب دیا جاسکتا ہے۔ حکمت عملی کی رسک مزاحمت کا اندازہ کرنے کے لئے بیک ٹسٹنگ میں اچانک واقعہ ٹیسٹ بھی شامل کیے جاسکتے ہیں۔
مختلف حرکت پذیر اوسط الگورتھم آزمائیں تاکہ زیادہ اقسام اور سائیکلوں کو اپنانا پڑے۔
خطرات کو کنٹرول کرنے کے لئے سٹاپ نقصان، مسلسل نقصان سے باہر نکلنے اور دیگر سٹاپ نقصان کی حکمت عملی شامل کریں.
رجحان کی طاقت کے اشارے شامل کریں تاکہ اتار چڑھاؤ اور کمزور رجحان مارکیٹوں میں بہت زیادہ لین دین سے بچنے کے لئے.
مشین لرننگ ماڈل شامل کریں تاکہ رجحان کی تبدیلیوں کا اندازہ لگایا جاسکے، جس سے حکمت عملی کو اچانک واقعات کے لئے کچھ حد تک موافقت پذیر بنایا جاسکے۔
یہ کم تعدد فوریر ٹرانسفارم ٹرینڈ چلتی اوسط حکمت عملی کے بعد شور کو فلٹر کرنے ، رجحانات کی نشاندہی کرنے اور رجحانات کو ٹریک کرنے کے فوائد رکھتا ہے۔ یہ درمیانی اور طویل مدتی ہولڈنگ کے لئے موزوں ہے۔ رجحان کی پیروی کرنے والی حکمت عملی کے طور پر ، یہ بنیادی طور پر رجحان کی الٹ اور پائیدار اتار چڑھاؤ کے خطرات کا سامنا کرتی ہے۔ ان خطرات سے نمٹنے کے لئے حکمت عملی موجود ہیں۔ عام طور پر ، اس حکمت عملی میں پیرامیٹر کی بڑی جگہ اور اعلی اصلاح کی صلاحیت ہے۔ یہ براہ راست تجارت میں تصدیق کرنے کے لئے مخصوص حکمت عملی کی ترقی اور رسک کنٹرول کی صلاحیتوں والے سرمایہ کاروں کے لئے موزوں ہے۔
/*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)