ওপেন ক্লোজ ক্রস মুভিং এভারেজ ট্রেন্ড ফলোিং স্ট্র্যাটেজি হ'ল ওপেন এবং ক্লোজের দামের চলমান গড়ের উপর ভিত্তি করে একটি প্রবণতা অনুসরণকারী কৌশল। এটি ওপেন এবং ক্লোজের দামের চলমান গড় গণনা করে বর্তমান বাজারের প্রবণতা নির্ধারণ করে; যখন বন্ধের দামের চলমান গড়টি উদ্বোধনী মূল্যের চলমান গড়ের উপরে অতিক্রম করে তখন এটি দীর্ঘ হয় এবং যখন বন্ধের দামের চলমান গড়টি উদ্বোধনী মূল্যের চলমান গড়ের নীচে অতিক্রম করে তখন এটি সংক্ষিপ্ত হয়। কৌশলটি মুনাফা লক করতে এবং কার্যকরভাবে ঝুঁকি নিয়ন্ত্রণ করতে ট্রেলিং স্টপগুলিও সেট করে।
এই কৌশলটির মূল যুক্তিটি বর্তমান প্রবণতা নির্ধারণের জন্য খোলা এবং বন্ধ মূল্যের মধ্যে সম্পর্কের উপর ভিত্তি করে। খোলার মূল্য বর্তমান বাজারের সরবরাহ-চাহিদা সম্পর্ক এবং ট্রেডিং মনোবিজ্ঞানকে প্রতিফলিত করে, যখন বন্ধের মূল্য দিনের চূড়ান্ত ট্রেডিং ফলাফলকে প্রতিফলিত করে। সাধারণভাবে, যদি বন্ধের মূল্য খোলার দামের চেয়ে বেশি হয় তবে এটি নির্দেশ করে যে দিনের জন্য বাজারের প্রবণতা আপ এবং আবেগ আরও উত্থানমুখী। যদি বন্ধের মূল্য খোলার দামের চেয়ে কম হয় তবে এটি দিনের জন্য বাজারের প্রবণতা নেমে গেছে এবং আবেগ আরও হ্রাসপ্রাপ্ত।
এই কৌশলটি বর্তমান প্রবণতা দিক বিচার করার জন্য খোলা এবং বন্ধ মূল্যের চলমান গড় গণনা করে এই যুক্তি ব্যবহার করে। বিশেষত এর ট্রেডিং নিয়মগুলি হলঃ
যখন বন্ধের মূল্যের চলমান গড়টি খোলার মূল্যের চলমান গড়ের উপরে অতিক্রম করে তখন লম্বা যান। এটি বুলিশ আবেগকে শক্তিশালী করার সংকেত দেয় এবং একটি দীর্ঘ অবস্থান শুরু করা যায়।
যখন বন্ধের মূল্যের চলমান গড়টি খোলার মূল্যের চলমান গড়ের নীচে অতিক্রম করে তখন শর্ট যান। এটি নির্দেশ করে যে হ্রাসের মনোভাব বাড়ছে এবং একটি শর্ট পজিশন শুরু করা যেতে পারে।
বিপরীত সিগন্যালের সময় স্টপ লস দিয়ে বিদ্যমান পজিশন বন্ধ করুন।
স্ট্র্যাটেজিটি মুনাফা লক করার জন্য ট্রেলিং স্টপও সেট করে। একটি পজিশনে প্রবেশের পরে, এটি গতিশীলভাবে প্রবেশ মূল্য এবং বর্তমান মূল্যের মধ্যে পয়েন্ট পার্থক্য গণনা করে। যখন দামের চলাচল সেট স্টপ লস পয়েন্টের সীমা অতিক্রম করে, স্টপ লস লাইন আংশিক মুনাফা লক করার জন্য উপরে চলে যাবে।
সংক্ষেপে, কৌশলটি চলমান গড় সময়ের দৈর্ঘ্যের উপর প্রবণতা বিচার করে; এক সময়ে কেবলমাত্র একটি দিকনির্দেশক অবস্থান ধরে রাখে; এটিআর স্টপ ছাড়াই বিপরীত সংকেত দিয়ে সরাসরি বিদ্যমান অবস্থানগুলি থেকে বেরিয়ে আসে; এবং মুনাফা লক করার জন্য ট্রেলিং স্টপ সেটিংস রয়েছে।
এই কৌশল নিম্নলিখিত প্রধান সুবিধা আছেঃ
সহজ ও সুস্পষ্ট নিয়ম. খোলা-বন্ধ সম্পর্কের উপর ভিত্তি করে প্রবণতা বিচার করা সহজ এবং প্যারামিটারগুলির জন্য অনুকূলিতকরণ করা সহজ।
নমনীয় এমএ পছন্দ. এমএ টাইপ কয়েক ডজন থেকে পছন্দ এবং অপ্টিমাইজ আছে.
সামঞ্জস্যযোগ্য রেজোলিউশনসিগন্যালের সংবেদনশীলতা এবং সময়োপযোগীতার জন্য রেজোলিউশনটি চার্টের তুলনায় ৩-৪ গুণ পর্যন্ত সেট করা যায়।
স্টপ লস মেকানিজমট্রেলিং স্টপ কার্যকরভাবে ট্রেড প্রতি ক্ষতি এবং ড্রডাউন নিয়ন্ত্রণ করে।
সংরক্ষণের সময়কাল কাস্টমাইজযোগ্যএমএ পরামিতিগুলি সামঞ্জস্য করে হোল্ডিং পিরিয়ড এবং অস্থিরতা নিয়ন্ত্রণ করা যায়।
নমনীয়ভাবে সামঞ্জস্যযোগ্য ঝুঁকি-প্রতিদান. স্টপ লস পয়েন্ট এবং অফসেট সূক্ষ্ম সুর ঝুঁকি-পুরস্কার পছন্দ.
এই কৌশলটির প্রধান ঝুঁকিগুলি নিম্নলিখিত ক্ষেত্রে রয়েছেঃ
অনুপস্থিত ট্রেন্ড বিপরীতমুখী.এক্সআইডি সিগন্যালগুলি মূল্য বিপরীতমুখী হতে পারে যার ফলে ক্ষতি হ্রাস পেতে পারে। এমএ সময়ের সংক্ষিপ্তকরণ এটিকে প্রশমিত করতে পারে।
উচ্চ অস্থিরতার জন্য উপযুক্ত নয়. অস্থির অবস্থার অধীনে ঘন ঘন হুইপসাউ উচ্চ কমিশন খরচ সৃষ্টি করে। স্টপ লস পয়েন্ট প্রসারিত করা বা এমএ সময়কাল বাড়ানো এখানে সাহায্য করতে পারে।
একক সূচকের উপর নির্ভরশীলতা. শুধুমাত্র একটি সূচক সেট উপর ভিত্তি করে সিদ্ধান্ত এটি ব্যর্থতা ঝুঁকি উন্মুক্ত. MACD মত অন্যান্য সূচক যোগ যুক্তি পরিপূরক হতে পারে.
অতিরিক্ত অপ্টিমাইজেশান ঝুঁকি. এমএ পরামিতি এবং স্টপ লস সেটিংস সহজেই overfit করা যেতে পারে। নমুনা আউট কর্মক্ষমতা অবনতি হতে পারে। পরামিতি নির্বাচন সতর্কতা অবলম্বন করা উচিত।
কৌশলটি নিম্নলিখিত ক্ষেত্রগুলি থেকে অনুকূলিত এবং উন্নত করা যেতে পারেঃ
অতিরিক্ত সূচক• অস্থিরতা এবং গতির সূচকগুলি স্থিতিশীলতা এবং স্থিতিশীলতা বাড়িয়ে তুলতে পারে।
শর্তাধীন গতিশীল পরামিতিআরও ভাল অভিযোজনশীলতার জন্য ম্যানেজমেন্ট ম্যানেজমেন্ট পিরিয়ডগুলি প্রবণতা বা পার্শ্ববর্তী বাজার ব্যবস্থার সনাক্তকরণের ভিত্তিতে সামঞ্জস্য করা যেতে পারে।
গতিশীল ঝুঁকি নিয়ন্ত্রণস্টপ লস পয়েন্ট এবং অফসেটগুলি সাম্প্রতিক উপলব্ধিযোগ্য অস্থিরতার স্তরের উপর ক্যালিব্রেট করা যেতে পারে।
উন্নত স্টপ লস লজিক. আরও উন্নত স্টপ লস মেকানিজম যেমন ATR স্টপ সহজ সরল ট্রেইলিং স্টপ প্রতিস্থাপন করতে পারে।
ওপেন ক্লোজ ক্রস মুভিং এভারেজ ট্রেন্ড ফলোিং স্ট্র্যাটেজি হল ওপেন-ক্লোজ সম্পর্ক এবং মুভিং এভারেজগুলির উপর ভিত্তি করে একটি সাধারণ ট্রেন্ড ট্রেডিং কৌশল। এর সহজ নিয়ম, নমনীয়তা এবং নিয়ন্ত্রণযোগ্য ঝুঁকিগুলির মতো সুবিধাগুলি অনুপস্থিত বিপরীতমুখী এবং হুইপসাওগুলির অসুবিধাগুলির সাথেও আসে। উন্নত ক্ষেত্রগুলির মধ্যে আরও সূচক, গতিশীল পরামিতি এবং উন্নত ঝুঁকি ব্যবস্থাপনা অন্তর্ভুক্ত রয়েছে যা আরও ভাল প্রবণতা ধরা এবং পরিবর্তিত বাজারের অবস্থার সাথে অভিযোজনযোগ্যতার জন্য।
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true ) // Revision: 1 // Author: @JayRogers // // Description: // - Strategy based around Open-Close Crossovers. // Setup: // - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing // tends to yield the best results, regardless of which MA option you may choose (if any) // - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of // green and red. // - Option to either use basic open and close series data, or pick your poison with a wide array of MA types. // - Optional trailing stop for damage mitigation if desired (can be toggled on/off) // - Positions get taken automagically following a crossover - which is why it's better to set the resolution // of the script greater than that of your chart, so that the trades get taken sooner rather than later. // - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine // will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you // can handle. // === INPUTS === useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )") stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution) useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )") basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string) basisLen = input(defval=14, title="MA Period", minval=1) offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0) offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01) useStop = input(defval=true, title="Use Trailing Stop?") slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1) slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1) // === /INPUTS === // === BASE FUNCTIONS === // Returns MA input selection variant, default to SMA if blank or typo. variant(type, src, len, offSig, offALMA) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v3 = 2 * v2 - ema(v2, len) // Double Exponential v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential v5 = wma(src, len) // Weighted v6 = vwma(src, len) // Volume Weighted sma_1 = sma(src, len) // Smoothed v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull v9 = linreg(src, len, offSig) // Least Squares v10 = alma(src, len, offALMA, offSig) // Arnaud Legoux type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1 // security wrapper for repeat calls reso(exp, use, res) => security_1 = security(syminfo.tickerid, res, exp) use ? security_1 : exp // === /BASE FUNCTIONS === // === SERIES SETUP === // open/close variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA) reso__1 = reso(variant__1, useRes, stratRes) reso__2 = reso(close, useRes, stratRes) closeSeries = useMA ? reso__1 : reso__2 variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA) reso__3 = reso(variant__2, useRes, stratRes) reso__4 = reso(open, useRes, stratRes) openSeries = useMA ? reso__3 : reso__4 trendState = bool(na) trendState := closeSeries > openSeries ? true : closeSeries < openSeries ? false : trendState[1] // === /SERIES === // === PLOTTING === barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours") // channel outline closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90) openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90) // channel fill closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false) openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false) closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false) openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false) fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40) fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40) // === /PLOTTING === // === STRATEGY === // conditions longCond = crossover(closeSeries, openSeries) shortCond = crossunder(closeSeries, openSeries) // entries and base exit strategy.entry("long", strategy.long, when=longCond) strategy.entry("short", strategy.short, when=shortCond) // if we're using the trailing stop if useStop strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset) strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset) // not sure needed, but just incase.. strategy.exit("XL", from_entry="long", when=shortCond) strategy.exit("XS", from_entry="short", when=longCond) // === /STRATEGY ===