
এই কৌশলটি এলেস-ফিশার এলোমেলো আপেক্ষিক প্রাণবন্ততা সূচকের উপর ভিত্তি করে তৈরি করা হয়েছে, যা জন এলেস তার বইয়ের স্টক এবং ফিউচারগুলির নিয়ন্ত্রণ বিশ্লেষণ প্যাকেজে উপস্থাপন করেছেন। এই কৌশলটি শেয়ারের আপেক্ষিক শক্তি নির্ণয়ের জন্য এলেস-ফিশার সূচক ব্যবহার করে এবং কাস্টমাইজড ট্রেডিং নিয়মের সাথে কেনা বেচা করে।
এই কৌশলটি প্রথমে ক্লোজিং প্রাইস - ওপেনিং প্রাইস, অর্থাৎ শেয়ারের প্রকৃত অংশটি গণনা করে। তারপরে উচ্চ মূল্য - নিম্ন মূল্য, অর্থাৎ শেয়ারের ছায়া রেখার অংশটি গণনা করে। এই দুটি অংশের যথাক্রমে গড় যোগ করে শেয়ারের গতিশীলতা গণনা করা হয়। তারপরে এই গতিশীলতার মানটি শেয়ারের অস্থিরতাকে ভাগ করে তুলনামূলক প্রাণবন্ততার সূচকটি পেতে ব্যবহার করা হয় (আরভিআই) ।
এরপরে, আরভিআই-এর জন্য এলেস-ফিশার সূচকের গণনা সূত্র প্রয়োগ করে, সংকেত মান পাওয়া যায়। যখন সংকেত মানটি ট্রিগার মানটি অতিক্রম করে তখন এটি বেশি হয় এবং যখন এটি অতিক্রম করে তখন এটি খালি হয়। এছাড়াও, ঝুঁকি নিয়ন্ত্রণের জন্য স্থির স্টপ লস এবং ট্র্যাকিং স্টপ লস সেট করা হয়।
এই কৌশলটি শেয়ারের গতিশীল বৈশিষ্ট্য এবং এলোমেলো সূচকগুলির সমন্বয় করে, যা বাজারের তুলনামূলক শক্তি এবং দুর্বলতার কার্যকরভাবে বিচার করতে পারে। এলেস-ফিশার সূচকটির নকশাটি গোলমালের প্রভাব হ্রাস করতে পারে এবং আরও নির্ভরযোগ্য ট্রেডিং সংকেত তৈরি করতে পারে। ডায়নামিক সূচকটি শেয়ারের নিজস্ব প্রবণতা এবং অস্থিরতার প্রতিফলন করে, একটি গতিশীল সূচক।
একক গতিশীল বা এলোমেলো সূচক ব্যবহারের তুলনায়, এই কৌশলটি সূচক এবং মডেলের একটি জৈবিক সংমিশ্রণ তৈরি করে, যা সংকেতের গুণমানকে উন্নত করে। কঠোর স্টপ-লস নিয়মের মাধ্যমে এই কৌশলটি লাভজনকতা নিশ্চিত করার জন্য ঝুঁকি নিয়ন্ত্রণ করতে সক্ষম করে।
এই কৌশলটি মূলত ইলেস-ফিশার সূচকের উপর নির্ভর করে, যখন বাজারে হঠাৎ বড় পরিবর্তন হয়, তখন সূচক প্যারামিটারগুলিকে নতুন পরিবেশের সাথে খাপ খাইয়ে নিতে অপ্টিমাইজ করা দরকার। সূচক প্যারামিটারগুলি যদি ভুলভাবে সেট করা হয় তবে ভুল সংকেত বা সংকেত বিলম্বিত হতে পারে।
অন্যদিকে, কৌশল নিজেই একটি নির্দিষ্ট পরিমাণে কার্ভ ফিট করার ঝুঁকি নিয়ে থাকে। পরীক্ষার এবং রিয়েল-টাইম বাজারের পরিস্থিতিতে যদি বড় পরিবর্তন হয় তবে কৌশলটির কার্যকারিতা বড় ধরনের বিচ্যুতি সৃষ্টি করতে পারে। এই সময়ে কৌশলটির প্যারামিটারগুলি সামঞ্জস্য করা বা নতুন বাজারের অবস্থার সাথে খাপ খাইয়ে নেওয়ার জন্য ট্রেডিং নিয়মগুলি অপ্টিমাইজ করা প্রয়োজন।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও উন্নত করা যেতে পারেঃ
এলেস-ফিশার সূচকের প্যারামিটারগুলিকে আরও সংবেদনশীল বা গোলমাল ফিল্টার করার জন্য অনুকূলিত করা হয়েছে।
মেশিন লার্নিং অ্যালগরিদম যেমন এলএসটিএম ব্যবহার করে সূচকগুলি মডেল করা হয়, যা আরও নির্ভরযোগ্য ট্রেডিং সংকেত তৈরি করে।
স্টপ-ড্র্যাপের গতিশীল সমন্বয় করা হয় বাজার ওঠানামা সূচক যেমন 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)