এই কৌশলটি ট্রেডিং সিগন্যাল তৈরি এবং ফিল্টার করার জন্য স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী হাল্ল চলমান গড় ব্যবহার করে। স্বল্পমেয়াদী হাল্ল চলমান গড়টি সংকেত তৈরি করতে ব্যবহৃত হয়, যখন দীর্ঘমেয়াদী হাল্ল চলমান গড়টি সংকেত ফিল্টার করার জন্য ব্যবহৃত হয়। কেবলমাত্র যখন স্বল্পমেয়াদী হাল্ল চলমান গড়টি দিক পরিবর্তন করে এবং দীর্ঘমেয়াদী হাল্ল চলমান গড়টি একই সামগ্রিক দিকের দিকে চলে তখনই ট্রেড করা হয়।
ট্রেডিংয়ের সময় স্টপ লস এবং লাভের মাত্রা গতিশীলভাবে সেট করার জন্য কৌশলটি ATR সূচকটিও ব্যবহার করে।
স্বল্পমেয়াদী হাল চলমান গড় স্বল্পমেয়াদী মূল্য প্রবণতা এবং পাল্টা পয়েন্টগুলি ক্যাপচার করে। যখন এটি দিক পরিবর্তন করে, এটি স্বল্পমেয়াদী মূল্য প্রবণতার পরিবর্তনের সংকেত দেয়।
দীর্ঘমেয়াদী হুল চলমান গড় সামগ্রিক মূল্য প্রবণতা নির্ধারণ করে। উদাহরণস্বরূপ, যখন এটি বৃদ্ধি পাচ্ছে, দামগুলি সামগ্রিক উত্থান প্রবণতায় থাকে।
ট্রেডগুলি কেবল তখনই নেওয়া হয় যখন স্বল্পমেয়াদী হুল চলমান গড়টি দিক পরিবর্তন করে এবং এর নতুন দিকটি দীর্ঘমেয়াদী হুল চলমান গড়ের দিকের সাথে সামঞ্জস্য করে। এটি সামগ্রিক প্রবণতার বিপরীতে যাওয়া সংকেতগুলি ফিল্টার করে এবং কেবল স্বল্পমেয়াদী বাজারের গোলমাল হতে পারে।
পজিশন প্রবেশ করার পরে, স্টপ লস এবং লাভের স্তরগুলি এটিআর সূচকের মানের উপর ভিত্তি করে সেট করা হয়। এটিআর বাজারের অস্থিরতা এবং ঝুঁকির স্তরগুলি প্রতিফলিত করে। স্টপ লসটি মূল্যের সর্বনিম্নের নীচে স্থাপন করা হয় যখন লাভের লক্ষ্যমাত্রা মূল্যের সর্বোচ্চ, বর্তমান এটিআর পাঠের সাথে আবদ্ধ পরিসীমা সহ।
স্বল্পমেয়াদী সংকেত এবং দীর্ঘমেয়াদী ফিল্টারগুলির সংমিশ্রণ কার্যকরভাবে মধ্যমেয়াদী প্রবণতা এবং পাল্টা পয়েন্টগুলি সনাক্ত করে, বাজারের গোলমাল থেকে মিথ্যা সংকেতগুলি এড়ানো।
এটিআর-এর উপর ভিত্তি করে গতিশীল স্টপ লস এবং লাভ গ্রহণ বর্তমান অস্থিরতার ভিত্তিতে যুক্তিসঙ্গত পরিসীমা নির্ধারণ করে, লাভ গ্রহণ এবং ক্ষতি প্রতিরোধের ভারসাম্য বজায় রাখে।
স্ট্যান্ডার্ড চলমান গড়ের তুলনায় হাল চলমান গড়ের নমনীয়তা এবং নির্ভুলতার সুবিধা রয়েছে, আরও ভাল প্রবণতা ট্র্যাকিং সহ।
কৌশলটি সিগন্যাল তৈরির জন্য হাল চলন্ত গড়ের মধ্যে ক্রসগুলির উপর নির্ভর করে। মিথ্যা ক্রসগুলি খারাপ ব্যবসায়ের ফলে হতে পারে, যা সামগ্রিক বাজারের কাঠামোর বিশ্লেষণের প্রয়োজন।
একটি ট্রেডিং রেঞ্জের মধ্যে দামের ওসিলেশন সহ অস্থির বাজার, সংকেত ত্রুটি এবং অপ্রয়োজনীয় ট্রেডগুলি জমা হতে পারে। এই ধরনের বাজারের সময় বৃহত্তর শর্তগুলির সাথে সংকেতগুলি ফিল্টার করে এটি এড়ানো যায়।
স্টপ লস এবং লাভের উপর নির্ভরশীলতা ATR এর অর্থ ভুল অস্থিরতা পাঠের ফলে খারাপ স্থানান্তর হবে। অন্যান্য অস্থিরতা ব্যবস্থা এটি সংশোধন করতে ATR বাড়িয়ে তুলতে পারে।
আরএসআই-র মতো অতিরিক্ত স্বল্পমেয়াদী সূচকগুলি সংযোজনের মাধ্যমে সংকেতের নির্ভুলতা উন্নত করতে পারে।
হুল চলমান গড়ের মধ্যে ফিল্টার লজিককে আরও কঠোর প্রবেশের প্রয়োজনীয়তার জন্য উন্নত করা যেতে পারে, মিথ্যা সংকেতগুলি এড়ানো।
প্যারামিটার টিউনিং গবেষণায় চলমান গড় দৈর্ঘ্যের পরিবর্তন, এটিআর সময়কাল ইত্যাদি থেকে স্থিতিশীলতা এবং লাভজনকতার উন্নতি প্রকাশ করা যেতে পারে।
এই কৌশলটি স্বল্পমেয়াদী সংকেত উত্পাদন, দীর্ঘমেয়াদী সংকেত ফিল্টারিং এবং একটি শক্তিশালী মাঝারি মেয়াদী প্রবণতা অনুসরণকারী কাঠামোর মধ্যে এটিআর-ভিত্তিক স্টপ লস / লাভ গ্রহণকে একত্রিত করে। এটি স্বল্পমেয়াদী গোলমাল ফিল্টার করার সময় মাঝারি মেয়াদী inflection পয়েন্টগুলি দক্ষতার সাথে সনাক্ত করে। প্যারামিটারিক অপ্টিমাইজেশন এবং যুক্ত ফিল্টারগুলির সাথে এটি আরও ভাল পারফরম্যান্স অর্জন করতে পারে।
/*backtest start: 2023-12-04 00:00:00 end: 2024-01-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Hull Filtered Strategy", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity, default_qty_value = 10, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0) // Parameters for Hull Moving Averages src = input(close, title="Source") signal_period = input(50, title="Period of signal HMA") filter_period = input(200, title="Period of filter HMA") strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"]) // Set allowed trading directions strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all strategy.risk.allow_entry_in(strat_dir_value) // stop loss and take profit sl_factor = input(2,title="Stop Loss Factor") tp_factor = input(3,title="Take Profit Factor") atr_period = input(14, title="ATR Period (SL/TP)") // Testing Start dates testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // ----------------------------------------------------------------------------- // Global variables // ----------------------------------------------------------------------------- var float tp = na var float sl = na var float position = na // ----------------------------------------------------------------------------- // Functions // ----------------------------------------------------------------------------- testWindow() => time >= testPeriodStart and time <= testPeriodStop ? true : false // ----------------------------------------------------------------------------- // The engine // ----------------------------------------------------------------------------- hma_signal = hma(src, signal_period) hma_filter = hma(src, filter_period) // Used to determine exits and stop losses atr_e = atr(atr_period) // if hma_filter increases hma_trend is set to 1, if it decreases hma_trend is set to -1. If no trend is available, hma_trend is set to ß0 trend = hma_filter > hma_filter[1] ? 1 : hma_filter < hma_filter[1] ? -1 : 0 signal = hma_signal > hma_signal[1] ? 1 : hma_signal < hma_signal[1] ? -1 : 0 // ----------------------------------------------------------------------------- // signals // ----------------------------------------------------------------------------- if signal[0] == 1 and signal[1] != 1 and trend == 1 and testWindow() sl := close - sl_factor*atr_e tp := close + tp_factor*atr_e strategy.entry("HMA_LNG", strategy.long) strategy.exit("LE", "HMA_LNG", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e) if signal[0] == -1 and signal[1] != -1 and trend == -1 and testWindow() sl := close + sl_factor*atr_e tp := close - tp_factor*atr_e strategy.entry("HMA_SHRT", strategy.short) strategy.exit("SE", "HMA_SHRT", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e) if strategy.position_size != 0 sl := sl[1] tp := tp[1] // ----------------------------------------------------------------------------- // PLOT // ----------------------------------------------------------------------------- hma_s = plot(hma_signal, title="SIGNAL", color = signal == 1 ? color.green : color.red) hma_l = plot(hma_filter, title="TREND", color = trend == 1 ? color.green : color.red) plot(tp, title="TAKE PROFIT", color= strategy.position_size != 0 ? color.blue: na, linewidth=1) plot(sl, title="STOP LOSS", color= strategy.position_size != 0 ? color.red: na, linewidth = 1)