ڈبل موونگ اوسط مقداری تجارتی حکمت عملی


تخلیق کی تاریخ: 2024-02-01 15:13:13 آخر میں ترمیم کریں: 2024-02-01 15:13:13
کاپی: 0 کلکس کی تعداد: 611
1
پر توجہ دیں
1617
پیروکار

ڈبل موونگ اوسط مقداری تجارتی حکمت عملی

جائزہ

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

حکمت عملی کا اصول

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

اسٹریٹجک فوائد

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

اسٹریٹجک رسک

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

مندرجہ بالا مسائل کے لئے، آپ کو مندرجہ ذیل پہلوؤں میں اصلاح کر سکتے ہیں:

  1. حرکت پذیری اوسط پیرامیٹرز کو بہتر بنانے کے لئے تاکہ یہ مخصوص نسلوں کے لئے موزوں ہو
  2. دیگر اشارے یا ماڈل کے ساتھ مل کر سگنل فلٹرنگ
  3. بروکرج اکاؤنٹس کو ریئل ٹائم ہیجنگ یا خود کار طریقے سے تبدیل کرنے کے لئے کرنسی کے خطرات پر غور کریں

اصلاح کی سمت

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 4h
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/
// © sosacur01

//@version=5
strategy(title="2 MA | Trend Following", overlay=true, pyramiding=1, commission_type=strategy.commission.percent, commission_value=0.2, initial_capital=10000)

//==========================================


//BACKTEST RANGE
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 jan 2000"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("1 Jul 2100"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
inTradeWindow = true
if not inTradeWindow and inTradeWindow[1]
    strategy.cancel_all()
    strategy.close_all(comment="Date Range Exit")

//--------------------------------------

//LONG/SHORT POSITION ON/OFF INPUT
LongPositions   = input.bool(title='On/Off Long Postion', defval=true, group="Long & Short Position")
ShortPositions  = input.bool(title='On/Off Short Postion', defval=true, group="Long & Short Position")

//---------------------------------------

//SLOW MA INPUTS
averageType1   = input.string(defval="SMA", group="Slow MA Inputs", title="Slow MA Type", options=["SMA", "EMA", "WMA", "HMA", "RMA", "SWMA", "ALMA", "VWMA", "VWAP"])
averageLength1 = input.int(defval=160, group="Slow MA Inputs", title="Slow MA Length", minval=50)
averageSource1 = input(close, title="Slow MA Source", group="Slow MA Inputs")
           

//SLOW MA TYPE
MovAvgType1(averageType1, averageSource1, averageLength1) =>
	switch str.upper(averageType1)
        "SMA"  => ta.sma(averageSource1, averageLength1)
        "EMA"  => ta.ema(averageSource1, averageLength1)
        "WMA"  => ta.wma(averageSource1, averageLength1)
        "HMA"  => ta.hma(averageSource1, averageLength1)
        "RMA"  => ta.rma(averageSource1, averageLength1)
        "SWMA" => ta.swma(averageSource1)
        "ALMA" => ta.alma(averageSource1, averageLength1, 0.85, 6)
        "VWMA" => ta.vwma(averageSource1, averageLength1)
        "VWAP" => ta.vwap(averageSource1)
        => runtime.error("Moving average type '" + averageType1 + 
             "' not found!"), na


//----------------------------------

//FAST MA INPUTS
averageType2   = input.string(defval="SMA", group="Fast MA Inputs", title="Fast MA Type", options=["SMA","EMA","WMA","HMA","RMA","SWMA","ALMA","VWMA","VWAP"])
averageLength2 = input.int(defval=40, group="Fast MA Inputs", title="Fast MA Length", maxval=40)
averageSource2 = input(close, title="Fast MA Source", group="Fast MA Inputs")

//FAST MA TYPE
MovAvgType2(averageType2, averageSource2, averageLength2) =>
	switch str.upper(averageType2)
        "SMA"  => ta.sma(averageSource2, averageLength2)
        "EMA"  => ta.ema(averageSource2, averageLength2)
        "WMA"  => ta.wma(averageSource2, averageLength2)
        "HMA"  => ta.hma(averageSource2, averageLength2)
        "RMA"  => ta.rma(averageSource2, averageLength2)
        "SWMA" => ta.swma(averageSource2)
        "ALMA" => ta.alma(averageSource2, averageLength2, 0.85, 6)
        "VWMA" => ta.vwma(averageSource2, averageLength2)
        "VWAP" => ta.vwap(averageSource2)
        => runtime.error("Moving average type '" + averageType2 + 
             "' not found!"), na

//---------------------------------------------------

//MA VALUES
FASTMA = MovAvgType2(averageType2, averageSource2, averageLength2)
SLOWMA = MovAvgType1(averageType1, averageSource1, averageLength1)

//BUY/SELL TRIGGERS
bullish_trend = FASTMA > SLOWMA and close > FASTMA
bearish_trend = FASTMA < SLOWMA and close < FASTMA

