گولڈن کراس ایس ایم اے ٹریڈنگ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-26 14:29:01
ٹیگز:

img

جائزہ

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

اصول

یہ حکمت عملی دو اصولوں پر مبنی ہے:

  1. متحرک اوسط مارکیٹ کے رجحان اور رفتار کی عکاسی کرسکتے ہیں۔ قلیل مدتی ایم اے حالیہ قیمتوں کی نقل و حرکت اور الٹ کو پکڑتا ہے۔ طویل مدتی ایم اے غالب رجحان کو ظاہر کرتا ہے۔

  2. جب تیز رفتار ایم اے آہستہ آہستہ ایم اے کے ساتھ سنہری کراس بناتا ہے تو ، اس سے یہ ظاہر ہوتا ہے کہ قلیل مدتی رفتار طویل مدتی رجحان پر طاقت حاصل کررہی ہے ، لہذا ممکنہ طور پر ایک اپ ٹرینڈ کا آغاز ہے۔ موت کا کراس اس بات کی نشاندہی کرتا ہے کہ طویل مدتی ڈاؤن ٹرینڈ غالب ہے ، لہذا ممکنہ طور پر جاری ڈاؤن ٹرینڈ۔

خاص طور پر ، یہ حکمت عملی 13 اور 30 مدت کے سادہ چلتے ہوئے اوسط کا استعمال کرتی ہے اور ان کے کراس اوور سگنلز کی تجارت کرتی ہے۔ کراس اوور منطق یہ ہے:

  1. ایم اے کے مابین سنہری کراس ایک طویل سگنل تیار کرتا ہے ، جو خریدنے کے موقع کی نشاندہی کرتا ہے۔ سگنل کی قابل عمل کا اندازہ کچھ کم سے کم مدت کے دوران برقرار رہنے والے عروج کے رجحان کی ضرورت سے کیا جاتا ہے تاکہ بیل رجحان کی تصدیق کی جاسکے۔

  2. ایم اے کے مابین موت کا کراس ایک مختصر سگنل پیدا کرتا ہے۔ اسی طرح ، مختصر سگنل کے قابل عمل ہونے کی تصدیق کے ل a ، ایک مستقل ڈاؤن ٹرینڈ کی ضرورت ہے۔

  3. ایم اے کے مابین ڈھلوان کا فرق کراس اوور سگنلز کی طاقت کا اندازہ کرنے کے لئے استعمال ہوتا ہے۔ صرف اس صورت میں جب فرق ایک حد سے تجاوز کرتا ہے تو سگنل کو تجارت کے ل strong کافی مضبوط سمجھا جاتا ہے۔ اس سے غلط سگنلز کو ختم کرنے میں مدد ملتی ہے۔

  4. سٹاپ نقصان 20 فیصد اور منافع 100 فیصد مقرر کیا جاتا ہے.

فوائد

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

  1. منطق سادہ اور سمجھنے میں آسان ہے، beginners کے لئے موزوں.

  2. شور کو فلٹر کرنے اور قلیل مدتی اتار چڑھاؤ سے گمراہ ہونے سے بچنے کے لئے قیمتوں کا اوسط استعمال کرتا ہے۔

  3. اس کے بجائے صرف اندھے طور پر کراس اوور سگنل کی پیروی کرنے کے بجائے رجحان کی مستقل مزاجی کا اندازہ کرتا ہے ، جس سے مارکیٹ کے مجموعی حالات کے ساتھ زیادہ تصدیق کی ضمانت ملتی ہے۔

  4. MAs پر جھکاؤ رفتار فیکٹر متعارف کرایا سگنل زیادہ قابل اعتماد بنانے کے لئے.

  5. صرف چند اہم پیرامیٹرز جیسے ایم اے کی مدت اور رجحان کی مدت کے ساتھ آسان بیک ٹیسٹنگ اور اصلاح.

