یہ حکمت عملی دو مختلف ٹائم فریموں میں دو مختلف قسم کے چلتے ہوئے اوسطوں کا حساب لگاتے ہوئے خرید اور فروخت کے سگنل پیدا کرتی ہے۔ یہ مختلف چلتے ہوئے اوسط اور ٹائم فریم کے مجموعوں کے ساتھ تجربہ کرنے کے لئے ایک بہت اچھی سینڈ باکس حکمت عملی ہے۔
اس حکمت عملی میں دو حرکت پذیر اوسط ، ایک تیز رفتار حرکت پذیر اوسط اور ایک سست حرکت پذیر اوسط کا استعمال کیا جاتا ہے۔ تیز رفتار حرکت پذیر اوسط کا ٹائم فریم چارٹ ٹائم فریم سے زیادہ یا برابر ہونا چاہئے۔ جب تیز رفتار حرکت پذیر اوسط سست حرکت پذیر اوسط سے تجاوز کرتا ہے تو ، خرید کا اشارہ پیدا ہوتا ہے۔ جب تیز رفتار حرکت پذیر اوسط سست حرکت پذیر اوسط سے نیچے عبور کرتا ہے تو ، فروخت کا اشارہ پیدا ہوتا ہے۔
صارفین مختلف قسم کے حرکت پذیر اوسط جیسے ایس ایم اے ، ای ایم اے ، کاما وغیرہ میں سے انتخاب کرسکتے ہیں ، اور ٹائم فریم مختلف ہوسکتے ہیں۔ اس سے زیادہ سے زیادہ پیرامیٹرز تلاش کرنے کے لئے مختلف امتزاجوں کے ساتھ تجربہ کرنے کی اجازت ملتی ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ یہ بہترین پیرامیٹر کی ترتیبات کو تلاش کرنے کے لئے مختلف مجموعوں کے ساتھ تجربہ کرنے کے لئے پیرامیٹرز کی آسان ایڈجسٹمنٹ کی اجازت دیتا ہے.
صارفین آزادانہ طور پر دو حرکت پذیر اوسط کی قسم ، لمبائی ، ٹائم فریم کا انتخاب کرسکتے ہیں۔ نظام حقیقی وقت میں نتائج کا حساب لگاتا ہے اور دکھاتا ہے۔ یہ مختلف پیرامیٹر مجموعوں کے ساتھ حکمت عملیوں کی جانچ کرنے سے کہیں زیادہ آسان ہے۔
اس کے علاوہ، سٹاپ نقصان / منافع لینے کی تعمیر کی فعالیت خطرے کو کم کرنے اور منافع میں اضافہ کرنے میں مدد ملتی ہے.
اس حکمت عملی کا سب سے بڑا خطرہ یہ ہے کہ پیرامیٹر کی غلط ترتیبات کا نتیجہ بہت کثرت سے تجارتی سگنل ہوسکتا ہے ، اس طرح تجارتی اخراجات اور سکڑنے والے نقصانات میں اضافہ ہوسکتا ہے۔
اس کے علاوہ ، دوہری حرکت پذیر اوسط خود غلط سگنل دیتے ہیں۔ اگر پیرامیٹرز کو صحیح طریقے سے منتخب نہیں کیا جاتا ہے تو ، خرید / فروخت کے سگنل قابل اعتماد نہیں ہوسکتے ہیں۔
ان خطرات کو پیرامیٹرز کو بہتر بنانے اور دوسرے اشارے کے ساتھ مل کر کم کیا جاسکتا ہے۔
دوہری حرکت پذیر اوسط کے اوپر خرید / فروخت کے اشاروں کو فلٹر کرنے کے لئے آر ایس آئی جیسے دوسرے اشارے شامل کرنے پر غور کریں۔ اس سے غلط اشاروں کو کم کرنے میں مدد مل سکتی ہے۔
بہترین مجموعے تلاش کرنے کے لئے تربیت کے ذریعے بھی چلتی اوسط کے پیرامیٹرز کو بہتر بنایا جاسکتا ہے۔ پیرامیٹرز کو متحرک طور پر بہتر بنانے کے لئے مشین لرننگ کے طریقوں کا بھی استعمال کیا جاسکتا ہے۔
یہ دوہری چلتی اوسط کے ساتھ تجربہ کرنے کے لئے ایک بہترین سینڈ باکس ہے۔ اس کا سب سے بڑا فائدہ بہترین تجارتی حکمت عملی تلاش کرنے کے لئے مختلف پیرامیٹر مجموعوں کی تیز رفتار تکرار ہے۔ یقینا there پیرامیٹر کی غلط ترتیبات کے خطرات بھی موجود ہیں ، جن کو فلٹرنگ اشارے شامل کرکے کم کیا جاسکتا ہے۔ اس حکمت عملی کی مزید اصلاحات ممکنہ طور پر تجارت کی کارکردگی کو اور بھی بہتر بنا سکتی ہیں۔
/*backtest start: 2023-01-28 00:00:00 end: 2024-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/ // © dman103 // A moving averages SandBox strategy where you can experiment using two different moving averages (like KAMA, ALMA, HMA, JMA, VAMA and more) on different time frames to generate BUY and SELL signals, when they cross. // Great sandbox for experimenting with different moving averages and different time frames. // // == How to use == // We select two types of moving averages on two different time frames: // // First is the FAST moving average that should be at the same time frame or higher. // Second is the SLOW moving average that should be on the same time frame or higher. // When FAST moving average cross over the SLOW moving average we have a BUY signal (for LONG) // When FAST moving average cross under the SLOW moving average we have a SELL signal (for SHORT) // WARNING: Using a lower time frame than your chart time frame will result in unrealistic results in your backtesting and bar replay. // == NOTES == // You can select BOTH, LONG, SHORT or NONE in the strategy settings. // You can also enable Stop Loss and Take Profit. // More sandboxes to come, Follow to get notified. // Can also act as indicator by settings 'What trades should be taken' to 'NONE' //@version=4 strategy("Multi MA MTF SandBox Strategy","Multi MA SandBox",overlay=true) tradeType = input("LONG", title="What trades should be taken:", options=["LONG", "SHORT", "BOTH", "NONE"]) fast_title = input(true, title='---------------- Fast Moving Average (BLUE)----------------', type=input.bool) ma_select1 = input(title="First Slow moving average", defval="EMA", options=["SMA", "EMA", "WMA", "HMA", "JMA", "KAMA", "TMA", "VAMA", "SMMA", "DEMA" , "VMA", "WWMA", "EMA_NO_LAG", "TSF","ALMA"]) resma_fast = input(title="First Time Frame", type=input.resolution, defval="") lenma_fast = input(title="First MA Length", type=input.integer, defval=6) slow_title = input(true, title='---------------- Slow Moving Average (YELLOW)----------------', type=input.bool) ma_select2 = input(title="Second Fast moving average", defval="JMA", options=["SMA", "EMA", "WMA", "HMA", "JMA", "KAMA", "TMA", "VAMA", "SMMA", "DEMA" , "VMA", "WWMA", "EMA_NO_LAG", "TSF","ALMA"]) resma_slow = input(title="Second time frame", type=input.resolution, defval="") lenma_slow = input(title="Second MA length", type=input.integer, defval=14) settings = input(true, title='---------------- Other Settings ----------------', type=input.bool) lineWidth = input(2,title="Line Width") colorTransparency=input(50,title="Color Transparency",step=10,minval=0,maxval=100) color_fast=input(color.blue,type=input.color) color_slow=input(color.yellow,type=input.color) fillColor = input(title="Fill Color", type=input.bool, defval=true) IndicatorSettings = input(true, title='---------------- Indicators Settings ----------------', type=input.bool) offset=input(title="Alma Offset (only for ALMA)",defval=0.85, step=0.05) volatility_lookback =input(title="Volatility lookback (only for VAMA)",defval=12) i_fastAlpha = input(1.25,"KAMA's alpha (only for KAMA)", minval=1,step=0.25) fastAlpha = 2.0 / (i_fastAlpha + 1) slowAlpha = 2.0 / (31) ///////Moving Averages MA_selector(src, length,ma_select) => ma = 0.0 if ma_select == "SMA" ma := sma(src, length) ma if ma_select == "EMA" ma := ema(src, length) ma if ma_select == "WMA" ma := wma(src, length) ma if ma_select == "HMA" ma := hma(src,length) ma if ma_select == "JMA" beta = 0.45*(length-1)/(0.45*(length-1)+2) alpha = beta tmp0 = 0.0, tmp1 = 0.0, tmp2 = 0.0, tmp3 = 0.0, tmp4 = 0.0 tmp0 := (1-alpha)*src + alpha*nz(tmp0[1]) tmp1 := (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1]) tmp2 := tmp0[0] + tmp1[0] tmp3 := (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1]) tmp4 := nz(tmp4[1]) + tmp3[0] ma := tmp4 ma if ma_select == "KAMA" momentum = abs(change(src, length)) volatility = sum(abs(change(src)), length) efficiencyRatio = volatility != 0 ? momentum / volatility : 0 smoothingConstant = pow((efficiencyRatio * (fastAlpha - slowAlpha)) + slowAlpha, 2) var kama = 0.0 kama := nz(kama[1], src) + smoothingConstant * (src - nz(kama[1], src)) ma:=kama ma if ma_select == "TMA" ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) ma if ma_select == "VMA" valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) ma := VAR ma if ma_select == "WWMA" wwalpha = 1/ length WWMA = 0.0 WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1]) ma := WWMA ma if ma_select == "EMA_NO_LAG" EMA1= ema(src,length) EMA2= ema(EMA1,length) Difference= EMA1 - EMA2 ma := EMA1 + Difference ma if ma_select == "TSF" lrc = linreg(src, length, 0) lrc1 = linreg(src,length,1) lrs = (lrc-lrc1) TSF = linreg(src, length, 0)+lrs ma := TSF ma if ma_select =="VAMA" // Volatility Adjusted from @fractured mid=ema(src,length) dev=src-mid vol_up=highest(dev,volatility_lookback) vol_down=lowest(dev,volatility_lookback) ma := mid+avg(vol_up,vol_down) ma if ma_select == "SMMA" smma = float (0.0) smaval=sma(src, length) smma := na(smma[1]) ? smaval : (smma[1] * (length - 1) + src) / length ma := smma if ma_select == "DEMA" e1 = ema(src, length) e2 = ema(e1, length) ma := 2 * e1 - e2 ma if ma_select == "ALMA" ma := alma(src, length,offset, 6) ma ma // Calculate EMA ma_fast = MA_selector(close, lenma_fast,ma_select1) ma_slow = MA_selector(close, lenma_slow,ma_select2) maFastStep = security(syminfo.tickerid, resma_fast, ma_fast) maSlowStep = security(syminfo.tickerid, resma_slow, ma_slow) ma1_plot=plot(maFastStep, color=color_fast,linewidth=lineWidth,transp=colorTransparency) ma2_plot=plot(maSlowStep, color=color_slow,linewidth=lineWidth,transp=colorTransparency) colors=ma_fast>ma_slow ? color.green : color.red fill(ma1_plot,ma2_plot, color=fillColor? colors: na,transp=colorTransparency+15) closeStatus = strategy.openprofit > 0 ? "win" : "lose" ////////Long Rules long = crossover(maFastStep,maSlowStep) and (tradeType == "LONG" or tradeType == "BOTH") longClose =crossunder(maFastStep,maSlowStep)//and falling(maSlowStep,1) ///////Short Rules short =crossunder(maFastStep,maSlowStep) and (tradeType == "SHORT" or tradeType == "BOTH") shortClose = crossover(maFastStep,maSlowStep) longShape= crossover(maFastStep,maSlowStep) and tradeType == "NONE" shortShape = crossunder(maFastStep,maSlowStep) and tradeType == "NONE" plotshape(longShape, style=shape.triangleup,location=location.belowbar, color=color.lime,size=size.small) plotshape(shortShape,style=shape.triangledown,location=location.abovebar, color=color.red,size=size.small) // === Stop LOSS === useStopLoss = input(false, title='----- Add Stop Loss / Take profit -----', type=input.bool) sl_inp = input(2.5, title='Stop Loss %', type=input.float, step=0.1)/100 tp_inp = input(5, title='Take Profit %', type=input.float, step=0.1)/100 stop_level = strategy.position_avg_price * (1 - sl_inp) take_level = strategy.position_avg_price * (1 + tp_inp) stop_level_short = strategy.position_avg_price * (1 + sl_inp) take_level_short = strategy.position_avg_price * (1 - tp_inp) if (long) strategy.entry("long", strategy.long) if (short) strategy.entry("short", strategy.short) strategy.close ("long", when = longClose, comment=closeStatus) strategy.close ("short", when = shortClose, comment=closeStatus) if (useStopLoss) strategy.exit("Stop Loss/Profit Long","long", stop=stop_level, limit=take_level,comment =closeStatus ) strategy.exit("Stop Loss/Profit Short","short", stop=stop_level_short, limit=take_level_short, comment = closeStatus)