انکولی زیرو وقفہ EMA تجارتی حکمت عملی


تخلیق کی تاریخ: 2023-09-13 14:22:55 آخر میں ترمیم کریں: 2023-09-13 14:22:55
کاپی: 1 کلکس کی تعداد: 750
1
پر توجہ دیں
1617
پیروکار

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

حکمت عملی:

  1. ایڈجسٹ صفر تاخیر EMA اشارے کا حساب لگائیں ، جس میں دو ایڈجسٹ الگورتھم شامل ہیں: یاترکونٹ اور I-Q۔

  2. ای ایم اے کے لئے عام ای ایم اے اشارے، ای سی کے لئے خود کو اپنانے صفر تاخیر ای ایم اے .

  3. ای سی پر ای ایم اے پہننے پر زیادہ کام کریں ، ای سی کے نیچے ای ایم اے پہننے پر خالی کریں۔

  4. غلطی کی منحنی خطوط کا حساب لگائیں ، جعلی سگنل کو فلٹر کرنے کے لئے تھریڈ ویلیو مقرر کریں۔

  5. منافع کو لاک کرنے اور خطرے کو کنٹرول کرنے کے لئے فکسڈ سٹاپ نقصان سٹاپ پوائنٹس مقرر کریں۔

اس حکمت عملی کے فوائد:

  1. ای ایم اے کو اپنانے سے انڈیکیٹرز میں تاخیر کو کم کیا جاسکتا ہے۔

  2. تھریڈ فلٹرنگ سگنل کے معیار کو بہتر بناتا ہے اور جھوٹے ٹوٹنے سے بچتا ہے۔

  3. سٹاپ نقصان سٹاپ طریقہ سادہ عملی ہے، کام کرنے کے لئے آسان ہے.

اس حکمت عملی کے خطرات:

  1. EMA پیرامیٹرز میں عدم استحکام، ناکامی کا امکان

  2. فکسڈ سٹاپ نقصان کی روک تھام کو مارکیٹ میں تبدیلیوں کے مطابق ڈھالنا مشکل ہے۔

  3. نقصانات کی حد محدود نہیں ہے، اور نقصانات کا خطرہ زیادہ ہے۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-09-05 00:00:00
end: 2023-09-12 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA v2 (w/ Backtest Date Range)", shorttitle="AZLEMA", overlay = true,  commission_type=strategy.commission.cash_per_contract, slippage = 5, pyramiding=1, calc_on_every_tick=true)

src = input(title="Source",  defval=close)
secType = input(title="Security Type", options=["Forex", "Metal Spot", "Cryptocurrency","Custom"], defval="Forex")
contracts = input(title="Custom # of Contracts", defval=1, step=1)
limit = input(title="Max Lots",  defval=100)
Period = input(title="Period",  defval = 20)
adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Cos IFM")
GainLimit = input(title="Gain Limit",  defval = 8)
Threshold = input(title="Threshold",  defval=0.05, step=0.01)
fixedSL = input(title="SL Points", defval=70)
fixedTP = input(title="TP Points", defval=10)
risk = input(title='Risk', defval=0.01, step=0.01)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2015)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

range = 50 //input(title="Max Period",  defval=60, minval=8, maxval=100)

PI = 3.14159265359
lenIQ = 0.0
lenC = 0.0

//##############################################################################
//I-Q IFM
//##############################################################################
if(adaptive=="I-Q IFM" or adaptive=="Average")
    imult = 0.635
    qmult = 0.338
    inphase = 0.0
    quadrature = 0.0
    re = 0.0
    im = 0.0
    deltaIQ = 0.0
    instIQ = 0.0
    V = 0.0
    
    P = src - src[7]
    inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
    quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
    re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
    im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
    if (re!= 0.0)
        deltaIQ := atan(im/re)
    for i=0 to range
        V := V + deltaIQ[i]
        if (V > 2*PI and instIQ == 0.0)
            instIQ := i
    if (instIQ == 0.0)
        instIQ := nz(instIQ[1])
    lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1])

//##############################################################################
//COSINE IFM
//##############################################################################
if(adaptive == "Cos IFM" or adaptive == "Average")
    s2 = 0.0
    s3 = 0.0
    deltaC = 0.0
    instC = 0.0
    v1 = 0.0
    v2 = 0.0
    v4 = 0.0
    
    v1 := src - src[7]
    s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
    s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
    if (s2 != 0)
        v2 := sqrt(s3/s2)
    if (s3 != 0)
        deltaC := 2*atan(v2)
    for i = 0 to range
        v4 := v4 + deltaC[i]
        if (v4 > 2*PI and instC == 0.0)
            instC := i - 1
    if (instC == 0.0)
        instC := instC[1]
    lenC := 0.25*instC + 0.75*nz(lenC[1])

if (adaptive == "Cos IFM")
    Period := round(lenC)
if (adaptive == "I-Q IFM")
    Period := round(lenIQ)
if (adaptive == "Average")
    Period := round((lenC + lenIQ)/2)

//##############################################################################
//ZERO LAG EXPONENTIAL MOVING AVERAGE
//##############################################################################
LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

//##############################################################################
//Trade Logic & Risk Management
//##############################################################################
buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold

secScaler = secType == "Forex" ? 100000 : secType == "Metal Spot" ? 100 : secType == "Cryptocurrency" ? 10000 : secType == "Custom" ? contracts : 0
strategy.initial_capital = 50000
balance = strategy.initial_capital + strategy.netprofit
if (time>timestamp(2016, 1, 1 , 0, 0) and balance > 0)
    //LONG
    lots = ((risk * balance)/fixedSL)*secScaler
    lots := lots > limit * secScaler ? limit * secScaler : lots
    strategy.entry("BUY", strategy.long,  oca_name="BUY",  when=buy and window())
    strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)
    //SHORT
    strategy.entry("SELL", strategy.short,  oca_name="SELL",when=sell and window())
    strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)