خطرات

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

  1. کراس اوور سگنل فطرت کے لحاظ سے پسماندہ ہیں اور الٹ کی پیش گوئی نہیں کرسکتے ہیں۔ تاخیر کا خطرہ موجود ہے۔ مختصر ایم اے کا استعمال کرنا چاہئے یا پیش گوئی کرنے والے اشارے کے ساتھ مل کر۔

  2. مکینیکل سسٹم بیک وقت تجارت کو متحرک کرنے کا رجحان رکھتے ہیں ، رفتار کو بڑھا دیتے ہیں اور اسٹاپ نقصان / منافع حاصل کرنے کو باطل کرتے ہیں۔ مرحلہ وار باہر نکلنے یا دستی اوور رائڈ کا استعمال کرنا چاہئے۔

  3. متضاد ضمنی بازاروں میں اچھی کارکردگی کا مظاہرہ نہیں کرتا ہے۔ ایسے آلات سے گریز کریں اور ٹرینڈنگ جوڑوں پر توجہ دیں۔

  4. کارکردگی کا انحصار مناسب طریقے سے کیلیبرڈ پیرامیٹرز جیسے رجحان کی مدت پر ہے۔ زیادہ سے زیادہ اقدار تلاش کرنے کے لئے تکرار ٹیسٹنگ کی ضرورت ہے۔

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

اسٹریٹیجی کو مزید بہتر بنایا جاسکتا ہے:

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

  2. غلط سگنلز کو ختم کرنے کے لئے تجارتی حجم کی تصدیق کی ضرورت ہے۔ صرف بڑھتی ہوئی حجم کے ساتھ تجارتی سگنل۔

  3. بہترین ادوار کا مجموعہ تلاش کرنے کے لئے ایم اے پیرامیٹرز کو بہتر بنانا۔ موافقت پذیر چلتی اوسط پر غور کریں۔

  4. سگنل کی تصدیق اور درستگی میں مدد کے لئے MACD، KD جیسے مقبول اشارے شامل کریں.

  5. خطرے کو بہتر طریقے سے کنٹرول کرنے کے لئے مرحلہ وار سٹاپ نقصان / منافع لے لو.

نتیجہ

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MakeMoneyCoESTB2020


//*********************Notes for continued work***************

//************************************************************

//Hello my fellow investors
//I am creating a simple non-cluttered strategy that uses 3(+1) simple means to determine: viability, entry, and exit
//1) Has a consistent trend been maintained for several days/weeks
//2) SH SMA crossover LG SMA = Bullish entry/LG SMA crossover SH SMA = Bearish entry
//3) Use the Slope factor & Weeks in Trend (WiT) to dertermine how strong of an entry signal you are comfortable with
//4) Exit position based on next SMA cross and trend reversal or stop loss%
//3+1) For added confidence in trend detection: Apply MACD check - buy--> MACD line above signal line and corssover below histogram \\ sell --> MACD line below signal line and crossover above histogram.
//*)This code also allows you to determine your desired backtesting date compliments of alanaster


//This code is the product of many hours of hard work on the part of the greater tradingview community.  The credit goes to everyone in the community who has put code out there for the greater good.

//Happy Hunting!

// 1. Define strategy settings*************************************************************************************************************************************************************************

//Title
strategy("KISS Strategy: SMA + EMA", shorttitle="KISS Strat")

//define calculations price source
price = input(title="Price Source", defval=close)

// 2. Calculate strategy values*************************************************************************************************************************************************************************

//Calculate 13/30/200SMA 
SH_SMA_length= input(title="SH SMA Length", defval=13) //short SMA length
LG_SMA_length= input(title="LG SMA Length", defval=30) //long SMA length
GV_SMA_length= input(title="SH SMA Length", defval=200) //Gravitational SMA length

SH_SMA=sma(price, SH_SMA_length) //short SMA 
LG_SMA=sma(price, LG_SMA_length) //long SMA
GV_SMA=sma(price, GV_SMA_length) //gravitational SMA

//calculate MACD
//define variables for speed
fast = 12, slow = 26
//define parameters to calculate MACD
fastMA = ema(price, fast)
slowMA = ema(price, slow)
//define MACD line
macd = fastMA - slowMA
//define SIGNAL line
signal = sma(macd, 9)

//Determine what type of trend we are in
dcp = security(syminfo.tickerid, 'D', close)   //daily close price 
wcp = security(syminfo.tickerid, 'W', close)   //weekly close price 

