منتقل اوسط کراس اوور رجحان کی حکمت عملی


تخلیق کی تاریخ: 2023-10-27 16:19:00 آخر میں ترمیم کریں: 2023-10-27 16:19:00
کاپی: 0 کلکس کی تعداد: 662
1
پر توجہ دیں
1617
پیروکار

منتقل اوسط کراس اوور رجحان کی حکمت عملی

جائزہ

چلتی اوسط کی کراسنگ حکمت عملی ایک momentum حکمت عملی ہے جس میں رجحان کی سمت کا تعین کرنے کے لئے ڈبل چلتی اوسط کی کراسنگ سگنل کا استعمال کیا جاتا ہے ، خریدنے اور بیچنے کے سگنل پیدا ہوتے ہیں۔ یہ حکمت عملی 2 سادہ چلتی اوسط اور 1 اشاریہ چلتی اوسط کا استعمال کرتی ہے ، جس کی بنیاد پر ان کے کراسنگ کی صورت حال پر فاریکس ٹریڈنگ کی بنیادی باتیں فیصلہ کیا جاتا ہے ، یہ درمیانی اور قلیل مدتی تجارتی حکمت عملی ہے۔

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

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

  • EMA1: ایک مختصر دورانیے کی اشاریہ کی حرکت پذیری اوسط ، جس کی نمائندگی ایک تیز لائن کرتی ہے
  • SMA1: ایک لمبی مدت کی سادہ حرکت پذیری اوسط ، جو سست لائن کی نمائندگی کرتی ہے
  • SMA2: ایک طویل عرصے سے ایک سادہ منتقل اوسط، رجحان کی سمت کا تعین کرنے کے لئے

حکمت عملی EMA1، SMA1، اور SMA2 کے سائز کے تعلقات کے ساتھ رجحان کا تعین کرتی ہے:

  • EMA1> SMA1> SMA2 اوپر کی طرف رجحان
  • نیچے کی طرف رجحان: EMA1 < SMA1 < SMA2

سگنل داخل:

  • کثیر سر داخل: تیز لائن پر سست لائن پر زیادہ کام کریں
  • خالی سر داخلہ: جب تیز لائن کے نیچے سست لائن کو عبور کرتے ہو تو خالی کریں۔

باہر نکلنے کا اشارہ:

  • کثیر الاضلاع سے باہر نکلیں: تیز لائن کے نیچے سست لائن کے ذریعے صف بندی کریں
  • خالی سر سے باہر نکلنا: تیز لائن پر سست لائن پر فلیجنگ

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

طاقت کا تجزیہ

یہ حکمت عملی مندرجہ ذیل فوائد رکھتی ہے:

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

خطرے کا تجزیہ

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

  1. whipsaws: ایک سے زیادہ جعلی توڑ سے پہلے مسلسل ہلچل کا امکان
  2. sensitive to MA parameters: غلط طریقے سے سیٹ کردہ منتقل اوسط پیرامیٹرز کی وجہ سے بہت زیادہ بار بار یا غیر حساس ہوسکتا ہے
  3. lagging: حرکت پذیر اوسط فطرت میں تاخیر کا شکار ہے ، ممکنہ طور پر بہترین وقت سے محروم ہوجاتا ہے
  4. no fundamentals: بنیادی باتوں کو نظر انداز کرتے ہوئے صرف تکنیکی اشارے پر مبنی

whipsaws کے خطرے کے لئے، آپ کو مناسب طریقے سے منتقل اوسط مدت کو ایڈجسٹ کر سکتے ہیں؛ پیرامیٹرز کے لئے حساسیت کے خطرے کے لئے، آپ کو پیرامیٹرز کو بہتر بنانے کے کر سکتے ہیں؛ backwardness کے خطرے کے لئے، آپ کو دیگر پہلے سے طے شدہ اشارے کے ساتھ مل کر بہتر بنانے کے کر سکتے ہیں.

اصلاح کی سمت

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 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/
// © Decam9

//@version=5
strategy(title = "Moving Average Crossover", shorttitle = "MA Crossover Strategy", overlay=true,
     initial_capital = 100000,default_qty_type = strategy.percent_of_equity, default_qty_value = 10)

//Moving Average Inputs
EMA1 = input.int(title="Fast EMA", group = "Moving Averages:", 
     inline = "EMAs", defval=5, minval = 1)
