وسائل لوڈ ہو رہے ہیں... لوڈنگ...

اسٹوکاسٹک چلتی اوسط حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-12-19 11:41:40
ٹیگز:

img

جائزہ

یہ حکمت عملی ایکسپونینشل موونگ ایوریج (ای ایم اے) کو اسٹوکاسٹک آسکیلیٹر کے ساتھ رجحان کی پیروی اور تسلسل کے انداز میں جوڑتی ہے ، کچھ ٹھنڈی فعالیتوں کے ساتھ۔ میں نے اس حکمت عملی کو خاص طور پر ٹریڈنگ الٹکوئنز کے لئے ڈیزائن کیا ہے ، لیکن یہ بٹ کوائن خود اور کچھ فاریکس جوڑوں پر بھی اتنا ہی اچھا کام کرتا ہے۔

حکمت عملی منطق

تجارتی سگنل کو غیر مقفل کرنے کے لئے حکمت عملی میں 4 لازمی شرائط ہیں۔ ذیل میں ایک لمبی تجارت کے لئے ان شرائط کو تلاش کریں (مختصر کے لئے بالکل برعکس کام کرتا ہے)

  • تیز EMA سست EMA سے زیادہ ہونا ضروری ہے
  • اسٹوکاسٹک K٪ لائن اوور بک ٹیریٹری میں ہونی چاہئے
  • اسٹوکاسٹک K٪ لائن اسٹوکاسٹک D٪ لائن کو عبور کرنا ضروری ہے
  • سست EMA اور تیز EMA کے درمیان بند ہونے کی قیمت ایک بار جب تمام شرائط درست ہوجائیں تو تجارت اگلی موم بتی کے کھلنے پر شروع ہوگی۔

فوائد کا تجزیہ

یہ حکمت عملی EMA اور اسٹوکاسٹک کے فوائد کو یکجا کرتی ہے تاکہ مؤثر طریقے سے رجحانات کے آغاز اور تسلسل کو پکڑ سکے ، جو درمیانی اور طویل مدتی کارروائیوں کے لئے موزوں ہے۔ ایک ہی وقت میں ، یہ حکمت عملی صارفین کے لئے بہت سے حسب ضرورت پیرامیٹرز مہیا کرتی ہے تاکہ وہ اپنے تجارتی انداز اور مارکیٹ کی خصوصیات کی بنیاد پر ایڈجسٹ کرسکیں۔

خاص طور پر اس حکمت عملی کے فوائد میں شامل ہیں:

  1. ای ایم اے کراسنگ رجحان کی سمت کا اندازہ کرتی ہے اور سگنل کی استحکام اور وشوسنییتا کو بڑھا دیتی ہے
  2. اسٹوکاسٹک ججوں نے واپسی کے مواقع تلاش کرنے کے لئے زیادہ خریدنے اور زیادہ فروخت کرنے کی سطح
  3. دو اشارے کو یکجا کرتے ہوئے، اس میں رجحان کی پیروی اور اوسط ریورس دونوں ہیں
  4. اے ٹی آر خود بخود اسٹاپ نقصان کے فاصلے کا حساب لگاتا ہے ، مارکیٹ کی اتار چڑھاؤ کی بنیاد پر اسٹاپ کو ایڈجسٹ کرتا ہے
  5. مختلف صارفین کی ضروریات کو پورا کرنے کے لئے اپنی مرضی کے مطابق خطرہ انعام تناسب
  6. صارفین کو مارکیٹوں کی بنیاد پر ایڈجسٹ کرنے کے لئے متعدد مرضی کے مطابق پیرامیٹرز فراہم کرتا ہے

خطرے کا تجزیہ

اس حکمت عملی کے اہم خطرات مندرجہ ذیل ہیں:

  1. ای ایم اے کراسنگز میں غلط بریک ہوسکتی ہیں ، اس طرح غلط سگنل پیدا ہوتے ہیں
  2. اسٹوکاسٹک خود میں پسماندہ خصوصیات ہیں ، قیمتوں میں تبدیلی کے لئے بہترین وقت سے محروم ہوسکتے ہیں
  3. ایک واحد حکمت عملی مسلسل بدلتے ہوئے مارکیٹ کے ماحول کو مکمل طور پر اپنانے کے قابل نہیں ہے

مذکورہ بالا خطرات کو کم کرنے کے لیے ہم درج ذیل اقدامات کر سکتے ہیں:

  1. بہت زیادہ غلط سگنل سے بچنے کے لئے EMA مدت کے پیرامیٹرز کو ایڈجسٹ کریں
  2. قابل اعتماد سگنل کو یقینی بنانے کے لئے رجحانات اور معاونت کی سطح کا اندازہ کرنے کے لئے مزید اشارے شامل کریں
  3. ہر تجارت کے لئے خطرے کی نمائش کو کنٹرول کرنے کے لئے پیسے کے انتظام کی واضح حکمت عملی کی وضاحت کریں
  4. مجموعی حکمت عملیوں کو اپنانا تاکہ مختلف حکمت عملی سگنل کی تصدیق کرسکیں اور استحکام کو بہتر بنائیں

اصلاح کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں مزید بہتر بنایا جاسکتا ہے:

  1. اتار چڑھاؤ کی بنیاد پر پوزیشن ایڈجسٹمنٹ ماڈیول شامل کریں. اتار چڑھاؤ میں اضافے کے وقت سائز کو کم کریں اور جب سکون ہو تو اضافہ کریں.
  2. اعلی ٹائم فریم کے رجحانات کا فیصلہ شامل کریں تاکہ مخالف رجحان کے آپریشن سے بچنے کے لئے، مثال کے طور پر روزانہ یا ہفتہ وار رجحانات کو یکجا کرنا.
  3. سگنل کی تخلیق میں مدد کے لئے مشین لرننگ ماڈل شامل کریں۔ تاریخی اعداد و شمار پر مبنی ٹرین کی درجہ بندی کے ماڈل۔
  4. اسٹاپ اور سائز کو زیادہ ذہین بنانے کے لئے منی مینجمنٹ ماڈیولز کو بہتر بنائیں۔

نتیجہ

یہ حکمت عملی رجحان کی پیروی اور اوسط ریورس دونوں کے پیشہ کو مربوط کرتی ہے ، جس میں اعلی ٹائم فریم مارکیٹ کے ماحول اور موجودہ قیمت کے طرز عمل دونوں پر غور کیا جاتا ہے۔ یہ ایک موثر حکمت عملی ہے جس کی حقیقی وقت میں نگرانی اور جانچ پڑتال کے قابل ہے۔ پیرامیٹرز پر مسلسل اصلاح کے ذریعے ، رجحانات کے فیصلے کے ماڈیولز وغیرہ شامل کرنے کے ذریعے ، کارکردگی کو بہتر بنانے کے لئے ابھی بھی بہت زیادہ گنجائش موجود ہے ، مزید تحقیقی کوششوں میں ڈالنے کے قابل ہے۔


/*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)



مزید