এই কৌশলটি একটি চলমান গড়ের সাথে দামের ক্রসিংয়ের উপর ভিত্তি করে ক্রয় এবং বিক্রয় সংকেত উত্পন্ন করে। এটি বিভিন্ন ধরণের চলমান গড় এবং মিথ্যা ব্রেকআউটগুলি ফিল্টার করার জন্য একটি সহনশীলতা পরামিতি সরবরাহ করে। কৌশলটি প্রবণতা অনুসরণ করার জন্য মূল্যের প্রবণতার টার্নিং পয়েন্টগুলি ক্যাপচার করার লক্ষ্য।
কৌশলটি বন্ধের দামের উপর ভিত্তি করে একটি দৈর্ঘ্য এন চলমান গড় গণনা করে। সাধারণ চলমান গড় প্রকারগুলির মধ্যে রয়েছে সহজ চলমান গড় (এসএমএ), এক্সপোনেনশিয়াল চলমান গড় (ইএমএ), ওয়েটেড চলমান গড় (ডাব্লুএমএ) ইত্যাদি। তারপরে একটি সহনশীলতা স্তর সেট করা হয়, উদাহরণস্বরূপ 5%, এবং উপরের ব্যান্ড (1.05 বার চলমান গড়) এবং নিম্ন ব্যান্ড (0.95 বার চলমান গড়) গণনা করা হয়। যখন বন্ধের দাম উপরের ব্যান্ডের উপরে অতিক্রম করে, তখন একটি ক্রয় সংকেত উত্পন্ন হয়। যখন বন্ধের দাম নিম্ন ব্যান্ডের নীচে অতিক্রম করে, তখন একটি বিক্রয় সংকেত উত্পন্ন হয়। এটি কিছু মিথ্যা ব্রেকআউট ফিল্টার করতে সহায়তা করে। এছাড়াও, একটি বুলিয়ান প্যারামিটার
সামগ্রিকভাবে এটি একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল। এটি কিছু নমনীয়তার সাথে প্রবণতা নির্ধারণের জন্য মূল্য এবং চলমান গড়ের মধ্যে সম্পর্ক ব্যবহার করে। প্যারামিটার অপ্টিমাইজেশান এবং সঠিক সংকেত ফিল্টারিংয়ের মাধ্যমে এটি একটি শালীন পরিমাণ কৌশল হয়ে উঠতে পারে। তবে অতিরিক্ত ক্ষতি এড়াতে শর্ট করার সময় ডাউনসাইড ঝুঁকি নিয়ন্ত্রণ করা গুরুত্বপূর্ণ।
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-25 00:00:00 period: 1h basePeriod: 15m 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/ // © RafaelPiccolo //@version=4 strategy("Price X MA Cross", overlay=true) typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len = input(100, minval=1, title="Length") src = input(close, "Source", type=input.source) tol = input(0, minval=0, title="Tolerance (%)", type=input.float) shortOnly = input(false, "Short only") tema(src, len)=> ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) return = 3 * (ema1 - ema2) + ema3 getMAPoint(type, len, src)=> return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len) ma = getMAPoint(typ, len, src) upperTol = ma * (1 + tol/100) lowerTol = ma * (1 - tol/100) longCondition = crossover(close, upperTol) shortCondition = crossunder(close, lowerTol) if (shortCondition) strategy.entry("Short", strategy.short) if (longCondition) if (shortOnly) strategy.close("Short") else strategy.entry("Long", strategy.long) plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2) t1 = plot(tol > 0 ? upperTol : na, transp = 70) t2 = plot(tol > 0 ? lowerTol : na, transp = 70) fill(t1, t2, color = tol > 0 ? color.blue : na)