isDynamicEMA = input.bool(title = "Dynamic Exponential Moving Average?", defval = true,
     inline = "EMAs", group = "Moving Averages:", tooltip = "Changes the source of the MA based on trend")

SMA1 = input.int(title = "Slow SMA", group = "Moving Averages:",
     inline = "SMAs", defval = 10, minval = 1)
isDynamicSMA = input.bool(title = "Dynamic Simple Moving Average?", defval = false,
     inline = "SMAs", group = "Moving Averages:", tooltip = "Changes the source of the MA based on trend")

SMA2 = input.int(title="Trend Determining SMA", group = "Moving Averages:",
     inline = "MAs", defval=13, minval = 1)

//Moving Averages
Trend = ta.sma(close, SMA2)
Fast = ta.ema(isDynamicEMA ? (close > Trend ? low : high) : close, EMA1)
Slow = ta.sma(isDynamicSMA ? (close > Trend ? low : high) : close, SMA1)

//Allowed Entries
islong = input.bool(title = "Long", group = "Allowed Entries:",
     inline = "Entries",defval = true)
isshort = input.bool(title = "Short", group = "Allowed Entries:",
     inline = "Entries", defval= true)

//Entry Long Conditions
buycond = input.string(title="Buy when", group = "Entry Conditions:", 
     inline = "Conditions",defval="Fast-Slow Crossing", 
     options=["Fast-Slow Crossing", "Fast-Trend Crossing","Slow-Trend Crossing"])
     
intrendbuy = input.bool(title = "In trend", defval = true, group = "Entry Conditions:",
     inline = "Conditions", tooltip = "In trend if price is above SMA 2")

//Entry Short Conditions
sellcond = input.string(title="Sell when", group = "Entry Conditions:", 
     inline = "Conditions2",defval="Fast-Slow Crossing", 
     options=["Fast-Slow Crossing", "Fast-Trend Crossing","Slow-Trend Crossing"])
     
intrendsell = input.bool(title = "In trend",defval = true, group = "Entry Conditions:",
     inline = "Conditions2", tooltip = "In trend if price is below SMA 2?")

//Exit Long Conditions
closebuy = input.string(title="Close long when", group = "Exit Conditions:", 
     defval="Fast-Slow Crossing", options=["Fast-Slow Crossing", "Fast-Trend Crossing","Slow-Trend Crossing"])

//Exit Short Conditions
closeshort = input.string(title="Close short when", group = "Exit Conditions:", 
     defval="Fast-Slow Crossing", options=["Fast-Slow Crossing", "Fast-Trend Crossing","Slow-Trend Crossing"])
     

//Filters
filterlong =input.bool(title = "Long Entries", inline = 'linefilt', group = 'Apply Filters to', 
     defval = true)
filtershort =input.bool(title = "Short Entries", inline = 'linefilt', group = 'Apply Filters to', 
     defval = true)
filterend =input.bool(title = "Exits", inline = 'linefilt', group = 'Apply Filters to', 
     defval = true)
usevol =input.bool(title = "", inline = 'linefiltvol', group = 'Relative Volume Filter:', 
     defval = false)
rvol = input.int(title = "Volume >", inline = 'linefiltvol', group = 'Relative Volume Filter:', 
     defval = 1)
len_vol = input.int(title = "Avg. Volume Over Period", inline = 'linefiltvol', group = 'Relative Volume Filter:', 
     defval = 30, minval = 1,
     tooltip="The current volume must be greater than N times the M-period average volume.")
useatr =input.bool(title = "", inline = 'linefiltatr', group = 'Volatility Filter:', 
     defval = false)
len_atr1 = input.int(title = "ATR", inline = 'linefiltatr', group = 'Volatility Filter:', 
     defval = 5, minval = 1)
len_atr2 = input.int(title = "> ATR", inline = 'linefiltatr', group = 'Volatility Filter:', 
     defval = 30, minval = 1,
     tooltip="The N-period ATR must be greater than the M-period ATR.")
usersi =input.bool(title = "", inline = 'linersi', group = 'Overbought/Oversold Filter:', 
     defval = false)
rsitrhs1 = input.int(title = "", inline = 'linersi', group = 'Overbought/Oversold Filter:', 
     defval = 0, minval=0, maxval=100)
rsitrhs2 = input.int(title = "< RSI (14) <", inline = 'linersi', group = 'Overbought/Oversold Filter:', 
     defval = 100, minval=0, maxval=100,
     tooltip="RSI(14) must be in the range between N and M.")
