یہ حکمت عملی وسیع پیمانے پر چلنے والی اوسط پر مبنی ہے ، جو تیزی سے چلنے والی اوسط کے گولڈن فورک کے ذریعہ تجارتی سگنل بناتی ہے۔ وسیع پیمانے پر چلنے والی اوسط مختلف قسم کی قسموں کو ڈھکتی ہے ، جیسے سادہ چلنے والی اوسط سے لے کر ہلچل انگیز چلنے والی اوسط تک ، جو پیرامیٹرز کے ذریعہ آزادانہ طور پر ایڈجسٹ کیا جاسکتا ہے ، جس میں مضبوط موافقت ہے۔
یہ حکمت عملی متغیر حرکت پذیر اوسط کی تقریب کا استعمال کرتے ہوئے 12 مختلف اقسام کے حرکت پذیر اوسط پیدا کرتی ہے۔ بنیادی اصول یہ ہے کہ دو حرکت پذیر اوسطوں کا حساب لگایا جائے۔ (کلوز ایم اے) اور سست ایم اے (اوپن ایم اے) ۔ جب تیز لائن سست لائن پر جاتی ہے تو خریدنے کا اشارہ پیدا ہوتا ہے اور جب تیز لائن سست لائن پر جاتی ہے تو فروخت کا اشارہ پیدا ہوتا ہے۔
اہم منطق یہ ہے کہ متغیر افعال کے ذریعہ دو حرکت پذیر اوسط پیدا کریں:closeSeries = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
اورopenSeries = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
│متغیر افعال 12 مختلف اقسام کے اوسط کے حساب کے طریقوں کو پیک کرتے ہیں، جن کا انتخاب basisType کے ذریعہ آزادانہ طور پر کیا جاسکتا ہے۔ اس طرح وسیع پیمانے پر متحرک اوسط کے مجموعے کو حاصل کیا جاسکتا ہے۔│
بنیادی تجارتی سگنل پیدا کرنے کی منطق یہ ہے:longCond = xlong
اورshortCond = xshort
اس کا مطلب یہ ہے کہ تیز رفتار لائن پر سست لائن زیادہ ہے ، تیز رفتار لائن پر سست لائن خالی ہے۔
حکمت عملی میں داخل ہونے کا اصول یہ ہے کہ جب لانگ کنڈ یا شارٹ کنڈ کی شرائط پوری ہوجائیں تو بالترتیب زیادہ سے زیادہ کام کریں۔ سٹاپ نقصان روکنے کا قاعدہ یہ ہے کہ جب قیمت کی نقل و حرکت مقررہ اسٹاپ نقصان روکنے کے نقطہ پر پہنچ جائے تو اسٹاپ نقصان یا اسٹاپ نقصان۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ اس میں متعدد مختلف قسم کے متحرک اوسط کو آزادانہ طور پر جوڑنے کی اجازت ہے۔ مختلف مارکیٹوں میں مختلف دوروں کے لئے ، یہ معلوم نہیں ہوتا ہے کہ کون سا متحرک اوسط بہترین ہے ، اس حکمت عملی میں زبردست تخصیص کی صلاحیت ہے۔ صارفین بار بار جانچ کے ذریعہ بہترین پیرامیٹرز کے مجموعے کا تعین کرسکتے ہیں تاکہ کسی خاص مارکیٹ کے لئے بہترین حل تیار کیا جاسکے۔
ایک اور فائدہ یہ ہے کہ حکمت عملی کی منطق سادہ اور واضح ہے ، لیکن طاقتور خصوصیات فراہم کرتی ہے۔ صارفین کو اس حکمت عملی کو سمجھنا اور استعمال کرنا آسان ہے۔ اس کے ساتھ ہی ، ان پٹ پیرامیٹرز کی کثرت سے اعلی درجے کے صارفین کے لئے بھی اصلاح کی کافی گنجائش موجود ہے۔
اس حکمت عملی کا سب سے بڑا خطرہ یہ ہے کہ وسیع سپیکٹرم کی حرکت پذیر اوسط لائن خود میں ایک خاص حد تک تاخیر کا شکار ہے۔ جب غیر معمولی قیمتوں میں خرابی ہوتی ہے تو ، اس سے بڑے نقصانات ہوسکتے ہیں۔ مزید برآں ، اگر پیرامیٹرز کا انتخاب غلط ہے تو ، اس کی وجہ سے تجارت کی تعدد بہت زیادہ ہوسکتی ہے یا اضافی سگنل پیدا ہوسکتے ہیں۔
خطرے کو کم کرنے کے لئے ، یہ مشورہ دیا جاتا ہے کہ سگنل کی تاثیر کو دوسرے اشارے کے ساتھ جوڑ کر فیصلہ کیا جائے تاکہ جعلی پیشرفت سے بچایا جاسکے۔ اس کے علاوہ ، پیرامیٹرز کی اصلاح اور دوبارہ جانچ بھی ضروری ہے ، جس میں پیرامیٹرز کے بہترین مجموعے کے ل repeated بار بار جانچ پڑتال کی ضرورت ہے۔ حقیقی ڈسک میں ، پوزیشنوں کا سائز مناسب طریقے سے کم کیا جانا چاہئے ، اور ایک ہی نقصان کو کنٹرول کیا جانا چاہئے۔
اس حکمت عملی میں مندرجہ ذیل کئی اہم اصلاحات ہیں:
اس کے علاوہ ، آپ کو اپنی حکمت عملی کو بہتر بنانے کے ل the ، آپ کو اپنی حکمت عملی کو بہتر بنانے کے ل the ، آپ کو اپنی حکمت عملی کو بہتر بنانے کے ل.
یہ تجارت کی حکمت عملی وسیع پیمانے پر متحرک اوسط پر مبنی ہے جس میں انتہائی لچک پیدا ہوتی ہے۔ یہ طاقتور تخصیص کی خصوصیات پیش کرتا ہے ، صارفین کو مختلف اقسام کے اوسط کو منتخب کرنے اور ان کا مجموعہ کرنے کی آزادی فراہم کرتا ہے۔ حکمت عملی کا منطق آسان ، واضح اور استعمال میں آسان ہے ، لیکن اس کے ساتھ ساتھ اصلاح کے لئے بھی کافی گنجائش فراہم کرتا ہے۔ یہ حکمت عملی پیرامیٹرز کی اصلاح اور خطرے کے کنٹرول کے ذریعہ مختلف مارکیٹ کے ماحول کو اپنانے اور مستحکم منافع حاصل کرنے کے قابل ہے۔ یہ ایک موثر اور لچکدار رجحان سے باخبر رہنے کی حکمت عملی ہے۔
/*backtest start: 2023-01-18 00:00:00 end: 2024-01-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // strategy(title="Long/Short", shorttitle="Banana Maker", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=false) // === INPUTS === useRes = input(defval=true, title="Use Alternate Resolution?") intRes = input(defval=7, title="Multiplier for Alernate Resolution") stratRes = timeframe.ismonthly ? tostring(timeframe.multiplier * intRes, "###M") : timeframe.isweekly ? tostring(timeframe.multiplier * intRes, "###W") : timeframe.isdaily ? tostring(timeframe.multiplier * intRes, "###D") : timeframe.isintraday ? tostring(timeframe.multiplier * intRes, "####") : '60' basisType = input(defval="DEMA", title="MA Type: ", options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "HullMA", "LSMA", "ALMA", "SSMA", "TMA"]) basisLen = input(defval=8, title="MA Period", minval=1) offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0) offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01) scolor = input(false, title="Show coloured Bars to indicate Trend?") delayOffset = input(defval=0, title="Delay Open/Close MA (Forces Non-Repainting)", minval=0, step=1) tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"]) // === /INPUTS === // Constants colours that include fully non-transparent option. green100 = #008000FF lime100 = #6ad279 red100 = #FF0000FF blue100 = #0000FFFF aqua100 = #00FFFFFF darkred100 = #8B0000FF gray100 = #808080FF // === BASE FUNCTIONS === variant(type, src, len, offSig, offALMA) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v3 = 2 * v2 - ema(v2, len) // Double Exponential v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential v5 = wma(src, len) // Weighted v6 = vwma(src, len) // Volume Weighted v7 = 0.0 sma_1 = sma(src, len) // Smoothed v7 := na(v7[1]) ? sma_1 : (v7[1] * (len - 1) + src) / len v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull v9 = linreg(src, len, offSig) // Least Squares v10 = alma(src, len, offALMA, offSig) // Arnaud Legoux v11 = sma(v1, len) // Triangular (extreme smooth) // SuperSmoother filter // © 2013 John F. Ehlers a1 = exp(-1.414 * 3.14159 / len) b1 = 2 * a1 * cos(1.414 * 3.14159 / len) c2 = b1 c3 = -a1 * a1 c1 = 1 - c2 - c3 v12 = 0.0 v12 := c1 * (src + nz(src[1])) / 2 + c2 * nz(v12[1]) + c3 * nz(v12[2]) type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : type == "TMA" ? v11 : type == "SSMA" ? v12 : v1 // security wrapper for repeat calls* NEEDS REFINEMENT- backtesting this shows repaint. need new wrapper reso(exp, use, res) => security_1 = security(syminfo.tickerid, res, exp, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on) use ? security_1 : exp // === /BASE FUNCTIONS === // === SERIES SETUP === closeSeries = variant(basisType, close[delayOffset], basisLen, offsetSigma, offsetALMA) openSeries = variant(basisType, open[delayOffset], basisLen, offsetSigma, offsetALMA) // === /SERIES === // === PLOTTING === // alt resulution closeSeriesAlt = reso(closeSeries, useRes, stratRes) openSeriesAlt = reso(openSeries, useRes, stratRes) // trendColour = closeSeriesAlt > openSeriesAlt ? color.green : color.red bcolour = closeSeries > openSeriesAlt ? lime100 : red100 barcolor(scolor ? bcolour : na, title="Bar Colours") closeP = plot(closeSeriesAlt, title="Close Series", color=trendColour, linewidth=0, style=plot.style_line, transp=1) openP = plot(openSeriesAlt, title="Open Series", color=trendColour, linewidth=0, style=plot.style_line, transp=1) fill(closeP, openP, color=trendColour, transp=80) // === /PLOTTING === // // // === ALERT conditions xlong = crossover(closeSeriesAlt, openSeriesAlt) xshort = crossunder(closeSeriesAlt, openSeriesAlt) longCond = xlong // alternative: longCond[1]? false : (xlong or xlong[1]) and close>closeSeriesAlt and close>=open shortCond = xshort // alternative: shortCond[1]? false : (xshort or xshort[1]) and close<closeSeriesAlt and close<=open // === /ALERT conditions. needs work in study mode. the banana maker is the study script. // Create alert for cross, shunt back 1 if source is not 'open', this should prevent repaint issue. //shunt = RSIsrc == open ? 0 : 1 //shunt = 0 //c_alert = (buy[shunt]==1 or sell[shunt]==1) //alertcondition(c_alert, title="QQECROSS Alert", message="QQECROSS Alert") // show only when alert condition is met and bar closed. //plotshape(c_alert,title= "Alert Indicator Closed", location=location.bottom, color=sell[shunt]==1?red:green, transp=0, style=shape.circle) //Repaint city, study mode will help but wont trigger the alerts // === STRATEGY === // stop loss slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0) tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0) // Include bar limiting algorithm ebar = input(defval=1000, title="Number of Bars for Back Testing", minval=0) dummy = input(false, title="- SET to ZERO for Daily or Longer Timeframes") // // Calculate how many mars since last bar tdays = (timenow - time) / 60000.0 // number of minutes since last bar tdays := timeframe.ismonthly ? tdays / 1440.0 / 5.0 / 4.3 / timeframe.multiplier : timeframe.isweekly ? tdays / 1440.0 / 5.0 / timeframe.multiplier : timeframe.isdaily ? tdays / 1440.0 / timeframe.multiplier : tdays / timeframe.multiplier // number of bars since last bar // //set up exit parameters TP = tpPoints > 0 ? tpPoints : na SL = slPoints > 0 ? slPoints : na // Make sure we are within the bar range, Set up entries and exit conditions if (ebar == 0 or tdays <= ebar) and tradeType != "NONE" strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT") strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG") strategy.close("long", when=shortCond == true and tradeType == "LONG") strategy.close("short", when=longCond == true and tradeType == "SHORT") strategy.exit("XL", from_entry="long", profit=TP, loss=SL) strategy.exit("XS", from_entry="short", profit=TP, loss=SL) // === /STRATEGY === // eof