এই কৌশলটি তিনটি সূচকের সুবিধাগুলি একত্রিত করেঃ ইএমএ, ট্রেন্ড ট্র্যাকিং কৌশল (টিটিএস) এবং শ্যাফ ট্রেন্ড সাইকেল (এসটিসি) একটি শক্তিশালী স্বল্পমেয়াদী প্রবণতা ট্র্যাকিং কৌশল গঠন করতে। বিশেষত, কৌশলটি তিনটি সূচকের ক্রয় এবং বিক্রয় সংকেতগুলি ধারাবাহিক কিনা তা বিচার করবে। যদি তারা ধারাবাহিক হয় তবে ট্রেডিং সংকেত উত্পন্ন হবে; অন্যথায় কোনও বাণিজ্য করা হবে না। এটি কিছু মিথ্যা সংকেত ফিল্টার করে এবং কৌশলটিকে আরও নির্ভরযোগ্য করে তোলে।
কৌশলটি তিনটি প্রধান অংশ নিয়ে গঠিতঃ EMA সূচক, TTS প্রবণতা ট্র্যাকিং কৌশল এবং STC সূচক।
প্রথমত, 200-পরিয়ড EMA এক্সপোনেন্সিয়াল চলমান গড় রেখা গণনা করা হয়। যদি মূল্য এই EMA লাইনের নিচে থাকে, তাহলে EMA সূচক একটি বিক্রয় সংকেত দেয়ঃ -1; যদি মূল্যটি লাইনের উপরে থাকে, তাহলে EMA সূচক একটি ক্রয় সংকেত দেয়ঃ 1.
দ্বিতীয়ত, টিটিএস প্রবণতা ট্র্যাকিং কৌশলটির প্রাসঙ্গিক পরামিতিগুলি গণনা করা হয়। উপরের এবং নিম্ন রেলগুলির দামের ব্রেকআউট অনুসারে, বাজারের প্রবণতার দিক নির্ধারণ করা হয়। যদি দামটি উপরের রেলটি ভেঙে যায় তবে একটি কিনুন সংকেত 1 উত্পন্ন হয়; যদি দামটি নিম্ন রেলটি ভেঙে যায় তবে একটি বিক্রয় সংকেত -1 উত্পন্ন হয়।
অবশেষে, শ্যাফ ট্রেন্ড সাইকেল (এসটিসি) সূচকটি গণনা করা হয়, যা মূল্য সংহতকরণের পরিবর্তনের প্রবণতা প্রতিফলিত করে। যদি এসটিসি সূচকটি বৃদ্ধি পায় তবে এটি একটি কিনতে সংকেত উত্পন্ন করে 1; যদি এসটিসি সূচকটি হ্রাস পায় তবে এটি একটি বিক্রয় সংকেত উত্পন্ন করে -1.
তিনটি সূচক থেকে বিচার সংকেত পাওয়ার পরে, কৌশলটি নির্ধারণ করবে যে তারা সামঞ্জস্যপূর্ণ কিনা। কেবলমাত্র যখন তিনটি সূচক বিচার সংকেত সামঞ্জস্যপূর্ণ হয় তখন প্রকৃত ট্রেডিং সংকেত তৈরি করা হবে। এটি কার্যকরভাবে কিছু মিথ্যা সংকেত ফিল্টার করতে পারে এবং কৌশলটিকে আরও নির্ভরযোগ্য করে তুলতে পারে।
একবার ট্রেডিং সিগন্যাল তৈরি করার সিদ্ধান্ত নেওয়ার পর, লং বা শর্ট পজিশন খোলা হবে এবং স্টপ-প্রফিট/স্টপ-লস পয়েন্ট সেট করা হবে।
কৌশলটি বাজারের প্রবণতার দিকনির্দেশ কার্যকরভাবে নির্ধারণ করতে তিনটি ভিন্ন ধরণের সূচককে একত্রিত করে।
মিথ্যা সংকেতগুলি ফিল্টার করার জন্য তিনটি সূচক থেকে বিচার সংকেতগুলির ধারাবাহিকতা ব্যবহার করে অপ্রয়োজনীয় ট্রেডগুলি হ্রাস করতে পারে এবং কৌশলটিকে আরও নির্ভরযোগ্য করে তুলতে পারে।
যুক্তিসঙ্গত স্টপ-লাভ/স্টপ-লস পয়েন্ট নির্ধারণ করলে মুনাফা আটকে যেতে পারে এবং ক্ষতি বাড়তে পারে না।
অপ্টিমাইজড প্যারামিটারগুলি বেশিরভাগ স্টক এবং ফরেক্স পণ্যের জন্য উপযুক্ত।
সহজ এবং সহজেই বোঝা যায় ট্রেডিং লজিক।
সূচক মূল্যায়নগুলির মধ্যে অসঙ্গতি ট্রেডিং সুযোগ হারাতে পারে। মূল্যায়ন নিয়মগুলি আরও অপ্টিমাইজ করা যেতে পারে।
এসটিসি সূচকটি পরামিতির প্রতি সংবেদনশীল। বিভিন্ন পণ্যের পরামিতি মিটিং প্রয়োজন।
ডাউনট্রেন্ডে, স্টপ লস প্রবেশ করতে পারে, যার ফলে বিশাল ক্ষতি হতে পারে। অভিযোজিত স্টপ লস বিবেচনা করা যেতে পারে।
পার্শ্ববর্তী একত্রীকরণ কার্যকরভাবে চিহ্নিত করা যায় না, যা ফাঁদ অবস্থানের দিকে পরিচালিত করে।
আরও নির্দেশক সংমিশ্রণ পরীক্ষা করুন যাতে আরও শক্তিশালী বিচার নিয়ম খুঁজে পাওয়া যায়, উদাহরণস্বরূপ আরএসআই নির্দেশক যুক্ত করা।
বিভিন্ন পণ্য জুড়ে আরও ভাল অভিযোজন জন্য STC পরামিতি অপ্টিমাইজ করুন। অভিযোজনশীল পরামিতি অপ্টিমাইজেশন মডিউল যোগ করুন।
গতিশীলভাবে স্টপ লস পয়েন্ট অপ্টিমাইজ করার জন্য অভিযোজিত স্টপ লস মডিউল বৃদ্ধি করুন।
পজিশন ক্লোজিং মডিউল উন্নত করুন পাশের পরিসীমা চিহ্নিত করতে এবং ফাঁদ এড়াতে।
উচ্চ ফ্রিকোয়েন্সি ট্রেডিংয়ের জন্য অ্যালগরিদম অপ্টিমাইজ করুন, বিলম্ব হ্রাস করুন এবং অর্ডার পূরণের হার উন্নত করুন।
এই কৌশলটি বাজারের দিকনির্দেশ নির্ধারণের জন্য ইএমএ, টিটিএস এবং এসটিসি সূচকগুলিকে একত্রিত করে, তিনটি ট্রিগারিং ট্রেড থেকে ধারাবাহিক রায় দিয়ে, কার্যকরভাবে মিথ্যা সংকেতগুলি ফিল্টার করে। আরও প্রবণতা ট্র্যাকিং ক্ষমতা আরও শক্তিশালী করার জন্য আরও সূচক সংমিশ্রণ পরীক্ষা করা, অভিযোজনশীল অ্যালগরিদম যুক্ত করা, উচ্চ ফ্রিকোয়েন্সি ট্রেডিং মডিউলগুলি অনুকূলিতকরণ ইত্যাদির মতো অপ্টিমাইজেশনের জন্য এখনও প্রচুর জায়গা রয়েছে। কেবল চলমান গড় অনুসরণ করে traditionalতিহ্যবাহী কৌশলগুলির তুলনায়, এই কৌশলটি বাজারের আরও বুদ্ধিমানভাবে বিচার করতে পারে, ফাঁদ এড়ানোর সময় প্রবণতা ক্যাপচার করতে পারে।
/*backtest start: 2022-12-05 00:00:00 end: 2023-04-14 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/ // © ajahanbin1374 //@version=5 strategy(title = "EMA + TTS + STC", shorttitle = "EMA + TTS + STC", overlay = true, calc_on_order_fills=false, calc_on_every_tick = false, initial_capital = 100, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01) //////////////////////////////////////////////////////////// // Strategy entry //////////////////////////////////////////////////////////// profit = input.float(defval = 0.1, minval = 0.0, title="Profit %", step=0.01, group = "Strategy") * 0.01 //////////////////////////////////////////////////////////// // Emponential Moving Average //////////////////////////////////////////////////////////// ema = ta.ema(close, 200) posEma = close < ema ? -1 : 1 //////////////////////////////////////////////////////////// // Trend Trader Strategy //////////////////////////////////////////////////////////// Length = input.int(21, minval=1, group="Trend Trader Strategy") Multiplier = input.float(3, minval=0.000001, group="Trend Trader Strategy") avgTR = ta.wma(ta.atr(1), Length) highestC = ta.highest(Length) lowestC = ta.lowest(Length) hiLimit = highestC[1] - avgTR[1] * Multiplier loLimit = lowestC[1] + avgTR[1] * Multiplier ret = 0.0 posTts = 0.0 ret:= close > hiLimit and close > loLimit ? hiLimit : close < loLimit and close < hiLimit ? loLimit : nz(ret[1], close) posTts:= close > ret ? 1 :close < ret ? -1 : nz(posTts[1], 0) //////////////////////////////////////////////////////////// // Schaff Trend Cycle (STC) //////////////////////////////////////////////////////////// EEEEEE = input.int(12, 'Length', group ="Schaff Trend Cycle") BBBB = input.int(26, 'FastLength', group ="Schaff Trend Cycle") BBBBB = input.int(50, 'SlowLength', group ="Schaff Trend Cycle") AAAA(BBB, BBBB, BBBBB) => fastMA = ta.ema(BBB, BBBB) slowMA = ta.ema(BBB, BBBBB) AAAA = fastMA - slowMA AAAA AAAAA(EEEEEE, BBBB, BBBBB) => AAA = input.float(0.5, group ="Schaff Trend Cycle") var CCCCC = 0.0 var DDD = 0.0 var DDDDDD = 0.0 var EEEEE = 0.0 BBBBBB = AAAA(close, BBBB, BBBBB) CCC = ta.lowest(BBBBBB, EEEEEE) CCCC = ta.highest(BBBBBB, EEEEEE) - CCC CCCCC := CCCC > 0 ? (BBBBBB - CCC) / CCCC * 100 : nz(CCCCC[1]) DDD := na(DDD[1]) ? CCCCC : DDD[1] + AAA * (CCCCC - DDD[1]) DDDD = ta.lowest(DDD, EEEEEE) DDDDD = ta.highest(DDD, EEEEEE) - DDDD DDDDDD := DDDDD > 0 ? (DDD - DDDD) / DDDDD * 100 : nz(DDDDDD[1]) EEEEE := na(EEEEE[1]) ? DDDDDD : EEEEE[1] + AAA * (DDDDDD - EEEEE[1]) EEEEE mAAAAA = AAAAA(EEEEEE, BBBB, BBBBB) mColor = mAAAAA > mAAAAA[1] ? color.new(color.green, 20) : color.new(color.red, 20) posStc = mAAAAA > mAAAAA[1] ? 1 : -1 //////////////////////////////////////////////////////////// // Strategy entry //////////////////////////////////////////////////////////// pos = posEma == 1 and posTts == 1 and posStc == 1 ? 1 : posEma == -1 and posTts == -1 and posStc == -1 ? -1 : 0 currentPostition = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 noOpenPosition = strategy.position_size == 0 signal = pos != pos[1] and pos == 1 and noOpenPosition ? 1 : pos != pos[1] and pos == -1 and noOpenPosition ? -1 : 0 stopPriceForLong = math.min(close * (1 - profit), low[1] * 0.9998, low[2] * 0.9998) limitPriceForLong = close + (close - stopPriceForLong) stopPriceForShort = math.max(close * (1 + profit), high[1] * 1.0002, high[2] * 1.0002) limitPriceForShort = close - (stopPriceForShort - close) if signal == 1 strategy.entry(id="L", direction=strategy.long) strategy.exit(id='EL', from_entry='L', limit=limitPriceForLong, stop=stopPriceForLong) if signal == -1 strategy.entry(id="S", direction=strategy.short) strategy.exit(id='ES', from_entry='S', limit=limitPriceForShort, stop=stopPriceForShort) //////////////////////////////////////////////////////////// // Plots - Debuger //////////////////////////////////////////////////////////// plotchar(signal, title='singal', char = '') plotchar(posEma, title='posEma', char = '') plotchar(posTts, title='posTts', char = '') plotchar(pos, title='pos', char = '') plotchar(currentPostition, title = 'currentPostition', char='') plotchar(stopPriceForLong, title = "stopPriceForLong", char ='') plotchar(limitPriceForLong, title = 'limitPriceForLong', char='') plotchar(stopPriceForShort, title = "stopPriceForShort", char ='') plotchar(limitPriceForShort, title = 'limitPriceForShort', char='') //////////////////////////////////////////////////////////// // Plots //////////////////////////////////////////////////////////// plot(ret, color=color.new(color.black, 0), title='Trend Trader Strategy') plotchar(mAAAAA, color=mColor, title='STC', location = location.bottom, char='-', size=size.normal) plot(series = ema, title = "ema")