issl =  input.bool(title = "SL", inline = 'linesl1', group = 'Stop Loss / Take Profit:', 
     defval = false)
slpercent =  input.float(title = ", %", inline = 'linesl1', group = 'Stop Loss / Take Profit:', 
     defval = 10, minval=0.0)
istrailing =  input.bool(title = "Trailing", inline = 'linesl1', group = 'Stop Loss / Take Profit:', 
     defval = false)
istp =  input.bool(title = "TP", inline = 'linetp1', group = 'Stop Loss / Take Profit:', 
     defval = false)
tppercent =  input.float(title = ", %", inline = 'linetp1', group = 'Stop Loss / Take Profit:', 
     defval = 20)
     
//Conditions for Crossing
fscrossup = ta.crossover(Fast,Slow)
fscrossdw = ta.crossunder(Fast,Slow)
ftcrossup = ta.crossover(Fast,Trend)
ftcrossdw = ta.crossunder(Fast,Trend)
stcrossup = ta.crossover(Slow,Trend)
stcrossdw = ta.crossunder(Slow,Trend)

//Defining in trend
uptrend = Fast >= Slow and Slow >= Trend
downtrend = Fast <= Slow and Slow <= Trend
justCrossed = ta.cross(Fast,Slow) or ta.cross(Slow,Trend)


//Entry Signals
crosslong = if intrendbuy
    (buycond =="Fast-Slow Crossing" and uptrend ? fscrossup:(buycond =="Fast-Trend Crossing" and uptrend ? ftcrossup:(buycond == "Slow-Trend Crossing" and uptrend ? stcrossup : na))) 
else
    (buycond =="Fast-Slow Crossing"?fscrossup:(buycond=="Fast-Trend Crossing"?ftcrossup:stcrossup))

crossshort = if intrendsell
    (sellcond =="Fast-Slow Crossing" and downtrend ? fscrossdw:(sellcond =="Fast-Trend Crossing" and downtrend ? ftcrossdw:(sellcond == "Slow-Trend Crossing" and downtrend ? stcrossdw : na))) 
else
    (sellcond =="Fast-Slow Crossing"?fscrossdw:(buycond=="Fast-Trend Crossing"?ftcrossdw:stcrossdw))
crossexitlong = (closebuy =="Fast-Slow Crossing"?fscrossdw:(closebuy=="Fast-Trend Crossing"?ftcrossdw:stcrossdw))
crossexitshort = (closeshort =="Fast-Slow Crossing"?fscrossup:(closeshort=="Fast-Trend Crossing"?ftcrossup:stcrossup))


// Filters
rsifilter = usersi?(ta.rsi(close,14) > rsitrhs1 and ta.rsi(close,14) < rsitrhs2):true
volatilityfilter = useatr?(ta.atr(len_atr1) > ta.atr(len_atr2)):true
volumefilter = usevol?(volume > rvol*ta.sma(volume,len_vol)):true
totalfilter = volatilityfilter and volumefilter and rsifilter

//Filtered signals
golong  = crosslong  and islong  and (filterlong?totalfilter:true) 
goshort = crossshort and isshort and (filtershort?totalfilter:true)
endlong  = crossexitlong and (filterend?totalfilter:true)
endshort = crossexitshort and (filterend?totalfilter:true)

// Entry price and TP
startprice = ta.valuewhen(condition=golong or goshort, source=close, occurrence=0)
pm = golong?1:goshort?-1:1/math.sign(strategy.position_size)
takeprofit = startprice*(1+pm*tppercent*0.01)
// fixed stop loss
stoploss = startprice * (1-pm*slpercent*0.01)
// trailing stop loss
if istrailing and strategy.position_size>0
    stoploss := math.max(close*(1 - slpercent*0.01),stoploss[1])
else if istrailing and strategy.position_size<0
    stoploss := math.min(close*(1 + slpercent*0.01),stoploss[1])
    
if golong and islong
    strategy.entry("long",   strategy.long )
if goshort and isshort
    strategy.entry("short",  strategy.short)
if endlong
    strategy.close("long")
if endshort
    strategy.close("short")

// Exit via SL or TP
strategy.exit(id="sl/tp long", from_entry="long", stop=issl?stoploss:na, 
              limit=istp?takeprofit:na)
strategy.exit(id="sl/tp short",from_entry="short",stop=issl?stoploss:na, 
              limit=istp?takeprofit:na)