WiT = input(title="Weeks In Trend", defval=1, maxval=5, minval=1)    //User input for how many weeks of price action to evaluate (Weeks in Trend = WiT)
BearTrend = false       //initialize trend variables as false
BullTrend = false       //initialize trend variables as false

// BullTrend := (wcp > SH_SMA) and (SH_SMA > LG_SMA)  //true if price is trending up based on weekly price close
// BearTrend := (wcp < SH_SMA) and (SH_SMA < LG_SMA)  //true if price is trending down based on weekly price close


// BullTrend := (price > SH_SMA) and (SH_SMA > LG_SMA)  //true if price is trending up
// BearTrend := (price < SH_SMA) and (SH_SMA < LG_SMA)  //true if price is trending down

//Determine if the market has been in a trend for 'n' weeks

n=WiT                           //create loop internal counting variable
for i=1 to WiT                  //create loop to determine if BearTrend=true to set number of weeks
    if (wcp[n] < price)         //evaluate if BearTrend=false comparing the current price to a paticular week close
        BearTrend := false      //set value to false if older price value is less than newer: trending up
        break                   //break out of for loop when trend first falters
    if (wcp[n] > price)         //evaluate if BearTrend=true comparing the current price to a paticular week close
        BearTrend := true       //set value to true if older price value is greater than newer: trending down
    n:=n-1                      //set internal counter one day closer to present

m=WiT                           //create loop internal counting variable
for j=1 to WiT                  //create loop to determine if BearTrend=true to set number of weeks
    if (wcp[m] > price)         //evaluate if BullTrend=false comparing the current price to a paticular week close
        BullTrend := false      //set value to false if older price value is greater than newer: trending down
        break                   //break out of for loop when trend first falters
    if (wcp[m] < price)         //evaluate if BullTrend=true comparing the current price to a paticular week close
        BullTrend := true       //set value to true if older price value is less than newer: trending up
    m:=m-1                      //set internal counter one day closer to present


//Determine if crossings occur
SH_LGcrossover = crossover(SH_SMA, LG_SMA)  //returns true if short crosses over long
SH_LGcrossunder = crossunder(SH_SMA, LG_SMA)    //returns true if short crosses under long

//Determine the slope of the SMAs when a cross over occurs
SlopeFactor= input(title="Slope Factor", defval=.01, minval=0, step = 0.001) //user input variable for what slope to evaluate against
XSlopeSH = abs(SH_SMA-SH_SMA[2]) //slope of short moving average (time cancels out)
XSlopeLG = abs(LG_SMA-LG_SMA[2]) //slope of long moving average (time cancels out)
StrongSlope = iff (abs(XSlopeSH-XSlopeLG)>SlopeFactor, true, false) //create a boolean variable to determine is slope intensity requirement is met

