ای ایم اے سی ایکسپونینشل موونگ ایوریج کراس آپٹمائزڈ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-07 15:16:03
ٹیگز:

img

جائزہ

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

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

  1. حالیہ رجحان کی سمت کا فیصلہ کریں: پچھلے 26 ہفتوں میں بند ہونے والی قیمت میں اضافے / کمی کی فیصد کا حساب لگائیں تاکہ اپ ٹرینڈ ، ڈاؤن ٹرینڈ یا سائیڈ ویز کا تعین کیا جاسکے۔

  2. متعدد متحرک اوسط فلٹر: 10 پیریڈ ، 20 پیریڈ ، 34 پیریڈ ای ایم اے کا حساب لگائیں اور خرید سگنل کو متحرک کرنے کے لئے ان کے 50 پیریڈ ایس ایم اے سے اوپر عبور کرنے کا انتظار کریں۔

  3. اے ٹی آر سٹاپ نقصان: جب اندراج کا اشارہ ظاہر ہوتا ہے تو، اندراج بار s کم یا کم 2.5 اے ٹی آر کے اعلی پر سٹاپ نقصان مقرر کریں.

  4. ٹریلنگ سٹاپ نقصان: قیمت میں اضافے کے ساتھ ساتھ سٹاپ نقصان کی لائن کو آہستہ آہستہ منتقل کریں.

  5. منافع حاصل کریں: جب انٹری سگنل ظاہر ہوتا ہے تو ، قریب کی قیمت کے علاوہ 3 اے ٹی آر پر ہدف مقرر کریں۔

  6. ایم اے پل بیک آؤٹ: فعال طور پر باہر نکلیں جب قیمت 10 دن کے ای ایم اے سے نیچے نکل جائے۔

فوائد

  1. ایک سے زیادہ ایم اے فلٹر سگنل کی وشوسنییتا میں اضافہ کرتا ہے، جھوٹے بریک آؤٹ سے بچنے کے.

  2. اے ٹی آر سٹاپ نقصان مارکیٹ میں اتار چڑھاؤ کی بنیاد پر معقول سٹاپ فاصلے کی اجازت دیتا ہے.

  3. ٹرائلنگ سٹاپ کچھ منافع میں مقفل کرتا ہے کیونکہ یہ بڑھتا ہے.

  4. معقول منافع کا ہدف بہت زیادہ منافع واپس کرنے سے بچتا ہے۔

  5. MA pullback exit جب رجحان الٹ جاتا ہے تو بروقت باہر نکلنے کی اجازت دیتا ہے۔

خطرات اور حل

  1. ای ایم اے کراسز سائیڈ ویز مارکیٹوں میں وِپساؤ کرسکتے ہیں ، جس سے لگاتار نقصانات ہوتے ہیں۔ ای ایم اے کی مدت میں اضافہ کرسکتے ہیں یا ایم اے کراس اوور فلٹر شامل کرسکتے ہیں۔

  2. اے ٹی آر کی بڑی قیمتیں بہت دور رکنے کا سبب بن سکتی ہیں ، نقصان کا خطرہ بڑھ سکتا ہے۔ اے ٹی آر کو حرکت پذیر اوسط یا کمی کے گتانک کے ساتھ بہتر بنایا جاسکتا ہے۔

  3. راتوں رات فرق کا خطرہ نہیں سمجھا جاتا۔ غیر تجارتی ادوار کے دوران سگنل سے بچنے کے لئے منطق شامل کر سکتے ہیں۔

  4. مارکیٹ کے نظام پر غور نہیں کیا گیا۔ حکمت عملی سوئچ کے طور پر مارکیٹ کے رجحان فلٹر کو شامل کر سکتے ہیں۔

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

  1. مختلف مصنوعات کے لئے زیادہ سے زیادہ لمبائی تلاش کرنے کے لئے ای ایم اے کے مجموعے کی جانچ کریں.

  2. ATR چلتی اوسط یا کمی کے گتانک کو روکنے کے فاصلے کو بہتر بنانے کے لئے ٹیسٹ کریں.

  3. غیر تجارتی ادوار کے دوران سگنل سے بچنے کے لئے منطق شامل کریں.

  4. مارکیٹ رجحان فلٹر شامل کریں جب مارکیٹ منفی ہے تو حکمت عملی سوئچ کے طور پر.

  5. زیادہ سے زیادہ استحکام تلاش کرنے کے لئے کئی سالوں میں پیرامیٹر کے مجموعے کو بیک ٹیسٹ کریں.

