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