এই কৌশলটি ট্রেন্ড সিগন্যাল সনাক্ত করতে একাধিক চ্যানেল এবং চলমান গড় ব্যবহার করে ক্রিপ্টোকারেন্সি বাজারে শক্তিশালী প্রবণতা ক্যাপচার করার লক্ষ্য রাখে এবং প্রবণতা বাজারে লাভের লক করার জন্য অনুকূলভাবে ক্ষতি বন্ধ করার সময় মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে ভলিউম সূচকগুলিকে একত্রিত করে।
কৌশলটি প্রবণতা সনাক্ত করতে দ্রুত চ্যানেল, ধীর চ্যানেল এবং দ্রুত চলমান গড়ের সংমিশ্রণ ব্যবহার করে। দ্রুত চ্যানেলের পরামিতিগুলি স্বল্পমেয়াদী মূল্য উদ্বায়ী ক্যাপচার করার জন্য আরও সংবেদনশীল; ধীর চ্যানেলের পরামিতিগুলি প্রধান প্রবণতা বিচার করার জন্য আরও মাঝারি; দ্রুত চলমান গড় পরামিতিগুলি মাঝখানে রয়েছে, যখন এটি চ্যানেলটি ভেঙে যায় তখন ট্রেডিং সংকেত উত্পন্ন করে।
বিশেষত, এটি প্রথমে দ্রুত চ্যানেলের উপরের এবং নীচের রেলগুলি এবং চলমান গড় গণনা করে। যখন দামটি উপরের রেলটি ভেঙে যায়, যদি ধীর চ্যানেলের নীচের রেলটিও চলমান গড়ের উপরে থাকে তবে একটি দীর্ঘ সংকেত উত্পন্ন হয়; বিপরীতভাবে, যখন এটি নিম্ন রেলটি ভেঙে যায়, এটি ধীর চ্যানেলের উপরের রেলটি চলমান গড়ের নীচে রয়েছে কিনা তা পরীক্ষা করে, একটি সংক্ষিপ্ত সংকেত উত্পন্ন করে।
উপরন্তু, এটি কে-লাইন প্যাটার্ন সনাক্ত করে, যা মিথ্যা ব্রেকআউটগুলি ফিল্টার করার জন্য একাধিক কে-লাইনকে ক্রম অনুসারে সাজানো প্রয়োজন; এবং এটি একটি পুনরুদ্ধারের সুযোগগুলি মিস করা এড়ানোর জন্য এটি একটি সংহতকরণে প্রবেশ করেছে কিনা তা নির্ধারণ করতে মূল্য পরিবর্তনের হার সূচক গণনা করে; এবং ভলিউম সূচকগুলি অন্তর্ভুক্ত করে যাতে ভলিউমটি ব্রেকআউটের মূল্য অনুসরণ করে তা নিশ্চিত করে।
স্টপ লসের জন্য, কৌশলটি অভিযোজিত স্টপ লস ব্যবহার করে। সাম্প্রতিক অস্থিরতার উপর ভিত্তি করে, এটি গতিশীলভাবে স্টপ লসের শতাংশ সামঞ্জস্য করে। এটি কার্যকর স্টপ লস নিশ্চিত করার সময় প্রবণতা লাভের যতটা সম্ভব লক করার অনুমতি দেয়।
এই কৌশলটির সবচেয়ে বড় সুবিধা হল যে ট্রেডিং সিগন্যাল তৈরির মানদণ্ডগুলি তুলনামূলকভাবে কঠোর, যা কার্যকরভাবে প্রবণতা-বিহীন মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে পারে এবং বাজারের প্রবণতাগুলিতে সত্যিকারের পালা পয়েন্টগুলি ক্যাপচার করতে পারে। বিশেষত, বেশ কয়েকটি প্রধান দিক রয়েছেঃ
একাধিক চ্যানেল এবং চলমান গড়ের সংমিশ্রণে আরও কঠোর মানদণ্ড রয়েছে এবং ভুল মূল্যায়নের সম্ভাবনা হ্রাস করতে পারে।
কে-লাইন সিকোয়েন্স ভ্যালিডেশন একটি একক বিচ্যুত কে-লাইন থেকে ভুল সংকেত এড়ায়।
মূল্য পরিবর্তনের হার সূচক অন্তর্ভুক্ত করা এটি পুনরুদ্ধারের সুযোগগুলি মিস করা এড়ানোর জন্য এটি সংহত হয়েছে কিনা তা নির্ধারণ করতে পারে।
ভলিউম সূচক বিচার যোগ করা নিশ্চিত করে যে কেবলমাত্র যখন ভলিউম দাম অনুসরণ করে তখনই সংকেত উত্পন্ন হয়, অকার্যকর ব্রেকআউট এড়ানো।
অভিযোজিত স্টপ লস প্রক্রিয়াটি স্টপ লস নিশ্চিত করার সময় ট্রেন্ড মুনাফায় লকিং সর্বাধিক করতে পারে।
সুতরাং সাধারণভাবে, এই কৌশলটির অপ্টিমাইজড কনফিগারেশন, বিচক্ষণ সিদ্ধান্ত গ্রহণ, অভিযোজিত স্টপ লস এর বৈশিষ্ট্য রয়েছে, যা ট্রেন্ডিং সুযোগগুলি ক্যাপচার করার জন্য এটি খুব উপযুক্ত করে তোলে।
যদিও এই কৌশলটি ভুয়া ব্রেকআউট ফিল্টারিং এবং প্রবণতা ক্যাপচার করার ক্ষেত্রে অনেক অপ্টিমাইজেশন করেছে, তবুও কিছু ঝুঁকি রয়েছেঃ
জটিল প্যারামিটার সেটিংগুলি প্যারামিটার সংমিশ্রণের মধ্যে বড় পার্থক্যের দিকে পরিচালিত করতে পারে, সর্বোত্তম প্যারামিটারগুলি খুঁজে পেতে বিস্তৃত পরীক্ষার প্রয়োজন হয়, অন্যথায় এটি খুব বেশি মিথ্যা সংকেত তৈরি করতে পারে।
যখন দ্রুত চলমান গড় এবং চ্যানেলের মধ্যে ফাঁকটি খুব ছোট হয়, তখন এটি ঘন ঘন প্রবেশ এবং প্রস্থান সৃষ্টি করে, যা ধারাবাহিকভাবে প্রবণতা ট্র্যাকিংয়ের পক্ষে অনুকূল নয়।
অ্যাডাপ্টিভ স্টপ লস মেকানিজমে স্টপ লসের শতাংশ গণনা সহজ স্ট্যান্ডার্ড ডিভিয়েশন উপর নির্ভর করে, যা চরম বাজারের অবস্থার মধ্যে অপর্যাপ্ত স্টপ লসের দিকে পরিচালিত করতে পারে।
এটি মূলত প্রযুক্তিগত সূচকগুলির উপর নির্ভর করে এবং বড় মৌলিক পরিবর্তনের প্রতিক্রিয়া জানাতে ব্যর্থ হতে পারে।
ট্রেন্ড অনুসরণকারী কৌশল হিসাবে, এটি ব্যাপ্তি-সীমাবদ্ধ অস্থির বাজারে কম পারফর্ম করে।
এই ঝুঁকিগুলি নিয়ন্ত্রণের জন্য, নিম্নলিখিত ব্যবস্থাগুলি সুপারিশ করা হয়ঃ
সর্বোত্তম প্যারামিটার সংমিশ্রণ নির্ধারণের জন্য পর্যাপ্ত ব্যাকটেস্টিং করুন, অথবা প্যারামিটার অপ্টিমাইজেশনের জন্য মেশিন লার্নিং ব্যবহার বিবেচনা করুন।
অপ্রয়োজনীয় এন্ট্রি হ্রাস করার জন্য চ্যানেলের ব্যবধান মাঝারিভাবে প্রসারিত করুন, চলমান গড় সময়ের সময় বাড়ান।
হেজ ফান্ড পদ্ধতির মতো আরও উন্নত অস্থিরতা মডেল প্রবর্তন করার কথা বিবেচনা করুন।
কেবলমাত্র প্রযুক্তিগত ট্রেডিং এড়ানোর জন্য সময়মত মৌলিক তথ্য উল্লেখ করুন।
বাজারের অবস্থা সম্পর্কে বিচার বাড়ান এবং অস্থির বাজারে ট্রেডিং বন্ধ করুন।
কৌশলটি নিম্নলিখিত উপায়ে আরও অপ্টিমাইজ করা যেতে পারেঃ
মেশিন লার্নিং অ্যালগরিদম প্রবর্তন করে স্বয়ংক্রিয় প্যারামিটার অপ্টিমাইজেশান অর্জন করা, গতিশীল অপ্টিমাইজেশনের জন্য একটি অনুসন্ধান টেবিল তৈরি করার জন্য বিভিন্ন বাজারের পরিবেশে প্যারামিটার পারফরম্যান্স রেকর্ড করে।
বাজারের অবস্থা সম্পর্কে বিচার যোগ করুন, যেমন বাজারে প্রবণতা বা অস্থিরতা আছে কিনা তা নির্ধারণের জন্য মডিউল যোগ করুন এবং অপ্রয়োজনীয় ক্ষতি এড়াতে অস্থির বাজারে ট্রেডিং বন্ধ করুন।
স্টপ লস কৌশল অপ্টিমাইজ করুন, যেমন ট্রেলিং স্টপ লস, আনুপাতিক স্টপ লস ইত্যাদি।
মৌলিক ঘটনা ঘটলে সতর্কতা পাঠানোর জন্য মৌলিক কারণগুলি অন্তর্ভুক্ত করুন, কেবলমাত্র প্রযুক্তিগত সূচকগুলির উপর ভিত্তি করে ক্ষতি এড়ানো।
ঝুঁকি আরও বৈচিত্র্যময় করার জন্য এই কৌশলটি অন্যান্য সম্পর্কিত কৌশলগুলির সাথে একত্রিত করে পোর্টফোলিও অপ্টিমাইজেশন পরিচালনা করুন।
স্বয়ংক্রিয় সংকেত কার্যকরকরণ এবং কঠোর ঝুঁকি নিয়ন্ত্রণের জন্য পরিমাণগত ট্রেডিং কাঠামো চালু করা।
সংক্ষেপে, এই কৌশলটি ক্রিপ্টোকারেন্সি বাজারে ট্রেন্ডিং সুযোগগুলি ক্যাপচার করার জন্য খুব উপযুক্ত। এটি ট্রেডিং সিগন্যাল তৈরি করতে একাধিক চ্যানেল এবং চলমান গড় ব্যবহার করে এবং কার্যকরভাবে মিথ্যা ব্রেকআউট গোলমাল ফিল্টার করে এবং ট্রেন্ড মুনাফা সফলভাবে লক করে। তবে পরামিতি অপ্টিমাইজেশন, স্টপ লস পদ্ধতি, বাজার অবস্থা বিচার ইত্যাদি এখনও মনোযোগের প্রয়োজন। ক্রমাগত উন্নতির সাথে, এটিতে স্থিতিশীল বিনিয়োগ রিটার্নের সম্ভাবনা রয়েছে। এটি পরিমাণগত কৌশল নকশার জন্য একটি দুর্দান্ত উদাহরণ সরবরাহ করে।
/*backtest start: 2022-09-21 00:00:00 end: 2023-09-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Extremely Overfit", overlay=true, commission_type=strategy.commission.percent, commission_value=.16, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding = 1) price = close goLong = input(title="go long?", type=input.bool, defval=true) goShort = input(title="go short?", type=input.bool, defval=true) //trendRestrict = input(title="basic trend restriction?", type=input.bool, defval=false) dynamicRestrict = true //input(title="dynamic trend restriction?", type=input.bool, defval=true) longtrendimpt = true //input(title="additional weight on long-term trends?", type=input.bool, defval=true) volRestrict = true //input(title="volume restriction?", type=input.bool, defval=true) conservativeClose = false //input(title="conservative order closing?", type=input.bool, defval=false) Restrictiveness = input ( -40,step=10,title ="Restrictiveness (higher = make fewer trades)") volatilityImportance = 3.2 //input( 3.2, step = 0.1, minval = 0) fastChannelLength = input( 6 ) fastChannelMargin = input ( 3.2, step = 0.1, minval = 0) slowChannelLength = input ( 6, step = 1, minval = 0) slowChannelMargin = input ( 1.5, step = 0.1, minval = 0) fastHMAlength = input (4, step = 1, minval = 0) stopLoss = input( 3, step = 0.1, minval = 0) //altClosePeriod = input( 27, step = 1, minval = 1) //altCloseFactor = input( 4.9, step = 0.1) stopLossFlexibility = 50 //input(50, step=10, title="effect of volatility on SL?") volumeMAlength = 14 //input ( 14, step = 1, minval = 1) volumeVolatilityCutoff = 3.8 // ( 3.8, step = 1, minval = 0) trendSensitivity = 3.8 //input ( 3.8, step = 0.1) obvLookback = 10 //input(10, step = 10, minval = 10) obvCorrThreshold = 0.89 //input(0.89, step = 0.01) ROClength = 80 //input( 80, step = 10) ROCcutoff = 5.6 //input( 5.6, step=0.1) trendRestrict = false //trendLookback = input ( 360, step = 10, minval = 10) //longTrendLookback = input(720, step = 10, minval = 10) //longTrendImportance = input(1.5, step = 0.05) trendLookback = 360 longTrendLookback = 720 longTrendImportance = 1.5 //conservativeness = input( 2.4, step = 0.1) conservativeness = 0 //trendPower = input( 0, step=1) trendPower = 0 //conservativenessLookback = input( 650, step = 10, minval = 0) conservativenessLookback = 10 //consAffectFactor = input( 0.85,step=0.01) consAffectFactor = 0.85 //volatilityLookback = input(50, step=1, minval=2) volatilityLookback = int(50) recentVol = stdev(price,volatilityLookback)/sqrt(volatilityLookback) //price channel fastChannel = ema(price, fastChannelLength) fastChannelUB = fastChannel * (1 + (float(fastChannelMargin) / 1000)) + (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100)))) fastChannelLB = fastChannel * (1 - (float(fastChannelMargin) / 1000)) - (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100)))) fchU = ((fastChannelUB < open) and (fastChannelUB < close)) fchL = ((fastChannelLB > open) and (fastChannelLB > close)) //plot(fastChannelUB) //plot(fastChannelLB) //slow channel //slowChannelLBmargin = input ( 2, step = 0.1, minval = 0 ) slowChannel = ema(ema(price,slowChannelLength),slowChannelLength) slowChannelUB = slowChannel * (1 + (float(slowChannelMargin) / 2000)) + (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100)))) slowChannelLB = slowChannel * (1 - (float(slowChannelMargin) / 2000)) - (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100)))) schU = ((slowChannelUB < close)) schL = ((slowChannelLB > close)) cschU = (((slowChannelUB * (1 + conservativeness)) < close)) cschL = (((slowChannelUB * (1 - conservativeness)) > close)) //plot(slowChannel,color = #00FF00) //plot(slowChannelUB,color = #00FF00) //plot(slowChannelLB,color = #00FF00) fastHMA = hma(price,fastHMAlength) fastAboveUB = (fastHMA > slowChannelUB) fastBelowLB = (fastHMA < slowChannelLB) //plot(fastHMA, color = #FF0000, linewidth = 2) //consecutive candles //consecutiveCandlesReq = input(1, step = 1, minval = 1, maxval = 4) consecutiveCandlesReq = 1 consecutiveBullReq = float(consecutiveCandlesReq) consecutiveBearReq = float(consecutiveCandlesReq) cbull = ((close[0] > close[1]) and (consecutiveBullReq == 1)) or (((close[0] > close[1]) and (close[1] > close[2])) and consecutiveBullReq == 2) or (((close[0] > close[1]) and (close[1] > close[2]) and (close[2] > close[3])) and consecutiveBullReq == 3) or (((close[0] > close[1]) and (close[1] > close[2]) and (close[2] > close[3]) and (close[3] > close[4])) and consecutiveBullReq == 4) cbear = ((close[0] < close[1]) and (consecutiveBearReq == 1)) or (((close[0] < close[1]) and (close[1] < close[2])) and consecutiveBearReq == 2) or (((close[0] < close[1]) and (close[1] < close[2]) and (close[2] < close[3])) and consecutiveBearReq == 3) or (((close[0] < close[1]) and (close[1] < close[2]) and (close[2] < close[3]) and (close[3] < close[4])) and consecutiveBearReq == 4) //trend detection //trendCutoff = input(0, step = 0.1) trendCutoff = 0 trendDetectionPct = float(trendCutoff/100) trendVal = float((close[0] - close[trendLookback])/close[0]) trendUp = (trendVal > (0 + trendDetectionPct)) trendDown = (trendVal < (0 - trendDetectionPct)) //plot(trendVal+36.5,linewidth=2) // peak indicators peakHigh = ((fastHMA > fastChannelUB) and (fastChannelLB > slowChannelUB)) peakLow = ((fastHMA < fastChannelLB) and (fastChannelUB < slowChannelLB)) TpeakHigh = (fastHMA > fastChannelUB) and (fastChannelUB > slowChannelUB) TpeakLow = (fastHMA < fastChannelUB) and (fastChannelLB < slowChannelLB) //TpeakHigh = (fastHMA > fastChannelUB) and (fastChannelLB > avg(slowChannelUB,slowChannelLB)) //TpeakLow = (fastHMA < fastChannelUB) and (fastChannelUB < avg(slowChannelLB,slowChannelUB)) //TpeakHigh = ((crossover(fastHMA,fastChannelUB)) and (fastChannelLB > slowChannelUB)) //TpeakLow = ((crossover(fastChannelLB,fastHMA)) and (fastChannelUB < slowChannelLB)) //TpeakHigh = (fastHMA > (fastChannelUB * (1 + (trendPower/800)))) and (fastChannelUB > (slowChannelUB * (1 + (trendPower/800)))) //TpeakLow = (fastHMA < (fastChannelUB * (1 - (trendPower/800)))) and (fastChannelLB < (slowChannelLB * (1 - (trendPower/800)))) //TpeakHigh = (fastHMA > (fastChannelUB * (1 + (trendPower/800)))) and (avg(fastChannelUB,fastChannelLB) > (slowChannelUB * (1 + (trendPower/800)))) //TpeakLow = (fastHMA < (fastChannelUB * (1 - (trendPower/800)))) and (avg(fastChannelLB,fastChannelUB) < (slowChannelLB * (1 - (trendPower/800)))) //plot(fastChannelUB * (1 + (trendPower/700)), color=#FF69B4) // and for closing... closeLong = (crossover(fastHMA,fastChannelUB) and (fastChannelLB > slowChannelUB)) closeShort = (crossover(fastChannelLB,fastHMA) and (fastChannelUB < slowChannelLB)) //closeLong = (crossover(fastHMA,fastChannelUB) and (fastChannelLB > slowChannelUB)) or (roc(price,altClosePeriod) > altCloseFactor) //closeShort = (crossover(fastChannelLB,fastHMA) and (fastChannelUB < slowChannelLB)) or (roc(price,altClosePeriod) < (altCloseFactor) * -1) //closeLong = (crossover(fastHMA,fastChannelUB) and (fastChannelLB > slowChannelUB)) or (((price - fastChannelUB) > (altCloseFactor * abs(((fastChannelUB - fastChannelLB)/2) - ((slowChannelUB - slowChannelLB)/2)))) and (fastChannelLB > slowChannelUB)) //closeShort = (crossover(fastChannelLB,fastHMA) and (fastChannelUB < slowChannelLB)) or (((fastChannelLB - price) > (altCloseFactor * abs(((fastChannelUB - fastChannelLB)/2) - ((slowChannelUB - slowChannelLB)/2)))) and (fastChannelUB < slowChannelLB)) //closeLong = crossover(fastHMA,fastChannelUB) and ((fastChannelLB[0] - fastChannelLB[1]) < (slowChannelUB[0] - slowChannelUB[1])) //closeShort = crossover(fastChannelLB,fastHMA) and ((fastChannelUB[0] - fastChannelUB[1]) > (slowChannelLB[0] - slowChannelLB[1])) //stop-loss priceDev = stdev(price,trendLookback) * (1 + stopLossFlexibility/5) stopLossMod = stopLoss * (1 + (priceDev/price)) //longStopPrice = strategy.position_avg_price * (1 - (stopLoss/100)) //shortStopPrice = strategy.position_avg_price * (1 + (stopLoss/100)) longStopPrice = strategy.position_avg_price * (1 - (stopLossMod/100)) shortStopPrice = strategy.position_avg_price * (1 + (stopLossMod/100)) // volume volumeMA = ema(volume,volumeMAlength) volumeDecrease = ((not volRestrict ) or (volumeMA[0] < ema(volumeMA[1] * (1 - (volumeVolatilityCutoff/100)),5))) volumeCutoff = ema(volumeMA[1] * (1 - (volumeVolatilityCutoff/100)),5) //plot(volumeMA) //plot(volumeCutoff) // detect volatility //trendinessLookback = input ( 600, step = 10, minval = 0) trendinessLookback = trendLookback trendiness = (stdev(price,trendinessLookback)/price) * (1 - (Restrictiveness/100)) longtermTrend = ((price - price[longTrendLookback])/price) //dynamicTrendDetected = (dynamicRestrict and (abs(trendiness * 100) < trendSensitivity)) dynamicTrendDetected = (longtrendimpt and (dynamicRestrict and (abs(trendiness * 100) < (trendSensitivity+(longtermTrend * longTrendImportance))))) or (not longtrendimpt and ((dynamicRestrict and (abs(trendiness * 100) < trendSensitivity)))) // adapt conservativeness to volatility //consVal = sma(((stdev(price,conservativenessLookback))/price)*100,25) consVal = sma(((stdev(price,conservativenessLookback))/price)*100,25) cVnorm = sma(avg(consVal,3),60) cVal = consVal - cVnorm //conservativenessMod = conservativeness * (cVal * consAffectFactor) conservativenessMod = conservativeness * (consVal * consAffectFactor) //plot(consVal,linewidth=4) //plot(cVnorm,color = #00FF00) //plot(cVal,linewidth=2) // ROC cutoff (for CLOSING) //rocCloseLong = (ema(roc(price,ROClength),10) > ROCcutoff) //rocCloseShort = (ema(roc(price,ROClength),10) < (ROCcutoff * -1)) ROCval = roc(price,ROClength) ROCema = ema(ROCval,30) ROCabs = abs(ROCema) ROCallow = ROCabs < ROCcutoff ROCallowLong = (ROCabs < ROCcutoff) or ((ROCabs >= ROCcutoff) and ((fastChannelLB < slowChannelLB) and (fastHMA < fastChannelLB))) ROCallowShort = (ROCabs < ROCcutoff) or ((ROCabs >= ROCcutoff) and ((fastChannelUB > slowChannelUB) and (fastHMA > fastChannelUB))) //plot(ROCallow) // obv evidence_obv = (correlation(price,obv[0],obvLookback)) obvAllow = evidence_obv > obvCorrThreshold //if (not na(vrsi)) if trendRestrict or dynamicTrendDetected //if (strategy.position_size == 0) if not (strategy.position_size < 0) if trendUp //if cbear and schL and fchL and trendUp and goLong if cbear and TpeakLow and volumeDecrease and ROCallow and goLong and obvAllow //if cbear and peakLow and rocHigh and volumeDecrease and goLong strategy.entry("Long", strategy.long, comment="Long") if not (strategy.position_size > 0) if trendDown //if cbull and schU and fchU and trendDown and goShort if cbull and TpeakHigh and volumeDecrease and ROCallow and goShort and obvAllow //if cbull and peakHigh and rocLow and volumeDecrease and goShort strategy.entry("Short", strategy.short, comment="Short") else //if (strategy.position_size == 0) if not (strategy.position_size < 0) //if cbear and peakLow and goLong //if cbear and peakLow and volumeDecrease and ROCallow and goLong if TpeakLow and goLong and obvAllow strategy.entry("Long", strategy.long, comment="Long") if not (strategy.position_size > 0) //if cbull and peakHigh and goShort //if cbull and peakHigh and volumeDecrease and ROCallow and goShort if TpeakHigh and goShort and obvAllow strategy.entry("Short", strategy.short, comment="Short") if conservativeClose //pkHigh = ((fastHMA > fastChannelUB) and (fastChannelUB > (slowChannelUB * (1 + conservativeness/1000)))) //pkLow = ((fastHMA < fastChannelLB) and (fastChannelLB < (slowChannelLB * (1 - conservativeness/1000)))) //pkHigh = ((fastHMA > fastChannelUB) and (fastChannelUB > (slowChannelUB * (1 + conservativenessMod/1000)))) //pkLow = ((fastHMA < fastChannelLB) and (fastChannelLB < (slowChannelLB * (1 - conservativenessMod/1000)))) pkHigh = ((fastHMA > fastChannelUB) and (fastChannelUB > (slowChannelUB * (1 + ((conservativenessMod/1000) * (1 - Restrictiveness/100)))))) pkLow = ((fastHMA < fastChannelLB) and (fastChannelLB < (slowChannelLB * (1 - ((conservativenessMod/1000) * (1 - Restrictiveness/100)))))) if (strategy.position_size > 0) //if fastAboveUB //if pkHigh and closeLong if closeLong strategy.close("Long", comment="closeLong") if (strategy.position_size < 0) //if fastBelowLB //if pkLow and closeShort if closeShort strategy.close("Short", comment="closeShort") else if (strategy.position_size > 0) //if fastAboveUB if peakHigh strategy.close("Long", comment="closeLong") if (strategy.position_size < 0) //if fastBelowLB if peakLow strategy.close("Short", comment="closeShort") if (strategy.position_size > 0) strategy.exit(id="Long", stop=longStopPrice, comment="stopLong") if (strategy.position_size < 0) strategy.exit(id="Short", stop=shortStopPrice, comment="stopShort") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)