গোল্ডেন ক্রস এসএমএ ট্রেডিং কৌশলটি বিভিন্ন সময়সীমার দুটি চলমান গড়ের ক্রসওভারের উপর ভিত্তি করে ক্রয় এবং বিক্রয় সংকেত উত্পন্ন করে। বিশেষত, যখন দ্রুততম চলমান গড় নীচে থেকে ধীর গতির গড়ের উপরে অতিক্রম করে, তখন একটি সোনার ক্রস গঠিত হয়, যা একটি উত্থান প্রবণতা বিপরীত নির্দেশ করে। যখন দ্রুততম এমএ উপরে থেকে ধীর গতির এমএ এর নীচে অতিক্রম করে, তখন একটি মৃত্যু ক্রস গঠিত হয়, যা একটি হ্রাস প্রবণতা বিপরীত নির্দেশ করে।
এই কৌশল দুটি মূলনীতির উপর ভিত্তি করেঃ
মুভিং গড়গুলি বাজারের প্রবণতা এবং গতি প্রতিফলিত করতে পারে। স্বল্পমেয়াদী এমএ সাম্প্রতিক মূল্য চলাচল এবং বিপরীতমুখীতা ক্যাপচার করে। দীর্ঘমেয়াদী এমএ প্রচলিত প্রবণতা দেখায়।
যখন দ্রুততম এমএ ধীরতম এমএ এর সাথে একটি সোনার ক্রস গঠন করে, তখন এটি নির্দেশ করে যে স্বল্পমেয়াদী গতি দীর্ঘমেয়াদী প্রবণতার তুলনায় শক্তি অর্জন করছে, তাই সম্ভবত একটি আপট্রেন্ডের শুরু। মৃত্যুর ক্রসটি নির্দেশ করে যে দীর্ঘমেয়াদী ডাউনট্রেন্ড প্রভাবশালী, তাই সম্ভবত একটি অব্যাহত ডাউনট্রেন্ড।
বিশেষ করে এই কৌশল 13 এবং 30 সময়ের সহজ চলমান গড় ব্যবহার করে এবং তাদের ক্রসওভার সংকেত ট্রেড করে। ক্রসওভার যুক্তি হলঃ
এমএগুলির মধ্যে গোল্ডেন ক্রস একটি দীর্ঘ সংকেত তৈরি করে, যা কেনার সুযোগ নির্দেশ করে। এই সংকেতের কার্যকারিতা মূল্যায়ন করা হয় যে কিছু সর্বনিম্ন সময়ের মধ্যে একটি স্থায়ী আপট্রেন্ডের প্রয়োজন হয় যাতে ষাঁড়ের প্রবণতা নিশ্চিত হয়।
এমএগুলির মধ্যে মৃত্যুর ক্রস একটি সংক্ষিপ্ত সংকেত তৈরি করে। একইভাবে, সংক্ষিপ্ত সংকেতের কার্যকারিতা নিশ্চিত করার জন্য একটি স্থায়ী হ্রাস প্রবণতা প্রয়োজন।
এমএগুলির মধ্যে ঢাল পার্থক্য ক্রসওভার সংকেতগুলির শক্তি পরিমাপ করতে ব্যবহৃত হয়। কেবলমাত্র যখন পার্থক্য একটি প্রান্তিক সীমা অতিক্রম করে তখনই সংকেতটি ট্রেড করার জন্য যথেষ্ট শক্তিশালী বলে মনে করা হবে। এটি মিথ্যা সংকেতগুলি নির্মূল করতে সহায়তা করে।
স্টপ লস ২০% এবং লাভ ১০০%।
এসএমএ ক্রসওভার কৌশল নিম্নলিখিত সুবিধাগুলি রয়েছেঃ
যুক্তিটি সহজ এবং সহজেই বোঝা যায়, নতুনদের জন্য উপযুক্ত।
গোলমাল ফিল্টার করতে এবং স্বল্পমেয়াদী ওঠানামা দ্বারা বিভ্রান্ত হওয়া এড়াতে দামের গড় ব্যবহার করে।
ক্রসওভার সংকেতগুলিকে অন্ধভাবে অনুসরণ করার পরিবর্তে প্রবণতা ধারাবাহিকতার মূল্যায়ন করে, সামগ্রিক বাজারের অবস্থার সাথে আরও বেশি নিশ্চিতকরণ নিশ্চিত করে।
সিগন্যালকে আরো নির্ভরযোগ্য করার জন্য এমএ-তে ঢালের গতির ফ্যাক্টর যুক্ত করা হয়।
সহজ ব্যাকটেস্টিং এবং অপ্টিমাইজেশান মাত্র কয়েকটি মূল পরামিতি যেমন এমএ সময়কাল এবং প্রবণতা সময়কাল।
এই কৌশলটি নিম্নলিখিত ঝুঁকিগুলিও বহন করেঃ
ক্রসওভার সংকেতগুলি প্রকৃতির দ্বারা পিছিয়ে থাকে এবং বিপরীতমুখী পূর্বাভাস দিতে পারে না। বিলম্বের ঝুঁকি বিদ্যমান। সংক্ষিপ্ত এমএ ব্যবহার করা উচিত বা ভবিষ্যদ্বাণীমূলক সূচকগুলির সাথে একত্রিত করা উচিত।
যান্ত্রিক সিস্টেমগুলি একযোগে ট্রেডিং শুরু করে, গতি বাড়ায় এবং স্টপ লস / লাভ গ্রহণকে অবৈধ করে। পর্যায়ক্রমিক প্রস্থান বা ম্যানুয়াল ওভাররাইড ব্যবহার করা উচিত।
এই ধরনের যন্ত্রগুলি এড়ানো উচিত এবং ট্রেন্ডিং জোড়াগুলিতে মনোনিবেশ করা উচিত।
পারফরম্যান্সটি প্রবণতার সময়কালের মতো সঠিকভাবে ক্যালিব্রেটেড পরামিতিগুলির উপর নির্ভর করে। সর্বোত্তম মানগুলি খুঁজে পেতে পুনরাবৃত্তিমূলক পরীক্ষার প্রয়োজন।
কৌশলটি নিম্নলিখিতগুলির মাধ্যমে আরও অনুকূলিত করা যেতে পারেঃ
উদাহরণস্বরূপ, সাপ্তাহিক বা মাসিক মূল্য ব্যবহার করে, বিপরীত প্রবণতা ট্রেড এড়ানোর জন্য উচ্চতর সময়সীমার প্রবণতা মূল্যায়ন যোগ করা।
মিথ্যা সংকেত দূর করার জন্য ট্রেডিং ভলিউম নিশ্চিতকরণের প্রয়োজন। শুধুমাত্র ট্রেডিং সংকেত যা ভলিউম বাড়ছে।
সেরা সময়ের সমন্বয় খুঁজে পেতে এমএ পরামিতি অপ্টিমাইজ করা। অভিযোজনশীল চলমান গড় বিবেচনা করুন।
সিগন্যাল নিশ্চিতকরণ এবং নির্ভুলতার জন্য এমএসিডি, কেডি এর মতো জনপ্রিয় সূচক অন্তর্ভুক্ত করুন।
ঝুঁকি নিয়ন্ত্রণের জন্য ধাপে ধাপে স্টপ লস/টেক প্রফিট গ্রহণ করুন।
এসএমএ ক্রসওভার কৌশল অত্যন্ত স্বজ্ঞাত এবং ব্যাখ্যা করা সহজ। এটি ক্রসওভার সংকেতগুলির সহজ প্রবণতা সনাক্তকরণের ক্ষমতা সহ চলমান গড়ের গোলমাল ফিল্টারিং সম্পত্তিকে একত্রিত করে। অতিরিক্ত সংকেত নিশ্চিতকরণ আরও বেশি ব্যবহারিকতা এবং স্থিতিশীলতা সরবরাহ করে। অন্তর্ভুক্ত উন্নতির উপরে, আরও অপ্টিমাইজেশনের জন্য প্রচুর জায়গা রয়েছে, এটি গবেষণা করার জন্য একটি মূল্যবান কৌশল তৈরি করে।
/*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