یہ حکمت عملی ایکسپونینشل موونگ ایوریج (ای ایم اے) کو اسٹوکاسٹک آسکیلیٹر کے ساتھ رجحان کی پیروی اور تسلسل کے انداز میں جوڑتی ہے ، کچھ ٹھنڈی فعالیتوں کے ساتھ۔ میں نے اس حکمت عملی کو خاص طور پر ٹریڈنگ الٹکوئنز کے لئے ڈیزائن کیا ہے ، لیکن یہ بٹ کوائن خود اور کچھ فاریکس جوڑوں پر بھی اتنا ہی اچھا کام کرتا ہے۔
تجارتی سگنل کو غیر مقفل کرنے کے لئے حکمت عملی میں 4 لازمی شرائط ہیں۔ ذیل میں ایک لمبی تجارت کے لئے ان شرائط کو تلاش کریں (مختصر کے لئے بالکل برعکس کام کرتا ہے)
یہ حکمت عملی EMA اور اسٹوکاسٹک کے فوائد کو یکجا کرتی ہے تاکہ مؤثر طریقے سے رجحانات کے آغاز اور تسلسل کو پکڑ سکے ، جو درمیانی اور طویل مدتی کارروائیوں کے لئے موزوں ہے۔ ایک ہی وقت میں ، یہ حکمت عملی صارفین کے لئے بہت سے حسب ضرورت پیرامیٹرز مہیا کرتی ہے تاکہ وہ اپنے تجارتی انداز اور مارکیٹ کی خصوصیات کی بنیاد پر ایڈجسٹ کرسکیں۔
خاص طور پر اس حکمت عملی کے فوائد میں شامل ہیں:
اس حکمت عملی کے اہم خطرات مندرجہ ذیل ہیں:
مذکورہ بالا خطرات کو کم کرنے کے لیے ہم درج ذیل اقدامات کر سکتے ہیں:
اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں مزید بہتر بنایا جاسکتا ہے:
یہ حکمت عملی رجحان کی پیروی اور اوسط ریورس دونوں کے پیشہ کو مربوط کرتی ہے ، جس میں اعلی ٹائم فریم مارکیٹ کے ماحول اور موجودہ قیمت کے طرز عمل دونوں پر غور کیا جاتا ہے۔ یہ ایک موثر حکمت عملی ہے جس کی حقیقی وقت میں نگرانی اور جانچ پڑتال کے قابل ہے۔ پیرامیٹرز پر مسلسل اصلاح کے ذریعے ، رجحانات کے فیصلے کے ماڈیولز وغیرہ شامل کرنے کے ذریعے ، کارکردگی کو بہتر بنانے کے لئے ابھی بھی بہت زیادہ گنجائش موجود ہے ، مزید تحقیقی کوششوں میں ڈالنے کے قابل ہے۔
/*backtest start: 2023-11-18 00:00:00 end: 2023-12-18 00:00:00 period: 1h basePeriod: 15m 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/ // © LucasVivien // Since this Strategy may have its stop loss hit within the opening candle, consider turning on 'Recalculate : After Order is filled' in the strategy settings, in the "Properties" tabs //@version=5 strategy("Stochastic Moving Average", shorttitle="Stoch. EMA", overlay=true, default_qty_type= strategy.cash, initial_capital=10000, default_qty_value=100) //============================================================================== //============================== USER INPUT ================================ //============================================================================== var g_tradeSetup = " Trade Setup" activateLongs = input.bool (title="Long Trades" , defval=true , inline="A1", group=g_tradeSetup, tooltip="") activateShorts = input.bool (title="Short Trades" , defval=true , inline="A1", group=g_tradeSetup, tooltip="") rr = input.float(title="Risk : Reward" , defval=1 , minval=0, maxval=100 , step=0.1, inline="" , group=g_tradeSetup, tooltip="") RiskEquity = input.bool (title="Risk = % Equity ", defval=false , inline="A2", group=g_tradeSetup, tooltip="Set stop loss size as a percentage of 'Initial Capital' -> Strategy Parameter -> Properties tab (Low liquidity markets will affect will prevent to get an exact amount du to gaps)") riskPrctEqui = input.float(title="" , defval=1 , minval=0, maxval=100 , step=0.1, inline="A2", group=g_tradeSetup, tooltip="") RiskUSD = input.bool (title="Risk = $ Amount " , defval=false , inline="A3", group=g_tradeSetup, tooltip="Set stop loss size as a fixed Base currency amount (Low liquidity markets will affect will prevent to get an exact amount du to gaps)") riskUSD = input.float(title="" , defval=1000, minval=0, maxval=1000000000, step=100, inline="A3", group=g_tradeSetup, tooltip="") var g_stopLoss = " Stop Loss" atrMult = input.float(title="ATR Multiplier", defval=1 , minval=0, maxval=100 , step=0.1, tooltip="", inline="", group=g_stopLoss) atrLen = input.int (title="ATR Lookback" , defval=14, minval=0, maxval=1000, step=1 , tooltip="", inline="", group=g_stopLoss) var g_stochastic = " Stochastic" Klen = input.int (title="K%" , defval=14, minval=0, maxval=1000, step=1, inline="S2", group=g_stochastic, tooltip="") Dlen = input.int (title=" D%" , defval=3 , minval=0, maxval=1000, step=1, inline="S2", group=g_stochastic, tooltip="") OBstochLvl = input.int (title="OB" , defval=80, minval=0, maxval=100 , step=1, inline="S1", group=g_stochastic, tooltip="") OSstochLvl = input.int (title=" OS" , defval=20, minval=0, maxval=100 , step=1, inline="S1", group=g_stochastic, tooltip="") OBOSlookback = input.int (title="Stoch. OB/OS lookback", defval=0 , minval=0, maxval=100 , step=1, inline="" , group=g_stochastic, tooltip="This option allow to look 'x' bars back for a value of the Stochastic K line to be overbought or oversold when detecting an entry signal (if 0, looks only at current bar. if 1, looks at current and previous and so on)") OBOSlookbackAll = input.bool (title="All must be OB/OS" , defval=false , inline="" , group=g_stochastic, tooltip="If turned on, all bars within the Stochastic K line lookback period must be overbought or oversold to return a true signal") entryColor = input.color(title=" " , defval=#00ffff , inline="S3", group=g_stochastic, tooltip="") baseColor = input.color(title=" " , defval=#333333 , inline="S3", group=g_stochastic, tooltip="Will trun to designated color when stochastic gets to opposite extrem zone of current trend / Number = transparency") transp = input.int (title=" " , defval=50, minval=0, maxval=100, step=10, inline="S3", group=g_stochastic, tooltip="") var g_ema = " Exp. Moving Average" ema1len = input.int (title="Fast EMA ", defval=21, minval=0, maxval=1000, step=1, inline="E1", group=g_ema, tooltip="") ema2len = input.int (title="Slow EMA ", defval=50, minval=0, maxval=1000, step=1, inline="E2", group=g_ema, tooltip="") ema1col = input.color(title=" " , defval=#0066ff , inline="E1", group=g_ema, tooltip="") ema2col = input.color(title=" " , defval=#0000ff , inline="E2", group=g_ema, tooltip="") var g_referenceMarket =" Reference Market" refMfilter = input.bool (title="Reference Market Filter", defval=false , inline="", group=g_referenceMarket) market = input (title="Market" , defval="BTC_USDT:swap", inline="", group=g_referenceMarket) res = input.timeframe(title="Timeframe" , defval="30" , inline="", group=g_referenceMarket) len = input.int (title="EMA Length" , defval=50 , inline="", group=g_referenceMarket) //============================================================================== //========================== FILTERS & SIGNALS ============================= //============================================================================== //------------------------------ Stochastic -------------------------------- K = ta.stoch(close, high, low, Klen) D = ta.sma(K, Dlen) stochBullCross = ta.crossover(K, D) stochBearCross = ta.crossover(D, K) OSstoch = false OBstoch = false for i = 0 to OBOSlookback if K[i] < OSstochLvl OSstoch := true else if OBOSlookbackAll OSstoch := false for i = 0 to OBOSlookback if K[i] > OBstochLvl OBstoch := true else if OBOSlookbackAll OBstoch := false //---------------------------- Moving Averages ----------------------------- ema1 = ta.ema(close, ema1len) ema2 = ta.ema(close, ema2len) emaBull = ema1 > ema2 emaBear = ema1 < ema2 //---------------------------- Price source -------------------------------- bullRetraceZone = (close < ema1 and close >= ema2) bearRetraceZone = (close > ema1 and close <= ema2) //--------------------------- Reference market ----------------------------- ema = ta.ema(close, len) emaHTF = request.security(market, res, ema [barstate.isconfirmed ? 0 : 1]) closeHTF = request.security(market, res, close[barstate.isconfirmed ? 0 : 1]) bullRefMarket = (closeHTF > emaHTF or closeHTF[1] > emaHTF[1]) bearRefMarket = (closeHTF < emaHTF or closeHTF[1] < emaHTF[1]) //-------------------------- SIGNAL VALIDATION ----------------------------- validLong = stochBullCross and OSstoch and emaBull and bullRetraceZone and activateLongs and (refMfilter ? bullRefMarket : true) and strategy.position_size == 0 validShort = stochBearCross and OBstoch and emaBear and bearRetraceZone and activateShorts and (refMfilter ? bearRefMarket : true) and strategy.position_size == 0 //============================================================================== //=========================== STOPS & TARGETS ============================== //============================================================================== SLdist = ta.atr(atrLen) * atrMult longSL = close - SLdist longSLDist = close - longSL longTP = close + (longSLDist * rr) shortSL = close + SLdist shortSLDist = shortSL - close shortTP = close - (shortSLDist * rr) var SLsaved = 0.0 var TPsaved = 0.0 if validLong or validShort SLsaved := validLong ? longSL : validShort ? shortSL : na TPsaved := validLong ? longTP : validShort ? shortTP : na //============================================================================== //========================== STRATEGY COMMANDS ============================= //============================================================================== if validLong strategy.entry("Long", strategy.long, qty = RiskEquity ? ((riskPrctEqui/100)*strategy.equity)/longSLDist : RiskUSD ? riskUSD/longSLDist : na) if validShort strategy.entry("Short", strategy.short, qty = RiskEquity ? ((riskPrctEqui/100)*strategy.equity)/shortSLDist : RiskUSD ? riskUSD/shortSLDist : na) strategy.exit(id="Long Exit" , from_entry="Long" , limit=TPsaved, stop=SLsaved, when=strategy.position_size > 0) strategy.exit(id="Short Exit", from_entry="Short", limit=TPsaved, stop=SLsaved, when=strategy.position_size < 0) //============================================================================== //============================= CHART PLOTS ================================ //============================================================================== //---------------------------- Stops & Targets ----------------------------- plot(strategy.position_size != 0 or (strategy.position_size[1] != 0 and strategy.position_size == 0) ? SLsaved : na, color=color.red , style=plot.style_linebr) plot(strategy.position_size != 0 or (strategy.position_size[1] != 0 and strategy.position_size == 0) ? TPsaved : na, color=color.green, style=plot.style_linebr) //--------------------------------- EMAs ----------------------------------- l1 = plot(ema1, color=#0066ff, linewidth=2) l2 = plot(ema2, color=#0000ff, linewidth=2) //-------------------------- Stochastic gradient --------------------------- // fill(l1, l2, color.new(color.from_gradient(K, OSstochLvl, OBstochLvl, // emaBull ? entryColor : emaBear ? baseColor : na, // emaBull ? baseColor : emaBear ? entryColor : na), transp)) //---------------------------- Trading Signals ----------------------------- plotshape(validLong, color=color.green, location=location.belowbar, style=shape.xcross, size=size.small) plotshape(validShort, color=color.red , location=location.abovebar, style=shape.xcross, size=size.small) //---------------------------- Reference Market ---------------------------- bgcolor(bullRefMarket and refMfilter ? color.new(color.green,90) : na) bgcolor(bearRefMarket and refMfilter ? color.new(color.red ,90) : na)