এই কৌশলটি হুল মুভিং এভারেজ, ফিসার ট্রান্সফর্ম সূচক এবং কমোডিটি চ্যানেল সূচককে একটি অভিযোজিত বহু-ফ্যাক্টর কৌশলতে একত্রিত করে। এটি বুদ্ধিমানভাবে প্রবণতা সনাক্ত করতে পারে, স্বয়ংক্রিয়ভাবে পরামিতিগুলি সামঞ্জস্য করতে পারে এবং বিভিন্ন পণ্য এবং চক্রের সাথে মানিয়ে নিতে পারে।
এই কৌশলটির মূল যুক্তিটি প্রবেশ এবং প্রস্থান নির্ধারণের জন্য ফিশার ট্রান্সফর্ম সূচকের সোনার ক্রস এবং মৃত ক্রসের উপর ভিত্তি করে। ফিশার ট্রান্সফর্ম সূচকটি টার্নিং পয়েন্টগুলি আরও সঠিকভাবে বিচার করতে চলমান গড় এবং দোলকের সুবিধাগুলি একত্রিত করে।
কৌশলটি প্রথমে হুল মুভিং এভারেজ এবং ফিশার ট্রান্সফর্ম সূচক গণনা করে। তারপরে কমোডিটি চ্যানেল সূচকের সাহায্যে, প্রবেশের শর্তগুলি গঠন করুন। যখন ফিশার ট্রান্সফর্ম সূচক শূন্য রেখার নীচে থেকে বা সেট পরামিতি পরিসীমা বাইরে থেকে অতিক্রম করে, এটি একটি দীর্ঘ সংকেত গঠনের জন্য একটি সোনার ক্রস শর্ত হিসাবে সেট করা হয়; যখন ফিশার ট্রান্সফর্ম শূন্য রেখার উপরে বা পরামিতি পরিসীমার বাইরে থেকে নীচে অতিক্রম করে, এটি একটি সংক্ষিপ্ত সংকেত গঠনের জন্য একটি মৃত ক্রস শর্ত হিসাবে সেট করা হয়।
প্রস্থান শর্তগুলি বিপরীত, সোনার ক্রসগুলিতে খোলা লং অর্ডারগুলি মৃত ক্রসগুলিতে বন্ধ হয়; মৃত ক্রসগুলিতে খোলা শর্ট অর্ডারগুলি সোনার ক্রসগুলিতে বন্ধ হয়। এটি প্রবণতা বিপরীত পয়েন্টগুলি ক্যাপচার করতে সূচকগুলির ক্রসওভার ব্যবহার করে।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল অভিযোজনশীল বহু-ফ্যাক্টর। এটি পতনশীল এবং উত্থানশীল উভয় বাজারে ভাল পারফর্ম করার জন্য চলমান গড়, দোলক এবং প্রবণতা সূচকগুলির সুবিধা গ্রহণ করে। অভিযোজনযোগ্যতা অর্জনের জন্য বিভিন্ন এবং চক্র অনুযায়ী পরামিতিগুলিও সামঞ্জস্য করা যেতে পারে।
এছাড়াও, কৌশলটিতে একটি স্বয়ংক্রিয় স্টপ লস প্রক্রিয়া অন্তর্ভুক্ত রয়েছে। যখন দাম হাল্ল মুভিং গড়ের উপরে ফিরে আসে, এটি স্বয়ংক্রিয়ভাবে প্রস্থান করতে ক্ষতি বন্ধ করবে। এটি কৌশলটির জন্য ক্ষতির ঝুঁকিকে ব্যাপকভাবে হ্রাস করে।
এই কৌশলটির সবচেয়ে বড় ঝুঁকি হ'ল সূচকগুলির মধ্যে ত্রুটি সংকেত। যখন দাম পাশের দিকে চলে যায়, সূচকগুলি কিছু অপ্রয়োজনীয় ক্রস তৈরি করতে পারে। এটি অপ্রয়োজনীয় প্রবেশ এবং স্টপ লস হতে পারে।
সমাধানটি হ'ল কিছু ছোট সংকেত ফিল্টার করার জন্য সূচক পরামিতিগুলি যথাযথভাবে সামঞ্জস্য করা। বা নিশ্চিতকরণের জন্য আরও সহায়ক সূচকগুলি একত্রিত করা। উদাহরণস্বরূপ, সত্য সংকেতগুলি নির্ধারণ করতে একটি ভলিউম সূচক যুক্ত করুন।
কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ
স্বয়ংক্রিয় প্যারামিটার অপ্টিমাইজেশান অর্জনের জন্য মেশিন লার্নিং অ্যালগরিদম যুক্ত করুন। ঐতিহাসিক তথ্যের উপর ভিত্তি করে প্রশিক্ষণ দিতে এবং রিয়েল টাইমে সূচক প্যারামিটারগুলি সামঞ্জস্য করতে পারে।
স্কোরিংয়ের জন্য আরও সূচক যুক্ত করুন, সংখ্যাগরিষ্ঠ সিদ্ধান্তের কৌশল গ্রহণ করুন এবং সিদ্ধান্তের নির্ভুলতা উন্নত করুন।
একটি ব্রেকআউট নিশ্চিতকরণ প্রক্রিয়া যোগ করুন যা ভুল অপারেশন এড়াতে আবার নিশ্চিতকরণের জন্য গুরুত্বপূর্ণ মূল্য স্তর এবং চ্যানেল ব্যবহার করে।
একটি ঝুঁকি মূল্যায়ন মডিউল যোগ করুন যা বাজারের অবস্থার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে অবস্থানের আকার এবং স্টপ লস পরিসীমা সামঞ্জস্য করতে পারে।
সামগ্রিকভাবে, এটি একটি খুব ভাল অভিযোজনশীল বহু-ফ্যাক্টর ফ্রেমওয়ার্ক। এটি চলমান গড়ের প্রবণতা বিচার, দোলকগুলির অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয় বিচার এবং সূচক ক্রসগুলির প্রয়োগকে একত্রিত করে, একটি সম্পূর্ণ প্রবেশ এবং প্রস্থান প্রক্রিয়া গঠন করে। যদি এটি আরও অনুকূলিত করা যায় এবং অভিযোজনশীল এবং বুদ্ধিমান উপাদানগুলি বাড়ানো যায় তবে এটি অত্যন্ত উচ্চ বাণিজ্যিক মূল্যের কৌশল পণ্য হয়ে উঠবে।
/*backtest start: 2023-01-09 00:00:00 end: 2024-01-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is free to copy/paste/use. no permission required. just do it! // © @SeaSide420 //@version=4 strategy(title="Hull Fisher",currency="USD",default_qty_type=strategy.percent_of_equity,default_qty_value=100,commission_type=strategy.commission.percent,commission_value=0.25) //=================================== Inputs ========================================================= period =input(title="HullMA Length", type=input.integer, defval=14, minval=2) length =input(9, minval=1, title="Signal Length") line1 = input(5, minval=2, title="Top Line") line5 = input(-5, maxval=-2, title="Bottom Line") price = input(open, type=input.source, title="Price data") entry1 =input(true,type=input.bool, title="Open when HullFisher crossover outside Lines") entry2 =input(true,type=input.bool, title="Open when HullFisher past zero") useHMA =input(true,type=input.bool, title="Include Hull_moving_average") useCCI =input(true,type=input.bool, title="Include Commodity_channel_index") fishclose=input(true,type=input.bool, title="Close order when Fisher crossover") HMAclose=input(true,type=input.bool, title="Close order when Hull crossover") //================================ Calculations ====================================================== HMA = hma(price,period) HMA2 = HMA[1] high_ = highest(HMA, length) low_ = lowest(HMA, length) round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val value = 0.0 value := round_(.66 * ((HMA - low_) / max(high_ - low_, .001) - .5) + .67 * nz(value[1])) value1 = 0.0 value1 := .5 * log((1 + value) / max(1 - value, .001)) + .5 * nz(value1[1]) value2 = value1[1] CCI1 = cci(price,period) CCI2 = CCI1[1] line2 = line1/2 line4 = line5/2 //================================ Draw Plots ======================================================= colorchange1 =CCI1>CCI2?color.lime:color.red colorchange2 =value1>value2?color.lime:color.red a =plot(line1,style=plot.style_line,color=color.red,transp=50,linewidth=2,title="Top Line") b =plot(line2,style=plot.style_line,color=color.red,transp=50,linewidth=2,title="Upper Line") c =plot(0,style=plot.style_line,color=color.black,transp=50,linewidth=2,title="Middle Line") d =plot(line4,style=plot.style_line,color=color.lime,transp=50,linewidth=2,title="Lower Line") e =plot(line5,style=plot.style_line,color=color.lime,transp=50,linewidth=2,title="Bottom Line") f =plot(value1, color=color.black,transp=50,linewidth=2, title="Value 1") g =plot(value2, color=color.black,transp=50,linewidth=2, title="Value 2") h =plot(CCI1/50,style=plot.style_area, color=colorchange1,transp=50,linewidth=2, title="CCI") fill(f,g,color=colorchange2,transp=20,title="Color fill") plot(cross(value1, value2) ? value1 : na, style=plot.style_circles, color=color.black, linewidth=10) plot(cross(value1, value2) ? value1 : na, style=plot.style_circles, color=color.white, linewidth=8) plot(cross(value1, value2) ? value1 : na, style=plot.style_circles, color=colorchange2, linewidth=5) //============================= Entry conditions ==================================================== // Outside Lines crossover or zero lines crossover LongCondition1 = value1>value2 and value1<line5 and entry1 and not useCCI and not useHMA ShortCondition1 = value1<value2 and value1>line1 and entry1 and not useCCI and not useHMA LongCondition2 = value1>value2 and value1>0 and entry2 and not useCCI and not useHMA ShortCondition2 = value1<value2 and value1<0 and entry2 and not useCCI and not useHMA // Use CCI LongCondition3 = value1>value2 and value1<line5 and CCI1>CCI2 and entry1 and useCCI and not useHMA ShortCondition3 = value1<value2 and value1>line1 and CCI1<CCI2 and entry1 and useCCI and not useHMA LongCondition4 = value1>value2 and value1>0 and CCI1>CCI2 and entry2 and useCCI and not useHMA ShortCondition4 = value1<value2 and value1<0 and CCI1<CCI2 and entry2 and useCCI and not useHMA // Use HMA LongCondition5 = value1>value2 and value1<line5 and CCI1>CCI2 and HMA>HMA2 and entry1 and not useCCI and useHMA ShortCondition5 = value1<value2 and value1>line1 and CCI1<CCI2 and HMA<HMA2 and entry1 and not useCCI and useHMA LongCondition6 = value1>value2 and value1>0 and CCI1>CCI2 and HMA>HMA2 and entry2 and not useCCI and useHMA ShortCondition6 = value1<value2 and value1<0 and CCI1<CCI2 and HMA<HMA2 and entry2 and not useCCI and useHMA //Use CCI & HMA LongCondition7 = value1>value2 and value1<line5 and CCI1>CCI2 and HMA>HMA2 and entry1 and useCCI and useHMA ShortCondition7 = value1<value2 and value1>line1 and CCI1<CCI2 and HMA<HMA2 and entry1 and useCCI and useHMA LongCondition8 = value1>value2 and value1>0 and CCI1>CCI2 and HMA>HMA2 and entry2 and useCCI and useHMA ShortCondition8 = value1<value2 and value1<0 and CCI1<CCI2 and HMA<HMA2 and entry2 and useCCI and useHMA //========================= Exit & Entry excecution ================================================= if HMAclose and fishclose and value1<value2 and HMA<HMA2 strategy.close("BUY") if HMAclose and fishclose and value1>value2 and HMA>HMA2 strategy.close("SELL") if HMAclose and HMA<HMA2 strategy.close("BUY") if HMAclose and HMA>HMA2 strategy.close("SELL") if fishclose and value1<value2 strategy.close("BUY") if fishclose and value1>value2 strategy.close("SELL") if LongCondition1 or LongCondition2 or LongCondition3 or LongCondition4 or LongCondition5 or LongCondition6 or LongCondition7 or LongCondition8 strategy.entry("BUY", strategy.long) if ShortCondition1 or ShortCondition2 or ShortCondition3 or ShortCondition4 or ShortCondition5 or ShortCondition6 or ShortCondition7 or ShortCondition8 strategy.entry("SELL", strategy.short)