// ************************************ INPUT BACKTEST RANGE ******************************************=== coutesy of alanaster
fromMonth = input(defval = 4,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

bgcolor(color = showDate and window() ? color.gray : na, transp = 90) 
// === EXECUTION ===
//strategy.entry("L", strategy.long, when = window() and crossOv)    // enter long when "within window of time" AND crossover
//strategy.close("L", when = window() and crossUn)                   // exit long when "within window of time" AND crossunder

// 3. Output strategy data*************************************************************************************************************************************************************************

//Embolden line if a trend exists
trendcolorLG = BearTrend?color.red:color.black //highlights beartrend condition met graphically
trendcolorSH = BullTrend?color.green:color.black //highlights beartrend condition met graphically

//plot SMAs
plot(SH_SMA, title = "SH SMA", color = trendcolorSH)
plot(LG_SMA, title = "LG SMA", color = trendcolorLG)
plot(GV_SMA, title = "GV SMA", color = color.silver, linewidth = 4, transp = 70)

//Highlight crossovers
plotshape(series=SH_LGcrossover, style=shape.arrowup, location=location.belowbar,size=size.normal, color=color.green)
plotshape(series=SH_LGcrossunder, style=shape.arrowdown, location=location.abovebar,size=size.normal, color=color.red)

// 4. Determine Long & Short Entry Calculations*************************************************************************************************************************************************************************

//Define countback variable
countback=input(minval=0, maxval=5, title="Price CountBack", defval=0)
//User input for what evaluations to run: SMA or SMA + EMA
SMA_Y_N=input(defval = "Y", title="Run SMA", type=input.string, options=["Y", "N"])
MACD_Y_N=input(defval = "N", title="Run MACD", type=input.string, options=["Y", "N"])

//Calculate SMA Cross entry conditions
SMAbuy=false
SMAsell=false
SMAbuy := SH_LGcrossover and StrongSlope and BearTrend[WiT*7]   //enter long if short SMA crosses over long SMA & security has been in a BearTrend for 'n' days back
SMAsell := SH_LGcrossunder and StrongSlope and BullTrend[WiT*7] //enter short if short SMA crosses under long SMA & security has been in a BullTrend for 'n' days back

//Calculate MACD Cross entry conditions
MACDbuy = iff(MACD_Y_N=="Y", crossunder(signal[countback], macd[countback]), true) and iff(MACD_Y_N=="Y", macd[countback]<0, true) and StrongSlope and BearTrend     //enter long if fast MACD crosses over slow MACD & there is a strong slope & security has been in a BearTrend for 'n' days back
MACDsell = iff(MACD_Y_N=="Y", crossunder(macd[countback], signal[countback]), true) and iff(MACD_Y_N=="Y", signal[countback]>0, true) and StrongSlope and BullTrend  //enter short if fast MACD crosses under slow MACD & there is a strong slope & security has been in a BullTrend for 'n' days back

//long entry condition
dataHCLB=(iff(SMA_Y_N=="Y", SMAbuy, true) and iff(MACD_Y_N=="Y", MACDbuy, true))
plotshape(dataHCLB, title= "HC-LB", color=color.lime, style=shape.circle, text="HC-LB")
strategy.entry("HC-Long", strategy.long, comment="HC-Long", when = dataHCLB and window())

//short entry condition
dataHCSB=(iff(SMA_Y_N=="Y", SMAsell, true) and iff(MACD_Y_N=="Y", MACDsell, true))
plotshape(dataHCSB, title= "HC-SB", color=color.fuchsia, style=shape.circle, text="HC-SB")
strategy.entry("HC-Short", strategy.short, comment="HC-Short", when=dataHCSB and window())


// 5. Submit Profit and Loss Exit Calculations Orders*************************************************************************************************************************************************************************

// User Options to Change Inputs (%)
stopPer = input(12, title='Stop Loss %', type=input.float) / 100
takePer = input(25, title='Take Profit %', type=input.float) / 100

// Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)

//exit position conditions and orders
if strategy.position_size > 0//or crossunder(price[countback], upperBB)
    strategy.exit(id="Close Long", when = window(), stop=longStop, limit=longTake)
if strategy.position_size < 0 //or crossover(price[countback], lowerBB)
    strategy.exit(id="Close Short", when = window(), stop=shortStop, limit=shortTake)





//Evaluate/debug equation***************************************************************************************************************************************************************************
// plotshape((n==5? true : na), title='n=5', style=shape.labeldown, location=location.abovebar, text='5', color=color.white, textcolor=color.black, transp=0) //print n value if 5
// plotshape((n==4? true : na), title='n=4', style=shape.labeldown, location=location.abovebar, text='4', color=color.white, textcolor=color.black, transp=0) //print n value if 4 
// plotshape((n==3? true : na), title='n=3', style=shape.labeldown, location=location.abovebar, text='3', color=color.white, textcolor=color.black, transp=0) //print n value if 3
// plotshape((n==2? true : na), title='n=2', style=shape.labeldown, location=location.abovebar, text='2', color=color.white, textcolor=color.black, transp=0) //print n value if 2
// plotshape((n==1? true : na), title='n=1', style=shape.labeldown, location=location.abovebar, text='1', color=color.white, textcolor=color.black, transp=0) //print n value if 1
// lineValue = 11                                           //set random visible line value to check when equation is true
// colorP = (BearTrend==true) ? color.green : color.red
// plot (lineValue, title = "BearTrend", color = colorP)   //Plot when condition true=green, false=red
// plot (XSlopeLG+15, color=color.white) //used for code debugging
// plot (XSlopeSH+15, color=color.blue) //used for code debugging
// plot (abs(XSlopeSH-XSlopeLG)+20, color=color.fuchsia) //used for code debugging

مزید