//MAs PLOT
plot1 = plot(SLOWMA,color=color.gray, linewidth=1, title="Slow-MA")
plot2 = plot(FASTMA,color=color.yellow, linewidth=1, title="Fast-MA")
fill(plot1, plot2, color=SLOWMA>FASTMA ? color.new(color.red, 70) : color.new(color.green, 70), title="EMA Clouds")

//-----------------------------------------------------

//PARABOLIC SAR USER INPUT
usepsarFilter = input.bool(title='Use Parabolic Sar?', defval=true, group = "Parabolic SAR Inputs")
psar_display  = input.bool(title="Display Parabolic Sar?", defval=false, group="Parabolic SAR Inputs")
start         = input.float(title="Start", defval=0.02, group="Parabolic SAR Inputs", step=0.001)
increment     = input.float(title="Increment", defval=0.02, group="Parabolic SAR Inputs", step=0.001)
maximum       = input.float(title="Maximum", defval=0.2, group="Parabolic SAR Inputs", step=0.001)

//SAR VALUES
psar        = request.security(syminfo.tickerid, "D", ta.sar(start, increment, maximum))

//BULLISH & BEARISH PSAR CONDITIONS
bullish_psar = (usepsarFilter ? low > psar : bullish_trend )
bearsish_psar = (usepsarFilter ? high < psar : bearish_trend)

//SAR PLOT
psar_plot    = if low > psar
    color.rgb(198, 234, 199, 13)
else
    color.rgb(219, 134, 134, 48)
    
plot(psar_display ? psar : na, color=psar_plot, title="Par SAR")

//-------------------------------------

//ENTRIES AND EXITS
long_entry  = if inTradeWindow and bullish_trend  and bullish_psar and LongPositions
    true
long_exit   = if inTradeWindow and bearish_trend   
    true

short_entry = if inTradeWindow  and bearish_trend and bearsish_psar and ShortPositions
    true
short_exit  = if inTradeWindow  and bullish_trend 
    true

//--------------------------------------

//RISK MANAGEMENT - SL, MONEY AT RISK, POSITION SIZING
atrPeriod                = input.int(14, "ATR Length", group="Risk Management Inputs")
sl_atr_multiplier        = input.float(title="Long Position - Stop Loss - ATR Multiplier", defval=2, group="Risk Management Inputs", step=0.5)
sl_atr_multiplier_short  = input.float(title="Short Position - Stop Loss - ATR Multiplier", defval=2, group="Risk Management Inputs", step=0.5)
i_pctStop                = input.float(2, title="% of Equity at Risk", step=.5, group="Risk Management Inputs")/100

//ATR VALUE
_atr = ta.atr(atrPeriod)

//CALCULATE LAST ENTRY PRICE
lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)

//STOP LOSS - LONG POSITIONS 
var float sl = na

//CALCULTE SL WITH ATR AT ENTRY PRICE - LONG POSITION
if (strategy.position_size[1] != strategy.position_size)
    sl := lastEntryPrice - (_atr * sl_atr_multiplier)

//IN TRADE - LONG POSITIONS
inTrade = strategy.position_size > 0

//PLOT SL - LONG POSITIONS
plot(inTrade ? sl : na, color=color.blue, style=plot.style_circles, title="Long Position - Stop Loss")

//CALCULATE ORDER SIZE - LONG POSITIONS
positionSize = (strategy.equity * i_pctStop) / (_atr * sl_atr_multiplier)

//============================================================================================

//STOP LOSS - SHORT POSITIONS 
var float sl_short = na

//CALCULTE SL WITH ATR AT ENTRY PRICE - SHORT POSITIONS 
if (strategy.position_size[1] != strategy.position_size)
    sl_short := lastEntryPrice + (_atr * sl_atr_multiplier_short)

//IN TRADE SHORT POSITIONS
inTrade_short = strategy.position_size < 0

//PLOT SL - SHORT POSITIONS
plot(inTrade_short ? sl_short : na, color=color.red, style=plot.style_circles, title="Short Position - Stop Loss")

//CALCULATE ORDER - SHORT POSITIONS
positionSize_short = (strategy.equity * i_pctStop) / (_atr * sl_atr_multiplier_short) 


//===============================================

//LONG STRATEGY
strategy.entry("Long", strategy.long, comment="Long", when = long_entry, qty=positionSize)
if (strategy.position_size > 0)
    strategy.close("Long", when = (long_exit), comment="Close Long")
    strategy.exit("Long", stop = sl, comment="Exit Long")

//SHORT STRATEGY
strategy.entry("Short", strategy.short, comment="Short", when = short_entry, qty=positionSize_short)
if (strategy.position_size < 0) 
    strategy.close("Short", when = (short_exit), comment="Close Short")
    strategy.exit("Short", stop = sl_short, comment="Exit Short")

//ONE DIRECTION TRADING COMMAND (BELLOW ONLY ACTIVATE TO CORRECT BUGS)