خلاصہ

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


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Author = Dustin Drummond https://www.tradingview.com/u/Dustin_D_RLT/
//Strategy based in part on original 10ema Basic Swing Trade Strategy by Matt Delong: https://www.tradingview.com/u/MattDeLong/
//Link to original 10ema Basic Swing Trade Strategy: https://www.tradingview.com/script/8yhGnGCM-10ema-Basic-Swing-Trade-Strategy/
//This is the Original EMAC - Exponential Moving Average Cross Strategy built as a class for reallifetrading dot com and so has all the default settings and has not been optimized
//I would not recomend using this strategy with the default settings and is for educational purposes only
//For the fully optimized version please come back around the same time tomorrow 6/16/21 for the EMAC - Exponential Moving Average Cross - Optimized
//EMAC - Exponential Moving Average Cross
strategy(title="EMAC - Exponential Moving Average Cross", shorttitle = "EMAC", overlay = true, calc_on_every_tick=false, default_qty_value = 100, initial_capital = 100000, default_qty_type = strategy.fixed, pyramiding = 0, process_orders_on_close=true)
//creates a time filter to prevent "too many orders error" and allows user to see Strategy results per year by changing input in settings in Stratey Tester
startYear = input(2015, title="Start Year", minval=1980, step=1)
timeFilter = true
//R Size (Risk Amount)
rStaticOrPercent = input(title="R Static or Percent", defval="Percent", options=["Static", "Percent"])
rSizeStatic = input(2000, title="R Size Static", minval=1, step=100)
rSizePercent = input(3, title="R Size Percent", minval=.01, step=.01)
rSize = rStaticOrPercent == "Static" ? rSizeStatic : rStaticOrPercent == "Percent" ? (rSizePercent * .01 * strategy.equity) : 1
//Recent Trend Indicator "See the standalone version for detailed description"
res = input(title="Trend Timeframe", type=input.resolution, defval="W")
trend = input(26, minval=1, title="# of Bars for Trend")
trendMult = input(15, minval=0, title="Trend Growth %", step=.25) / 100
currentClose = security(syminfo.tickerid, res, close)
pastClose = security(syminfo.tickerid, res, close[trend])
//Trend Indicator
upTrend = (currentClose >= (pastClose * (1 + trendMult)))
downTrend = (currentClose <= (pastClose * (1 - trendMult)))
sidewaysUpTrend = (currentClose < (pastClose * (1 + trendMult)) and (currentClose > pastClose))
sidewaysDownTrend = (currentClose > (pastClose * (1 - trendMult)) and (currentClose < pastClose))
//Plot Trend on Chart
plotshape(upTrend, "Up Trend", style=shape.square, location=location.top, color=color.green, size=size.small)
plotshape(downTrend, "Down Trend", style=shape.square, location=location.top, color=color.red, size=size.small)
plotshape(sidewaysUpTrend, "Sideways Up Trend", style=shape.square, location=location.top, color=color.yellow, size=size.small)
plotshape(sidewaysDownTrend, "Sideways Down Trend", style=shape.square, location=location.top, color=color.orange, size=size.small)
//What trend signals to use in entrySignal
trendRequired = input(title="Trend Required", defval="Red", options=["Green", "Yellow", "Orange", "Red"])
goTrend = trendRequired == "Orange" ? upTrend or sidewaysUpTrend or sidewaysDownTrend : trendRequired == "Yellow" ? upTrend or sidewaysUpTrend : trendRequired == "Green" ? upTrend : trendRequired == "Red" ? upTrend or sidewaysUpTrend or sidewaysDownTrend or downTrend : na
//MAs Inputs Defalt is 10 EMA, 20 EMA, 50 EMA, 100 SMA and 200 SMA
ma1Length = input(10, title="MA1 Period", minval=1, step=1)
ma1Type = input(title="MA1 Type", defval="EMA", options=["SMA", "EMA", "WMA"])
ma2Length = input(20, title="MA2 Period", minval=1, step=1)
ma2Type = input(title="MA2 Type", defval="EMA", options=["SMA", "EMA", "WMA"])
ma3Length = input(34, title="MA3 Period", minval=1, step=1)
ma3Type = input(title="MA3 Type", defval="EMA", options=["SMA", "EMA", "WMA"])
ma4Length = input(100, title="MA4 Period", minval=1, step=1)
ma4Type = input(title="MA4 Type", defval="SMA", options=["SMA", "EMA", "WMA"])
ma5Length = input(200, title="MA5 Period", minval=1, step=1)
ma5Type = input(title="MA5 Type", defval="SMA", options=["SMA", "EMA", "WMA"])
//MAs defined
ma1 = ma1Type == "EMA" ? ema(close, ma1Length) : ma1Type == "SMA" ? sma(close, ma1Length) : wma(close, ma1Length)
ma2 = ma2Type == "EMA" ? ema(close, ma2Length) : ma2Type == "SMA" ? sma(close, ma2Length) : wma(close, ma2Length)
ma3 = ma3Type == "EMA" ? ema(close, ma3Length) : ma3Type == "SMA" ? sma(close, ma3Length) : wma(close, ma3Length)
ma4 = ma4Type == "SMA" ? sma(close, ma4Length) : ma4Type == "EMA" ? ema(close, ma4Length) : wma(close, ma4Length)
ma5 = ma5Type == "SMA" ? sma(close, ma5Length) : ma5Type == "EMA" ? ema(close, ma5Length) : wma(close, ma5Length)
//Plot MAs
plot(ma1, title="MA1", color=color.yellow, linewidth=1, style=plot.style_line)
plot(ma2, title="MA2", color=color.purple, linewidth=1, style=plot.style_line)
plot(ma3, title="MA3", color=#00FFFF, linewidth=1, style=plot.style_line)
plot(ma4, title="MA4", color=color.blue, linewidth=2, style=plot.style_line)
plot(ma5, title="MA5", color=color.orange, linewidth=2, style=plot.style_line)
//Allows user to toggle on/off ma1 > ma2 filter
enableShortMAs = input(title="Enable Short MA Cross Filter", defval="No", options=["Yes", "No"])
shortMACross = enableShortMAs == "Yes" and ma1 > ma2 or enableShortMAs == "No"
//Allows user to toggle on/off ma4 > ma5 filter
enableLongMAs = input(title="Enable Long MA Cross Filter", defval="No", options=["Yes", "No"])
longMACross = enableLongMAs == "Yes" and ma4 >= ma5 or enableLongMAs == "No"
//Entry Signals
entrySignal = (strategy.position_size <= 0 and close[1] < ma1[1] and close > ma1 and close > ma2 and close > ma3 and shortMACross and ma1 > ma3 and longMACross and goTrend)
secondSignal = (strategy.position_size > 0 and close[1] < ma1[1] and close > ma1 and close > ma2 and close > ma3 and shortMACross and ma1 > ma3 and longMACross and goTrend)
plotshape(entrySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(secondSignal, style=shape.triangleup, location=location.belowbar, color=color.lime, size=size.small)
//ATR for Stops
atrValue = (atr(14))
//to test ATR enable next line
//plot(atrValue, linewidth=1, color=color.black, style=plot.style_line)
atrMult = input(2.5, minval=.25, step=.25, title="Stop ATR Multiple")
//Only target3Mult is used in current strategy target1 and target2 might be used in the future with pyramiding
//target1Mult = input(1.0, minval=.25, step=.25, title="Targert 1 Multiple")
//target2Mult = input(2.0, minval=.25, step=.25, title="Targert 2 Multiple")
target3Mult = input(3.0, minval=.25, step=.25, title="Target Multiple")
enableAtrStop = input(title="Enable ATR Stops", defval="No", options=["Yes", "No"])
//Intitial Recomended Stop Location
atrStop = entrySignal and ((high - (atrMult * atrValue)) < low) ? (high - (atrMult * atrValue)) : low
//oneAtrStop is used for testing only enable next 2 lines to test
//oneAtrStop = entrySignal ? (high - atrValue) : na
//plot(oneAtrStop, "One ATR Stop", linewidth=2, color=color.orange, style=plot.style_linebr)
initialStop = entrySignal and enableAtrStop == "Yes" ? atrStop : entrySignal ? low : na
//Stops changed to stoploss to hold value for orders the next line is old code "bug"
//plot(initialStop, "Initial Stop", linewidth=2, color=color.red, style=plot.style_linebr)
//Set Initial Stop and hold value "debug code"
stoploss = valuewhen(entrySignal, initialStop, 0)
plot(stoploss, title="Stop", linewidth=2, color=color.red)
enableStops = input(title="Enable Stops", defval="No", options=["Yes", "No"])
yesStops = enableStops == "Yes" ? 1 : enableStops == "No" ? 0 : na
//Calculate size of trade based on R Size
//Original buggy code: 
//positionSize = (rSize/(close - initialStop))
//Added a minimum order size of 1 "debug code"
positionSize = (rSize/(close - initialStop)) > 1 ? (rSize/(close - initialStop)) : 1
//Targets
//Enable or Disable Targets
enableTargets = input(title="Enable Targets", defval="No", options=["Yes", "No"])
yesTargets = enableTargets == "Yes" ? 1 : enableTargets == "No" ? 0 : na
//Only target3 is used in current strategy target1 and target2 might be used in the future with pyramiding
//target1 = entrySignal ? (close + ((close - initialStop) * target1Mult)) : na
//target2 = entrySignal ? (close + ((close - initialStop) * target2Mult)) : na
target3 = entrySignal ? (close + ((close - initialStop) * target3Mult)) : na
//plot(target1, "Target 1", linewidth=2, color=color.green, style=plot.style_linebr)
//plot(target2, "Target 2", linewidth=2, color=color.green, style=plot.style_linebr)
plot(target3, "Target 3", linewidth=2, color=color.green, style=plot.style_linebr)
//Set Target and hold value "debug code"
t3 = valuewhen(entrySignal, target3, 0)
//To test t3 and see plot enable next line
//plot(t3, title="Target", linewidth=2, color=color.green)
//MA1 Cross Exit
enableEarlyExit = input(title="Enable Early Exit", defval="Yes", options=["Yes", "No"])
earlyExit = enableEarlyExit == "Yes" ? 1 : enableEarlyExit == "No" ? 0 : na
ma1CrossExit = strategy.position_size > 0 and close < ma1
//Entry Order
strategy.order("Entry", long = true, qty = positionSize, when = (strategy.position_size <= 0 and entrySignal and timeFilter))
//Early Exit Order
strategy.close_all(when = ma1CrossExit and timeFilter and earlyExit, comment = "MA1 Cross Exit")
//Stop and Target Orders
//strategy.cancel orders are needed to prevent bug with Early Exit Order
strategy.order("Stop Loss", false, qty = strategy.position_size, stop=stoploss, oca_name="Exit",  when = timeFilter and yesStops, comment = "Stop Loss")
strategy.cancel("Stop Loss", when = ma1CrossExit and timeFilter and earlyExit)
strategy.order("Target", false, qty = strategy.position_size, limit=t3, oca_name="Exit",  when = timeFilter and yesTargets, comment = "Target")
strategy.cancel("Target", when = ma1CrossExit and timeFilter and earlyExit)

مزید