পি-সিগন্যাল মাল্টি টাইমফ্রেম ট্রেডিং কৌশল হল পরিসংখ্যানগত নীতি এবং মাল্টি টাইমফ্রেম বিশ্লেষণের উপর ভিত্তি করে একটি ক্রিপ্টোকারেন্সি অ্যালগরিদমিক ট্রেডিং কৌশল। কৌশলটি বিটকয়েনের দৈনিক, সাপ্তাহিক এবং মাসিক চার্টগুলির সাথে মডেল ফিট করার জন্য গাউসিয়ান ত্রুটি ফাংশন এবং পি-সিগন্যাল সূচক ব্যবহার করে এবং ট্রেডিং অস্থিরতার জন্য 0 এর উপরে সূচক ক্রসগুলিতে দীর্ঘ এবং 0 এর নীচে ক্রসগুলিতে প্রস্থান করে।
পি-সিগন্যাল কৌশলটির মূল সূচক হ'ল পি-সিগন্যাল নিজেই, যা পরিসংখ্যানগত স্ট্যান্ডার্ড ডিভিয়েশন এবং সহজ চলমান গড়কে একত্রিত করে এবং বাজারের স্বাভাবিক বন্টনের সাথে সামঞ্জস্যপূর্ণ কিনা তা সনাক্ত করতে গাউসিয়ান ত্রুটি ফাংশন ব্যবহার করে এটি -1 থেকে 1 পরিসরে ম্যাপ করে। নির্দিষ্ট গণনার সূত্রটি নিম্নরূপঃ
fErf(x) = 1.0 - 1.0/(1.0 + 0.5*abs(x)) * exp(-x*x - 1.26551223 + ...) # Gaussian error function
fPSignal(ser, n) = fErf((stdev(ser, n) > 0 ? sma(ser, n)/stdev(ser, n)/sqrt(2) : 1)) # P-Signal indicator
কৌশলটি বিটকয়েনের জন্য দৈনিক, সাপ্তাহিক এবং মাসিক টাইমফ্রেমগুলিতে পি-সিগন্যাল সূচক গণনা করে, সূচকটি 0 এর উপরে অতিক্রম করার সময় দীর্ঘ যায় এবং 0 এর নীচে ফিরে যাওয়ার সময় প্রস্থান করে। পুনরাবৃত্ত এন্ট্রিগুলি নিয়ন্ত্রণ করতে সূচক মান ভালভগুলিও সেট করা হয়।
পি-সিগন্যাল কৌশলটির সবচেয়ে বড় সুবিধা হ'ল কৌশল স্থিতিশীলতা উন্নত করতে একাধিক সময়সীমার ব্যবহার। দৈনিক চার্টটি স্বল্পমেয়াদী বাজারের ওঠানামা ক্যাপচার করে, যখন সাপ্তাহিক এবং মাসিক চার্টগুলি মিথ্যা ব্রেকআউটগুলি ফিল্টার করে। একই সাথে, পি-সিগন্যাল সূচক নিজেই প্রবণতার চলাচলের ওঠানামা বাড়ানোর জন্য কিছু ভবিষ্যদ্বাণীমূলক ক্ষমতা রাখে।
একটি একক সময়সীমার তুলনায়, একাধিক সময়সীমা উদ্বায়ী সময়ে ড্রডাউন নিয়ন্ত্রণের জন্য দৈনিক স্টপগুলির ব্যবহারের অনুমতি দেয়, যখন ব্যাপ্তি বাজারের সময় উচ্চতর সময়সীমা ব্যবহার করে লেনদেনের ফ্রিকোয়েন্সি হ্রাস করে। সামগ্রিকভাবে, এই সংমিশ্রণটি নিখুঁত এবং আপেক্ষিক ড্রডাউন উভয়ই হ্রাস করার সময় সর্বাধিক লাভের অনুমতি দেয়।
পি-সিগন্যাল কৌশলটির সবচেয়ে বড় ঝুঁকি হ'ল সূচকটি নিজেই কোয়ান্ট ট্রেডারদের কাছে একটি ব্ল্যাক বক্স। নির্দিষ্ট বাজারে এই সূচকের অভিযোজনযোগ্যতা নির্ধারণ করার কোনও উপায় নেই, আমরা এর পরামিতিগুলির সর্বোত্তম পরিসীমাও নির্ধারণ করতে পারি না। এটি লাইভ ট্রেডিংয়ে কৌশলটির দুর্বল পারফরম্যান্সের দিকে পরিচালিত করতে পারে।
উপরন্তু, কৌশল নিজেই কিছু সীমাবদ্ধতা আছে. উদাহরণস্বরূপ, হিংসাত্মক সরানো পরিচালনা করতে অক্ষমতা, সূচক ক্রসওভার থেকে বিলম্ব সংকেত ইত্যাদি. এই সব লাইভ ট্রেডিং সময় লুকানো সমস্যা হতে পারে.
এই সমস্যাগুলি সমাধান করার জন্য, আমরা সূচক পরামিতিগুলি সামঞ্জস্য করতে পারি, স্টপ লস অপ্টিমাইজ করতে পারি, আরও সহায়ক সূচক প্রবর্তন করতে পারি ইত্যাদি। তবে মূলত যথেষ্ট বড় ব্যাকটেস্টিং সময়কালে স্থিতিশীলতা পরীক্ষা করা।
পি-সিগন্যাল কৌশলটি অপ্টিমাইজ করার জন্য বেশ কয়েকটি দিক রয়েছেঃ
পরিবর্তন P-সিগন্যাল সূচক পরামিতিঃ nIntr_D, nIntr_W এবং nIntr_M, অনুকূল পরামিতি সমন্বয় খুঁজে
স্টপ লস পদ্ধতি যোগ করুনঃ ট্রেলিং স্টপ লস, টাইম স্টপ লস, এটিআর স্টপ লস ইত্যাদি, সর্বোত্তম স্টপ লস খুঁজুন
সহায়ক সূচক প্রবর্তন করুনঃ নির্দিষ্ট বাজারের অবস্থার বিচার উন্নত করুন, উদাহরণস্বরূপ ট্রেন্ড নির্ধারণের জন্য MACD ব্যবহার করুন
পজিশন সাইজিং অপ্টিমাইজ করুনঃ অ্যাকাউন্ট ব্যবহারের দক্ষতার ভিত্তিতে গতিশীল অবস্থান সাইজিং সেট করুন
মেশিন লার্নিং অপ্টিমাইজেশানঃ নিউরাল নেটওয়ার্ক, জেনেটিক অ্যালগরিদম ব্যবহার করে বিশ্বব্যাপী সর্বোত্তম পরামিতিগুলি সন্ধান করুন
পি-সিগন্যাল মাল্টি টাইমফ্রেম ট্রেডিং কৌশল সামগ্রিকভাবে একটি খুব আশাব্যঞ্জক কৌশল ধারণা। এটি পরিসংখ্যানগত নীতি এবং প্রযুক্তিগত সূচকগুলিকে একত্রিত করে এবং স্থিতিশীলতা উন্নত করতে মাল্টি টাইমফ্রেম বিশ্লেষণ ব্যবহার করে। যদি আমরা বিস্তৃত ব্যাকটেস্টিং এবং অপ্টিমাইজেশনের মাধ্যমে কিছু সীমাবদ্ধতা সমাধান করতে পারি তবে এটিকে একটি বাস্তব, ব্যবহারযোগ্য ক্রিপ্টোকারেন্সি অ্যালগরিদমিক ট্রেডিং কৌশলতে রূপান্তর করা সম্পূর্ণ সম্ভব।
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 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/ // P-Signal Strategy © Kharevsky // A good strategy should be able to handle backtesting. // @version=4 // ********************************************************************************************************** strategy("P-Signal Strategy:", precision = 3, pyramiding = 3) // // Parameters and const of P-Signal. // nPoints_D = input(title = "Number of D Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.") nPoints_W = input(title = "Number of W Bars", type = input.integer, defval = 4, minval = 4, maxval = 100, group = "Parameters of observation.") nPoints_M = input(title = "Number of M Bars", type = input.integer, defval = 6, minval = 4, maxval = 100, group = "Parameters of observation.") int nIntr_D = nPoints_D - 1 int nIntr_W = nPoints_W - 1 int nIntr_M = nPoints_M - 1 bool bDValveOpen = true bool bWValveOpen = true bool bMValveOpen = true // // Horner's method for the error (Gauss) & P-Signal functions. // fErf(x) => nT = 1.0/(1.0 + 0.5*abs(x)) nAns = 1.0 - nT*exp(-x*x - 1.26551223 + nT*( 1.00002368 + nT*( 0.37409196 + nT*( 0.09678418 + nT*(-0.18628806 + nT*( 0.27886807 + nT*(-1.13520398 + nT*( 1.48851587 + nT*(-0.82215223 + nT*( 0.17087277 )))))))))) x >= 0 ? nAns : -nAns fPSignal(ser, int) => nStDev = stdev(ser, int) nSma = sma(ser, int) fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0) // // Signals for the strategy. // float nPSignal_D = sma(fPSignal(change(ohlc4), nIntr_D), nIntr_D) float ndPSignal_D = sign(nPSignal_D[0] - nPSignal_D[1]) // float nPSignal_W = sma(security(syminfo.tickerid, "W",fPSignal(change(ohlc4), nIntr_W)), nIntr_W) float ndPSignal_W = sign(nPSignal_W[0] - nPSignal_W[1]) // float nPSignal_M = sma(security(syminfo.tickerid, "M",fPSignal(change(ohlc4), nIntr_M)), nIntr_M) float ndPSignal_M = sign(nPSignal_M[0] - nPSignal_M[1]) // // P-Signal plotting. // hline(+1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted) hline(-1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted) plot(nPSignal_D, color = color.blue, style = plot.style_line) // // Multi Frame Strategy // ... Day if(nPSignal_D < 0 and ndPSignal_D > 0 and bDValveOpen) strategy.entry("long_D", strategy.long, 1) bDValveOpen := false if(nPSignal_D > 0 and ndPSignal_D < 0) strategy.close("long_D") bDValveOpen := true // ... Week if(nPSignal_W < 0 and ndPSignal_W > 0 and bWValveOpen) strategy.entry("long_W", strategy.long, 1) bWValveOpen := false if(nPSignal_W > 0 and ndPSignal_W < 0) strategy.close("long_W") bWValveOpen := true // ... Month if(nPSignal_M < 0 and ndPSignal_M > 0 and bMValveOpen) strategy.entry("long_M", strategy.long, 1) bMValveOpen := false if(nPSignal_M > 0 and ndPSignal_M < 0) strategy.close("long_M") bMValveOpen := true // The end.