এই কৌশলটি বিভিন্ন সময়ের মধ্যে সর্বোচ্চ এবং সর্বনিম্ন মূল্যের তুলনা করে মূল্যের প্রবণতা নির্ধারণের জন্য একটি মাল্টি-টাইমফ্রেম ডাইনামিক ব্যাকটেস্টিং প্রক্রিয়া ব্যবহার করে, যার ফলে কম ঝুঁকিপূর্ণ সালিশ অর্জন করা হয়।
কৌশলটি কাস্টম ফাংশন f_get_htfHighLow কল করে বিভিন্ন সময়সীমার মধ্যে সর্বোচ্চ মূল্য (nhigh) এবং সর্বনিম্ন মূল্য (nlow) পুনরুদ্ধার করে। বিশেষত, সময়কালের রেজোলিউশন, সময়কালের গুণক HTFMultiplier, ব্যাকটেস্টিং পরামিতিগুলি lookhead এবং ফাঁক এবং অফসেটের মতো ব্যবহারকারীর সংজ্ঞায়িত ইনপুটগুলির উপর ভিত্তি করে, এটি বিভিন্ন সময়সীমার মধ্যে সর্বোচ্চ এবং সর্বনিম্ন দাম পেতে সুরক্ষা ফাংশনটি কল করে।
উদাহরণস্বরূপ, 0 এর একটি অফসেট বর্তমান বারের সর্বোচ্চ এবং সর্বনিম্ন দামগুলি পুনরুদ্ধার করে, যখন 1 এর একটি অফসেট পূর্ববর্তী বার থেকে সেই দামগুলি পুনরুদ্ধার করে। বারগুলির মধ্যে দামের পরিবর্তনগুলি তুলনা করে, প্রবণতার দিক নির্ধারিত হয়।
যদি উভয় সর্বোচ্চ এবং সর্বনিম্ন মূল্য বৃদ্ধি পায়, একটি উত্থান প্রবণতা চিহ্নিত করা হয়। যদি উভয় মূল্য হ্রাস পায়, একটি bearish প্রবণতা দেখা যায়। আরবিট্রেজ ট্রেড বাস্তবায়ন প্রবণতা দিকের উপর ভিত্তি করে দীর্ঘ বা সংক্ষিপ্ত অবস্থান গ্রহণ করা হয়।
সমাধান:
কৌশল যুক্তি স্পষ্ট, প্রবণতা নির্ধারণ এবং মানুষের পক্ষপাত কমাতে মাল্টি টাইমফ্রেম গতিশীল ব্যাকটেস্টিং ব্যবহার করে। প্যারামিটার অপ্টিমাইজেশান এবং বৈশিষ্ট্য সম্প্রসারণের মাধ্যমে পরিমার্জন সহ, এটি আরও গবেষণা এবং ট্র্যাকিংয়ের যোগ্য উন্নত স্থিতিশীলতা এবং লাভজনকতার জন্য উল্লেখযোগ্য সম্ভাবনা প্রদর্শন করে।
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("HTF High/Low Repaint Strategy", overlay=true, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01) i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time) i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time) inDateRange = true resolution = input("3M", type=input.resolution) HTFMultiplier = input(22, minval=1, step=1) offset = input(0, minval=0, step=1) lookahead = input(true) gaps = false f_secureSecurity_on_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_on) f_secureSecurity_on_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_off) f_secureSecurity_off_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_on) f_secureSecurity_off_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_off) f_multiple_resolution(HTFMultiplier) => target_Res_In_Min = timeframe.multiplier * HTFMultiplier * ( timeframe.isseconds ? 1. / 60. : timeframe.isminutes ? 1. : timeframe.isdaily ? 1440. : timeframe.isweekly ? 7. * 24. * 60. : timeframe.ismonthly ? 30.417 * 24. * 60. : na) target_Res_In_Min <= 0.0417 ? "1S" : target_Res_In_Min <= 0.167 ? "5S" : target_Res_In_Min <= 0.376 ? "15S" : target_Res_In_Min <= 0.751 ? "30S" : target_Res_In_Min <= 1440 ? tostring(round(target_Res_In_Min)) : tostring(round(min(target_Res_In_Min / 1440, 365))) + "D" f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)=> derivedResolution = resolution == ""?f_multiple_resolution(HTFMultiplier):resolution nhigh_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, high, offset) nlow_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, low, offset) nhigh_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, high, offset) nlow_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, low, offset) nhigh_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, high, offset) nlow_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, low, offset) nhigh_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, high, offset) nlow_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, low, offset) nhigh = lookahead and gaps ? nhigh_on_on : lookahead and not gaps ? nhigh_on_off : not lookahead and gaps ? nhigh_off_on : not lookahead and not gaps ? nhigh_off_off : na nlow = lookahead and gaps ? nlow_on_on : lookahead and not gaps ? nlow_on_off : not lookahead and gaps ? nlow_off_on : not lookahead and not gaps ? nlow_off_off : na [nhigh, nlow] [nhigh, nlow] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset) [nhighlast, nlowlast] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset+1) plot(nhigh , title="HTF High",style=plot.style_circles, color=color.green, linewidth=1) plot(nlow , title="HTF Low",style=plot.style_circles, color=color.red, linewidth=1) buyCondition = nhigh > nhighlast and nlow > nlowlast sellCondition = nhigh < nhighlast and nlow < nlowlast strategy.entry("Buy", strategy.long, when= buyCondition and inDateRange, oca_name="oca_buy") strategy.entry("Sell", strategy.short, when= sellCondition and inDateRange, oca_name="oca_sell")