এটি একটি ট্রেডিং কৌশল যা একাধিক টাইমফ্রেম জুড়ে ডনচেইন চ্যানেলগুলি ব্যবহার করে প্রবেশ এবং প্রস্থান পয়েন্টগুলি নির্ধারণ করে। মূল ধারণাটি প্রবেশ সংকেতগুলির জন্য একটি দীর্ঘ সময়সীমার উপর প্রবণতা দিক বিচার করা এবং প্রবণতা বিপরীতের সন্ধান করা।
কৌশলটি মূলত ডনচেইন চ্যানেলগুলির ধারণাটি ব্যবহার করে, যা চ্যানেলের শীর্ষ, নীচে এবং মধ্যরেখাগুলি নিয়ে গঠিত। চ্যানেলের প্রস্থ বিভিন্ন সময়সীমার মধ্যে পরিবর্তিত হয়। বিশেষত, আমরা দুটি সময়সীমার উপর ডনচেইন চ্যানেলগুলি তৈরি করিঃ
একটি দীর্ঘমেয়াদী ডনচেইন চ্যানেল তৈরি করতে এবং এর শীর্ষ, নীচে এবং মাঝারি লাইন পেতে 52 টি সময়কাল ব্যবহার করুন।
একটি স্বল্পমেয়াদী ডনচেইন চ্যানেল তৈরি করতে এবং এর শীর্ষ, নীচের এবং মাঝারি লাইন পেতে 12 টি সময়কাল ব্যবহার করুন।
এন্ট্রি লজিকঃ যখন দাম দীর্ঘমেয়াদী চ্যানেলের শীর্ষের উপরে ভেঙে যায়, তখন আমরা এটিকে একটি দীর্ঘ এন্ট্রি সংকেত হিসাবে নির্ধারণ করি। মিথ্যা ব্রেকআউট এড়াতে, আমাদের সাম্প্রতিক 3 টির মধ্যে কমপক্ষে 1 মোমবাতি তার চ্যানেলের শীর্ষের উপরে বন্ধ করার প্রয়োজন।
প্রস্থান লজিকঃ যখন মূল্য স্বল্পমেয়াদী চ্যানেলের নীচের অংশের নীচে ভেঙে যায়, তখন আমরা এটিকে দীর্ঘ অবস্থান বন্ধ করার জন্য একটি প্রস্থান সংকেত হিসাবে নির্ধারণ করি। একইভাবে, ভাঙ্গনের বৈধতা নিশ্চিত করার জন্য সাম্প্রতিক 3 টির মধ্যে কমপক্ষে 1টি মোমবাতি তার চ্যানেলের নীচের অংশের নীচে বন্ধ করা প্রয়োজন।
কৌশলটি ট্রেন্ড অনুসরণ এবং গড় বিপরীত ট্রেডিং উভয়ই সমন্বয় করে। দীর্ঘ সময়সীমা প্রবণতা বিচার করে যখন সংক্ষিপ্ত সময়সীমা প্রবণতার মধ্যে স্থানীয় বিপরীতগুলি ক্যাপচার করে।
মাল্টি-টাইমফ্রেম বিশ্লেষণ ব্যবহার করে মিথ্যা ব্রেকআউটের সমস্যাগুলি সমাধান করতে সহায়তা করে এবং এন্ট্রি / আউটপুটগুলিকে আরও বৈধ করে তোলে।
বিভিন্ন পণ্য এবং বাজারের ব্যবস্থার জন্য পরামিতিগুলি অপ্টিমাইজ করা যেতে পারে।
কৌশলটি পরামিতিগুলির প্রতি সংবেদনশীল। বিভিন্ন পরামিতিগুলি ব্যাপকভাবে ভিন্ন ফলাফলের দিকে পরিচালিত করতে পারে। সর্বোত্তম পরামিতি সেটটি খুঁজে পেতে পর্যাপ্ত পরীক্ষা এবং অপ্টিমাইজেশান প্রয়োজন।
এটি বিভিন্ন বাজারে অত্যধিক ট্রেডিংয়ের কারণ হতে পারে। একক ট্রেডিংয়ের ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস ব্যবহার করা উচিত।
এটি সামগ্রিক বাজার ব্যবস্থা বিবেচনা করে না। প্রধান প্রবণতা বিপরীত সময়ে ব্যর্থ হতে পারে। প্রধান প্রবণতা পরিমাপ করতে অন্যান্য সূচক ব্যবহার করা উচিত।
চ্যানেলের সময়কাল, চ্যানেলের ধরন ইত্যাদি সহ সর্বোত্তম প্যারামিটারগুলি খুঁজে পেতে প্যারামিটার অপ্টিমাইজেশন পরিচালনা করুন।
হ্রাস নিয়ন্ত্রণের জন্য যুক্তিসঙ্গত ট্রেলিং স্টপগুলির সাথে স্টপ লস লজিক অন্তর্ভুক্ত করুন।
প্রধান প্রবণতা নির্ধারণের জন্য অন্যান্য সূচকগুলিকে একত্রিত করুন, যেমন EMA, কেল্টনার চ্যানেল, MACD ইত্যাদি, মূল বাঁক পয়েন্টগুলিতে ব্যর্থতা এড়ানো।
সংক্ষেপে, এটি একটি সাধারণ মাল্টি-টাইমফ্রেম ডনচেইন চ্যানেল ব্রেকআউট কৌশল। এটি প্রবণতার মধ্যে স্থানীয় বিপরীতগুলি ক্যাপচার করতে প্রবণতা অনুসরণ এবং গড় বিপরীত উভয়ই সুন্দরভাবে সংহত করে। অনুকূলিত পরামিতিগুলির সাথে, এটি ট্রেন্ডিং বাজারে খুব ভাল পারফর্ম করতে পারে। তবে, কৌশলটি নিজেই ভঙ্গুর, পরামিতি এবং সামগ্রিক বাজার ব্যবস্থার প্রতি সংবেদনশীল। আরও শক্তিশালী ফলাফল অর্জনের জন্য অন্যান্য কৌশল বা সূচকগুলির সাথে একত্রিত করার পরামর্শ দেওয়া হয়।
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-26 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/ // © venkyrocker7777 //@version=5 strategy('Donchain channel based investment strategy', shorttitle='Donchain channel strategy', overlay=true) Length = input.int(21, minval=1) xPrice = close xvnoise = math.abs(xPrice - xPrice[1]) nAMA = 0.0 nfastend = 0.666 nslowend = 0.0645 nsignal = math.abs(xPrice - xPrice[Length]) nnoise = math.sum(xvnoise, Length) nefratio = nnoise != 0 ? nsignal / nnoise : 0 nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2) nAMA := nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1])) plot(nAMA, color=color.new(color.blue, 0), title='KAMA') // Function to get Lower Channel, Upper Channel, Middle Channel for a period length getLCUCMC(PeriodLength) => lowestValueInThePeriod = ta.lowest(PeriodLength) // LC highestValueInThePeriod = ta.highest(PeriodLength) // UC middleChannelInTheperiod = math.avg(highestValueInThePeriod, lowestValueInThePeriod) // MC // Returns Lower Channel, Upper Channel, Middle Channel for a period length [lowestValueInThePeriod, highestValueInThePeriod, middleChannelInTheperiod] // Longer time frame for entry longerPeriod = 52 // Shorter time frame for exit shorterPeriod = 12 if timeframe.period == 'D' // Longer time frame for entry longerPeriod := 52 * 5 // Shorter time frame for exit shorterPeriod := 12 * 5 shorterPeriod if timeframe.period == 'M' // Longer time frame for entry longerPeriod := 12 // Shorter time frame for exit shorterPeriod := 3 shorterPeriod // Get Lower Channel, Upper Channel, Middle Channel for longerPeriod, shorterPeriod [lowestValueInTheLongerPeriodLength, highestValueInTheLongerPeriodLength, middleChannelInLongerperiod] = getLCUCMC(longerPeriod) [lowestValueInTheShorterPeriodLength, highestValueInTheShorterPeriodLength, middleChannelInShorterperiod] = getLCUCMC(shorterPeriod) // Plot Upper Channel of longerPeriod in dark green plot(highestValueInTheLongerPeriodLength, 'highestValueInTheLongerPeriodLength', color=color.new(color.green, 0)) // Plot Lower Channel of shorterPeriod in dark red plot(lowestValueInTheShorterPeriodLength, 'lowestValueInTheShorterPeriodLength', color=color.new(color.red, 0)) // Entry Plan // Will start to see if we can enter when high crosses up longer period high (high >= highestValueInTheLongerPeriodLength) // Check if any of the three past candles and enter when any of the 3 past candles satisfy // 1) high of that candle >= highestValueInTheLongerPeriodLength of that candle (high[i] >= highestValueInTheLongerPeriodLength[i]) // 2) close of entry point consideration candle is above close of that candle (close > close[i]) isThisPointAnEntry() => // Check last 3 bars isThisPointAnEntry = false offset = 0 for i = 1 to 3 by 1 isCurrentCandleALongerPeriodHigh = high >= highestValueInTheLongerPeriodLength isCurrentCandleCloseGreaterThanPreiousIthOne = close > close[i] isPreviousIthCandleAlsoALongerPeriodHigh = high[i] >= highestValueInTheLongerPeriodLength[i] isThisPointAnEntry := isCurrentCandleALongerPeriodHigh and isCurrentCandleCloseGreaterThanPreiousIthOne and isPreviousIthCandleAlsoALongerPeriodHigh if isThisPointAnEntry offset := -i break [isThisPointAnEntry, offset] // Exit Plan - same as entry plan, with things reversed and also on a shorter time frame // Will start to see if we should exit when low crosses down longer period low (low <= lowestValueInTheShorterPeriodLength) // Check if any of the three past candles and exit when any of the 3 past candles satisfy // 1) low of that candle <= highestValueInTheLongerPeriodLength of that candle (low[i] <= lowestValueInTheShorterPeriodLength[i]) // 2) close of exit point consideration candle is below close of that candle (close < close[i]) isThisPointAnExit() => // Check last 3 bars isThisPointAnExit = false for i = 1 to 3 by 1 isCurrentCandleAShorterPeriodLow = low <= lowestValueInTheShorterPeriodLength isCurrentCandleCloseLesserThanPreiousIthOne = close < close[i] isPreviousIthCandleAlsoAShorterPeriodLow = low[i] <= lowestValueInTheShorterPeriodLength[i] isThisPointAnExit := isCurrentCandleAShorterPeriodLow and isCurrentCandleCloseLesserThanPreiousIthOne and isPreviousIthCandleAlsoAShorterPeriodLow break isThisPointAnExit [isEntry, offset] = isThisPointAnEntry() if isEntry strategy.entry('Buy', strategy.long) strategy.close_all(when=isThisPointAnExit() == true) if year(timenow) == year(time) and month(timenow) == month(time) and dayofmonth(timenow) - 2 == dayofmonth(time) strategy.close_all()