এই কৌশলটি জন এহেলার্স তার বই
কৌশলটি প্রথমে বন্ধের মূল্য - খোলার মূল্য গণনা করে, যা মোমবাতির দেহ। তারপরে এটি উচ্চ মূল্য - নিম্ন মূল্য গণনা করে, যা মোমবাতির ছায়া। এই দুটি অংশের যোগফল এবং গড় যথাক্রমে গ্রহণ করে, এটি স্টকটির গতিবেগ পায়। তারপরে স্টকটির অস্থিরতার সাথে গতিবেগকে ভাগ করে, এটি আপেক্ষিক শক্তি সূচক (আরভিআই) পায়।
এরপরে, সিগন্যালের মান পেতে এহেলার্স ফিশার সূত্রটি আরভিআইতে প্রয়োগ করা হয়। যখন সিগন্যালটি ট্রিগারের উপরে অতিক্রম করে তখন এটি দীর্ঘ হয় এবং যখন সিগন্যালটি ট্রিগারের নীচে অতিক্রম করে তখন এটি সংক্ষিপ্ত হয়। এছাড়াও, ঝুঁকি নিয়ন্ত্রণের জন্য স্থির স্টপ লস এবং ট্রেলিং স্টপ লস প্রয়োগ করা হয়।
এই কৌশলটি স্টকগুলির গতির বৈশিষ্ট্য এবং স্টোকাস্টিক সূচককে একীভূত করে, যা কার্যকরভাবে বাজারে আপেক্ষিক শক্তি নির্ধারণ করতে পারে। এহেলার্স ফিসারের সূচকের নকশা গোলমালের প্রভাব হ্রাস করতে পারে এবং তুলনামূলকভাবে নির্ভরযোগ্য ট্রেডিং সংকেত তৈরি করতে পারে। ভিগুয়ার সূচকটি স্টকটির নিজস্ব প্রবণতা গুণমান এবং অস্থিরতা প্রতিফলিত করে, এটিকে একটি গতিশীল সূচক করে তোলে।
একটি একক গতির সূচক বা স্টোকাস্টিক সূচক ব্যবহারের তুলনায়, এই কৌশলটি সূচক এবং মডেলগুলিকে জৈবিকভাবে একত্রিত করে, যা সংকেতগুলির গুণমান উন্নত করতে পারে। কঠোর স্টপ লস নিয়মগুলি কৌশলটিকে লাভজনকতা নিশ্চিত করার সময় ঝুঁকি নিয়ন্ত্রণ করতে সক্ষম করে।
এই কৌশলটি মূলত এহেলার্স ফিশার সূচকের উপর নির্ভর করে। যখন বাজারে মারাত্মক পরিবর্তন হয়, তখন নতুন পরিবেশের সাথে খাপ খাইয়ে নেওয়ার জন্য সূচকের পরামিতিগুলি অপ্টিমাইজ করা দরকার। যদি পরামিতিগুলি ভুলভাবে সেট করা হয় তবে এটি ভুল সংকেত বা বিলম্বিত সংকেত তৈরি করতে পারে।
এছাড়াও, কৌশল নিজেই অন্তর্নিহিতভাবে কার্ভ ফিটিং ঝুঁকি কিছু ডিগ্রী আছে। যদি ব্যাকটেস্টিং এবং লাইভ ট্রেডিংয়ের বাজারের পরিবেশ ব্যাপকভাবে পরিবর্তিত হয়, তবে কৌশলটির কর্মক্ষমতা ব্যাপকভাবে বিচ্যুত হতে পারে। এই ক্ষেত্রে, কৌশল পরামিতিগুলি সামঞ্জস্য করতে হবে এবং নতুন বাজারের অবস্থার সাথে খাপ খাইয়ে নেওয়ার জন্য ট্রেডিং নিয়মগুলির অপ্টিমাইজেশান প্রয়োজন।
এই কৌশল নিম্নলিখিত দিকগুলির মধ্যে আরও অপ্টিমাইজ করা যেতে পারেঃ
উচ্চ সংবেদনশীলতা বা গোলমাল ফিল্টারিংয়ের জন্য Ehlers Fisher সূচকের পরামিতিগুলি অপ্টিমাইজ করুন।
আরও নির্ভরযোগ্য ট্রেডিং সিগন্যাল তৈরির জন্য LSTM এর মতো মেশিন লার্নিং অ্যালগরিদম দিয়ে সূচকটি মডেল করুন।
স্টপ লস দূরত্বকে গতিশীলভাবে সামঞ্জস্য করার জন্য ATR এর মতো বাজারের অস্থিরতার সূচক অন্তর্ভুক্ত করুন।
সিগন্যালের গুণমান উন্নত করার জন্য অন্যান্য প্রযুক্তিগত এবং মৌলিক সূচকগুলিকে একত্রিত করে মাল্টি-ফ্যাক্টর মডেলগুলির জন্য সমর্থন যুক্ত করুন।
ডায়নামিক এন্ট্রি/এক্সট্রিপ্ট মানদণ্ডের সাথে ওপেন/ক্লোজ পজিশন লজিককে অপ্টিমাইজ করুন। অভিযোজিত স্টপ লস এবং লাভ গ্রহণের কৌশলগুলি প্রবর্তন করুন।
এই কৌশলটি বাজারের প্রবণতা এবং শক্তি নির্ধারণের জন্য এহেলার্স ফিশার স্টোকাস্টিক আরভিআই সূচক ব্যবহার করে এবং ঝুঁকি নিয়ন্ত্রণের জন্য যুক্তিসঙ্গত স্টপ লস প্রক্রিয়া নির্ধারণ করে। একক সূচকের তুলনায়, এই কৌশলটি একাধিক সূচক এবং মডেলগুলিকে জৈবিকভাবে একত্রিত করে, যা গোলমাল ফিল্টার করতে পারে এবং উচ্চ মানের সংকেত সরবরাহ করতে পারে। প্যারামিটার অপ্টিমাইজেশন, মডেল ফিউশন, অভিযোজিত সমন্বয় এবং অন্যান্য উপায়ে কৌশল কর্মক্ষমতা আরও উন্নত করার জন্য এখনও জায়গা রয়েছে।
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers Fisher Stochastic Relative Vigor Index Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1) p = input(10, title = "Length") FisherStoch(src, len) => val1 = stoch(src, src, src, len) / 100 val2 = (4 * val1 + 3 * val1[1] + 2 * val1[2] + val1[3]) / 10 FisherStoch = 0.5 * log((1 + 1.98 * (val2 - 0.5)) / (1 - 1.98 * (val2 - 0.5))) / 2.64 CO = close - open HL = high - low value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6 value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6 num = sum(value1, p) denom = sum(value2, p) RVI = denom != 0 ? num / denom : 0 signal = FisherStoch(RVI, p) trigger = signal[1] oppositeTrade = input(true) barsSinceEntry = 0 barsSinceEntry := nz(barsSinceEntry[1]) + 1 if strategy.position_size == 0 barsSinceEntry := 0 if ((crossover(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossunder(signal, trigger))) and abs(signal) > 2 / 2.64 strategy.entry("Long", strategy.long) barsSinceEntry := 0 if ((crossunder(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossover(signal, trigger))) and abs(signal) > 2 / 2.64 strategy.entry("Short", strategy.short) barsSinceEntry := 0 if strategy.openprofit < 0 and barsSinceEntry > 8 strategy.close_all() barsSinceEntry := 0 hline(0, title="ZeroLine", color=gray) signalPlot = plot(signal, title = "Signal", color = blue) triggerPlot = plot(trigger, title = "Trigger", color = green) fill(signalPlot, triggerPlot, color = signal < trigger ? red : lime, transp = 50)