গোল্ডেন ক্রস মুভিং এভারেজ ট্রেডিং কৌশল একটি ক্লাসিক পরিমাণগত ট্রেডিং কৌশল। এই কৌশলটি দীর্ঘ এবং সংক্ষিপ্ত অবস্থানের জন্য বাজারের প্রবণতা নির্ধারণের জন্য বিভিন্ন সময়ের চলমান গড় ব্যবহার করে। যখন স্বল্পমেয়াদী চলমান গড় দীর্ঘমেয়াদী চলমান গড়ের উপরে অতিক্রম করে, এটি একটি ক্রয় সংকেত হিসাবে বিবেচিত হয়। যখন স্বল্পমেয়াদী চলমান গড় দীর্ঘমেয়াদী চলমান গড়ের নীচে অতিক্রম করে, এটি একটি বিক্রয় সংকেত হিসাবে বিবেচিত হয়।
এই কৌশলটি বিভিন্ন সময়ের তিনটি সহজ চলমান গড় (এসএমএ) এর উপর ভিত্তি করেঃ 50-দিন, 100-দিন এবং 200-দিন। নির্দিষ্ট ট্রেডিং যুক্তি নিম্নরূপঃ
এন্ট্রি সিগন্যালঃ যখন ৫০ দিনের চলমান গড় ১০০ দিনের চলমান গড়ের উপরে চলে যায়, তখন লম্বা হয়ে যায়।
প্রস্থান সংকেতঃ যখন ৫০ দিনের চলমান গড় ১০০ দিনের চলমান গড়ের নিচে অতিক্রম করে, তখন পজিশন বন্ধ করুন; অথবা যখন বন্ধের মূল্য ১০০ দিনের চলমান গড়ের নিচে থাকে, তখন প্রস্থান করুন; অথবা ১০০ দিনের চলমান গড় ২০০ দিনের চলমান গড়ের নিচে অতিক্রম করলে প্রস্থান করুন।
লাভ এবং স্টপ লস: সেট ট্রেলিং লাভ এবং স্থির স্টপ লস।
এই কৌশলটি বাজারের গড় মূল্যের প্রবণতা কার্যকরভাবে নির্ধারণের জন্য চলমান গড়ের ক্ষমতা ব্যবহার করে। স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী গড়ের ক্রসওভারকে বাজারটি একটি আপ বা ডাউন ট্রেন্ডে প্রবেশ করছে বলে দেখা হয়, অতএব দীর্ঘ বা প্রস্থান সংকেত। এটি কৌশলটিকে কার্যকরভাবে বাজারের প্রবণতা ক্যাপচার করতে দেয়।
এটি বাস্তবায়ন করা সহজ, এর জন্য মাত্র তিনটি মুভিং মিডিয়ার প্রয়োজন।
মুভিং এভারেজগুলোতে গোলমাল ফিল্টারিং ক্ষমতা রয়েছে যা ট্রেডের উপর বাজারের র্যান্ডমালিটির প্রভাব কমাতে পারে এবং সংকেতগুলোকে আরো নির্ভরযোগ্য করে তোলে।
প্রধান প্রবণতা ক্যাপচার করা সহজ। চলমান গড় কার্যকরভাবে গড় বাজার মূল্য প্রবণতা পরিবর্তন প্রতিফলিত, বড় প্রবণতা পরিবর্তন নির্ধারণের জন্য স্বল্প ও দীর্ঘমেয়াদী লাইনগুলির মধ্যে ক্রসওভার ব্যবহার করে।
অত্যন্ত কাস্টমাইজযোগ্য। ঝুঁকি নিয়ন্ত্রণের বিভিন্ন স্তরের জন্য চলমান গড় সময়কাল সামঞ্জস্য করা যেতে পারে।
অনেক মিথ্যা সংকেত তৈরি করতে পারে। যখন স্বল্প ও দীর্ঘমেয়াদী গড় খুব কাছাকাছি হয় তখন ঘন ঘন ক্রসওভার হতে পারে, যার ফলে অত্যধিক অবৈধ সংকেত হয়।
হঠাৎ ঘটনার প্রতি প্রতিক্রিয়া জানাতে ধীর। মুভিং গড়গুলি দামের পরিবর্তনের প্রতি ধীর গতিতে প্রতিক্রিয়া জানায় এবং বাজারের সংবাদ এবং বড় ইভেন্টগুলিতে তাত্ক্ষণিক প্রতিক্রিয়া জানাতে পারে না।
ক্ষুদ্রতম বাজারের ওঠানামা থেকে লাভ করতে অক্ষম। গোলমাল ফিল্টারিংয়ের অর্থ হল ক্ষুদ্র বাজারের ওঠানামা থেকে লাভ হারাতে হবে।
স্বতন্ত্র পরামিতি নির্বাচনঃ উপযুক্ত চলমান গড় সময়কাল মূলত স্বতন্ত্র এবং নির্দিষ্ট বাজারের উপর নির্ভরশীল।
মিথ্যা সংকেত হ্রাস করার জন্য ফিল্টার যুক্ত করুন, যেমন মূল্য পরিসীমা ফিল্টারগুলি একটি নির্দিষ্ট মাত্রার উপরে চলাচলের সংকেত সীমাবদ্ধ করতে।
সংমিশ্রণ কৌশলগুলির জন্য অন্যান্য সূচক অন্তর্ভুক্ত করুন, যা সংকেতের নির্ভুলতা উন্নত করতে পারে, যেমন অস্থিরতা বা ভলিউম সূচক।
মেশিন লার্নিং অ্যালগরিদমের উপর ভিত্তি করে গতিশীল গড় সময়ের গতিশীলভাবে অনুকূলিতকরণের জন্য অভিযোজিত অপ্টিমাইজেশান মডিউল যুক্ত করুন, বাজারের পরিবর্তিত অবস্থার সাথে অভিযোজন সক্ষম করুন।
উন্নত বৈশিষ্ট্য নিষ্কাশন এবং মডেলিং ক্ষমতা জন্য চলমান গড় পরিবর্তে উন্নত গভীর শেখার মডেল অন্তর্ভুক্ত করুন।
গোল্ডেন ক্রস মুভিং এভারেজ ট্রেডিং কৌশল একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল। এটি সহজ এবং ব্যবহারিকভাবে গড় বাজার মূল্যের প্রবণতা প্রতিফলিত করে, নতুনদের জন্য উপযুক্ত। তবে এটির কিছু ত্রুটিও রয়েছে যা সংকেতের গুণমান উন্নত করে, অন্যান্য প্রযুক্তিগত সূচকগুলির সাথে একত্রিত করে, অভিযোজনশীল প্রক্রিয়া প্রবর্তন করে ইত্যাদি উন্নত করা যেতে পারে। সামগ্রিকভাবে, এটি উচ্চ রেফারেন্স এবং শেখার মান সহ একটি কৌশল।
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1m basePeriod: 1m 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/ // © CJDeegan //@version=4 strategy(title = "[LIVE] Golden Cross", overlay=true) // ------------Functions------------ //Percent to Decimal Conversion perToDec(a) => a * 0.01 //Price Difference to Tick diffToTick(a,b) => (a - b) / syminfo.mintick // ------------Strategy Inputs------------ takeProfitInput = input(300, "Take Profit Price (% Gain)") stopLossInput = input(25, "Stop Loss (% Loss)") startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2018, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2031, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // ------------Populate Indicators------------ //EMA sma50 = sma(close,50) sma100 = sma(close,100) sma200 = sma(close,200) // ------------Entry Logic------------ //Guards entryGuard = true //Triggers entryTrigger = crossover(sma50,sma100) //Conditions entryCondition = entryGuard and entryTrigger //Calculations //Execution if (inDateRange and entryCondition) strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry") //------------Exit Logic------------ //Guards //Triggers exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200) //Conditions exitCondition = exitTrigger //Calculations //Take Profit takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput)) //Take Profit Ticks takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price) //StopLoss stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput)) //Execution if (inDateRange) strategy.close("Long", when = exitCondition, comment = "Sell Trigger") strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice) //Plots plot(sma50, "SMA 50", color = color.blue) plot(sma100, "SMA 100", color = color.green) plot(sma200, "SMA 200", color = color.yellow) entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr) profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr) stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr) fill(entry,profit, color=color.green) fill(entry,stop, color=color.red)