এই কৌশলটির মূল ধারণাটি হ'ল প্রবণতা অনুসরণ এবং প্রবণতা বিপরীত ট্রেডিং বাস্তবায়নের জন্য একটি মৌলিক চলমান গড় রেখার সাথে দ্বৈত থ্রাস্ট সূচককে একত্রিত করা। যখন দামটি সূচকের সাথে একই দিকের হয়, তখন প্রবণতা অনুসরণ করুন; যখন দামটি সূচকের বিপরীত দিকের হয়, তখন বিপরীত ট্রেড করুন।
কৌশলটি মূলত তিনটি কাস্টম সূচক উপর ভিত্তি করেঃ
ডুয়াল থ্রাস্ট ইন্ডিকেটর (ট্রেন্ড): 1, 0, -1 তিনটি রাজ্য ফেরত দিয়ে, উত্থান এবং হ্রাস প্রবণতা নির্ধারণের জন্য মূল্য এবং ওভারকুপ / ওভারসোল্ড চ্যানেলের মধ্যে সম্পর্ক গণনা করে।
Overbought/Oversold Channel (Tsl): ATR এর সাথে সম্পর্কিত উপরের এবং নীচের রেলগুলি গণনা করে। উপরের রেলটি ভেঙে ফেলা overbought হিসাবে বিবেচিত হয় এবং নিম্ন রেলটি ভেঙে ফেলা oversold হিসাবে বিবেচিত হয়।
বেসিক মুভিং এভারেজ লাইন (এমএ): ক্লোজিং মূল্যের ২০ পেরিওডের সহজ মুভিং এভারেজ গণনা করে।
বিশেষত, কৌশলটি ডুয়াল থ্রাস্ট সূচকের মান অনুসারে দামটি উত্থান, পাশের দিকে বা হ্রাসের অবস্থায় রয়েছে কিনা তা বিচার করে। যখন ডুয়াল থ্রাস্ট সূচক 1 হয়, তখন এর অর্থ হ্রাসের অবস্থা; যখন ডুয়াল থ্রাস্ট সূচক -1 হয়, এর অর্থ হ্রাসের অবস্থা। এই মুহুর্তে, যদি দামটি সূচকের সাথে একই দিকের হয়, তবে একটি প্রবণতা অনুসরণকারী কৌশল গৃহীত হয়, সঠিক জায়গায় দীর্ঘ বা সংক্ষিপ্ত হয়। যদি দামটি সূচকের বিপরীত দিকে থাকে, যেমন সূচকটি দামের নীচের রেলটি ভেঙে যাওয়ার সময় উত্থান দেখায়, তবে মুনাফা অর্জনের জন্য সংক্ষিপ্ত হয়ে বিপরীত কৌশল গ্রহণ করা হয়।
উপরন্তু, চলমান গড় রেখায় দামের ভাঙ্গনও ট্রেডিংয়ের দিকনির্দেশনা দেওয়ার জন্য একটি সহায়ক সংকেত হিসাবে কাজ করে। যখন দাম গড় রেখার উপরে ভাঙবে তখন দীর্ঘ যান এবং যখন দাম গড় রেখার নীচে ভাঙবে তখন সংক্ষিপ্ত যান।
লং ট্রেডিং এর নির্দিষ্ট কৌশলগুলি নিম্নরূপঃ
ডাবল থ্রাস্ট ইন্ডিকেটর > 0, দাম উপরে রেল মাধ্যমে বিরতি বৃদ্ধি, যা প্রবণতা অনুসরণ, দীর্ঘ যেতে অন্তর্গত।
ডাবল থ্রাস্ট ইন্ডিকেটর < 0, দামের পতন নিম্ন রেল মাধ্যমে বিরতি, যা প্রবণতা বিপরীত হয়, শর্ট যান।
ক্লোজিং প্রাইস > ওপেনিং প্রাইস > পিভট লেভেল, যা লম্বা হওয়ার জন্য পিভট ভাঙ্গার মতো বিবেচিত হয়।
ক্লোজিং প্রাইস আপার রেলের মাধ্যমে ভেঙে যায়, এবং ক্লোজিং প্রাইস > মুভিং এভারেজ লাইন, লম্বা হয়।
শর্ট ট্রেডিং কৌশল নিম্নরূপঃ
ডাবল থ্রাস্ট ইন্ডিকেটর < 0, দাম নিম্ন রেল মাধ্যমে বিরতি পতন, যা প্রবণতা অনুসরণ করে অন্তর্গত, শর্ট যান।
ডাবল থ্রাস্ট ইন্ডিকেটর > 0, দাম উপরে রেল মাধ্যমে বিরতি বৃদ্ধি, যা প্রবণতা বিপরীত হয়, দীর্ঘ যেতে।
খোলার মূল্য > বন্ধের মূল্য < পিভট স্তর, যা শর্ট হওয়ার জন্য পিভট ভাঙ্গার মতো বিবেচিত হয়, শর্ট হয়ে যায়।
ক্লোজিং প্রাইস নিম্ন রেলের মাধ্যমে ভেঙে যায়, এবং ক্লোজিং প্রাইস < মুভিং মিডিয়ার লাইন, শর্ট হয়ে যায়।
প্রস্থান কৌশলটি সহজ, যখন দাম আবারও ওভারকুপ/ওভারসোল্ড চ্যানেলের মধ্য দিয়ে যায় তখন ক্ষতি বন্ধ করে দেওয়া হয়।
এই কৌশলটির নিম্নলিখিত সুবিধা রয়েছে:
ডাবল থ্রাস্ট ইন্ডিকেটর সঠিকভাবে বাজারের প্রবণতা নির্ধারণ করতে পারে এবং এটি কৌশলটির মূল সূচক।
সূচকের সাথে যুক্ত ওভারকুপ/ওভারসোল্ড চ্যানেল সম্ভাব্য বিপরীতমুখী সুযোগগুলি সনাক্ত করতে পারে।
মৌলিক চলমান গড় রেখাটি মিথ্যা ব্রেকআউট এড়ানোর জন্য একটি সহায়ক ফিল্টারিং সংকেত হিসাবে কাজ করতে পারে।
ডুয়াল থ্রাস্ট ইন্ডিকেটরের সাথে যুক্ত পিভট পয়েন্ট উচ্চ সম্ভাব্যতার ট্রেডিং স্পট গঠন করে।
এটিতে ট্রেন্ড অনুসরণ এবং বিপরীত ট্রেডিং উভয়ই রয়েছে।
অতিরিক্ত ক্রয়/অতিরিক্ত বিক্রয় চ্যানেল স্টপ লস সহজ এবং স্পষ্ট, যা ঝুঁকি নিয়ন্ত্রণের জন্য উপকারী।
এই কৌশলটি নিম্নলিখিত ঝুঁকিগুলিও বহন করেঃ
ডাবল থ্রাস্ট ইন্ডিকেটর ভুল সংকেত দিতে পারে, এবং অন্যান্য সূচক দিয়ে ফিল্টার করা প্রয়োজন।
ব্রেকআউট ট্রেডিং ফাঁদে পড়ার প্রবণতা রয়েছে, তাই কঠোর স্টপ লস প্রয়োজন।
ভুল চলমান গড় সময়ের সেটিং প্রবণতা মিস করতে পারে বা মিথ্যা সংকেত তৈরি করতে পারে।
সম্ভাব্যতার নির্ভরযোগ্যতা যাচাই করার জন্য পিভট পয়েন্টগুলির ব্যাকটেস্টিং প্রয়োজন।
অতিরিক্ত ক্রয়/অতিরিক্ত বিক্রয় চ্যানেলের বিভিন্ন পণ্যের সাথে মানিয়ে নিতে পরামিতিগুলির অপ্টিমাইজেশান প্রয়োজন।
সূচক পরামিতিগুলির অসঙ্গতি ঘন ঘন ট্রেডিংয়ের দিকে পরিচালিত করতে পারে।
এই ঝুঁকি মোকাবেলায় নিম্নলিখিত ব্যবস্থা গ্রহণ করা যেতে পারেঃ
অন্যান্য সূচক যেমন K-লাইন, ভলিউম সংমিশ্রণ করুন দ্বৈত থ্রাস্ট সূচক সংকেত যাচাই করতে।
দ্রুত স্টপ লস পাওয়ার জন্য ওভারকুপ/ওভারসোল্ড চ্যানেল স্টপ লস কৌশলটি কঠোরভাবে অনুসরণ করুন।
সর্বোত্তমটি খুঁজে পেতে বিভিন্ন চলমান গড় সময়ের পরামিতি পরীক্ষা করুন।
পিভট পয়েন্ট কৌশল সম্ভাব্যতা পুরোপুরি ব্যাকটেস্ট করুন।
প্রতিটি পণ্যের জন্য সর্বোত্তম সমন্বয় খুঁজে পেতে পরামিতি অপ্টিমাইজ করুন।
সামগ্রিক সিস্টেম সুষ্ঠুভাবে চলতে রাখার জন্য সূচক পরামিতিগুলি সামঞ্জস্য করুন।
কৌশলটি নিম্নলিখিত দিকগুলিতেও অপ্টিমাইজ করা যেতে পারেঃ
মেশিন লার্নিং অ্যালগরিদমকে বড় ডেটা দিয়ে দ্বৈত থ্রাস্ট ইন্ডিকেটরকে প্রশিক্ষণ দেওয়ার জন্য বৃদ্ধি করুন। এটি নির্ভুলতা উন্নত করতে পারে এবং মিথ্যা সংকেত হ্রাস করতে পারে।
বাজারের অস্থিরতার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে চ্যানেল পরামিতিগুলি সামঞ্জস্য করতে অভিযোজিত চ্যানেল যুক্ত করুন। এটি ব্রেকআউট নির্ভুলতা উন্নত করতে পারে।
প্রবেশ ও প্রস্থান কৌশলগুলিকে অনুকূল করার জন্য আরও পরিবর্তনশীল সূচকগুলি বের করার জন্য গভীর শেখার ব্যবহার করুন।
উন্নত স্টপ লস অ্যালগরিদম যোগ করুন যা স্টপ লসের প্রবণতা ট্র্যাক করতে পারে, বিপরীত দ্বারা বন্ধ করা এড়ানো।
সামগ্রিক কৌশল স্থিতিশীলতা উন্নত করতে পরামিতি অপ্টিমাইজেশন এবং সমন্বয় পরীক্ষা পরিচালনা করুন।
আরো বিজ্ঞানসম্মত ঝুঁকি নিয়ন্ত্রণের জন্য ঝুঁকি ব্যবস্থাপনা মডিউল যোগ করুন।
কৌশলটি দ্বৈত থ্রাস্ট সূচক দিয়ে বাজার কাঠামো বিচার করে এবং চ্যানেল এবং চলমান গড় রেখাগুলির সাথে ট্রেডিং সংকেত উত্পন্ন করে প্রবণতা অনুসরণ এবং প্রবণতা বিপরীতকরণকে জৈবিকভাবে একত্রিত করে। এটিতে ভাল সূচক কার্যকারিতা, প্রচুর ট্রেডিং সুযোগ এবং স্পষ্ট স্টপ লস এর সুবিধা রয়েছে। একই সাথে, এটিতে কিছু ঝুঁকি রয়েছে যা স্থিতিশীলতা উন্নত করার জন্য আরও অপ্টিমাইজেশনের প্রয়োজন। সামগ্রিকভাবে, কৌশলটি প্রবণতা ট্রেডিং এবং বিপরীত ট্রেডিংয়ের ধারণাগুলি সম্পূর্ণরূপে সংহত করে এবং আরও গবেষণা এবং প্রয়োগের মূল্যবান।
/*backtest start: 2023-08-25 00:00:00 end: 2023-09-24 00:00:00 period: 2h basePeriod: 15m 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/ // © amysojexson //@version=3 strategy(title="Pivots strategy", overlay=true) // Input settings // Create a pull-down menu for the pivot type pivotType = input(title="Pivot Type", options=["Daily", "Intraday", "Weekly"], defval="Daily") // Make toggles for pivot level options plotPP = input(title="Plot PP", type=bool, defval=true) plotS1R1 = input(title="Plot S1 and R1", type=bool, defval=true) plotS2R2 = input(title="Plot S2 and R2", type=bool, defval=true) plotS3R3 = input(title="Plot S3 and R3", type=bool, defval=true) plotTCBC = input(title="Plot S3 and R3", type=bool, defval=true) // Configure session options sessRange = input(title="Trading Session", defval="0800-1600") showSess = input(title="Highlight Session?", type=bool, defval=false) // Enable or disable pivot labels showLabels = input(title="Show Labels?", type=bool, defval=false) // Step 2. Calculate indicator values // Create a function to fetch daily and weekly data GetData(res, data) => security(syminfo.tickerid, res, data[1], lookahead=barmerge.lookahead_on) // Fetch daily and weekly price data dailyHigh = GetData("D", high) dailyLow = GetData("D", low) dailyClose = GetData("D", close) weeklyHigh = GetData("W", high) weeklyLow = GetData("W", low) weeklyClose = GetData("W", close) // Determine session pivot data // First see how the price bar relates to // the session time range inSession = not na(time(timeframe.period, sessRange)[1]) sessStart = inSession and not inSession[1] sessEnd = not inSession and inSession[1] // Determine session price data sessHigh = 0.0 sessLow = 0.0 sessClose = 0.0 sessHigh := sessStart ? high : inSession ? max(high, sessHigh[1]) : na sessLow := sessStart ? low : inSession ? min(low, sessLow[1]) : na sessClose := sessEnd ? close[1] : na // Compute high, low, close from previous intra-day session highPrevSess = 0.0 lowPrevSess = 0.0 closePrevSess = 0.0 highPrevSess := sessEnd ? fixnan(sessHigh) : highPrevSess[1] lowPrevSess := sessEnd ? fixnan(sessLow) : lowPrevSess[1] closePrevSess := sessEnd ? fixnan(sessClose) : closePrevSess[1] // Now figure out which kind of price data // to use for the pivot calculation theHigh = if (pivotType == "Daily") dailyHigh else if (pivotType == "Intraday") highPrevSess else weeklyHigh theLow = if (pivotType == "Daily") dailyLow else if (pivotType == "Intraday") lowPrevSess else weeklyLow theClose = if (pivotType == "Daily") dailyClose else if (pivotType == "Intraday") closePrevSess else weeklyClose // Finally calculate the pivot levels pp = (theHigh + theLow + theClose) / 3 bc= (theHigh + theLow)/2 tc= (pp-bc)+pp r1 = pp+(.382*(theHigh-theLow)) s1 = pp-(.382*(theHigh-theLow)) r2 = pp +(.618*(theHigh-theLow)) s2 = pp -(.618*(theHigh-theLow)) r3 = pp +(1*(theHigh-theLow)) s3 = pp -(1*(theHigh-theLow)) // Step 3. Output indicator data // Plot the various pivot levels plot(series=plotS3R3 ? r3 : na, title="R3", style=circles, linewidth=1, color=#0023FF) plot(series=plotS2R2 ? r2 : na, title="R2", style=circles, linewidth=1, color=#1E90FF) plot(series=plotS1R1 ? r1 : na, title="R1", style=circles, linewidth=1, color=#09E0F3) plot(series=plotTCBC ? tc : na, title="TC", style=circles, linewidth=.75, color=#FF00D1) plot(series=plotPP ? pp : na, title="PP", style=circles, linewidth=1, color=#000000) plot(series=plotTCBC ? bc : na, title="BC", style=circles, linewidth=.75, color=#FF00D1) plot(series=plotS1R1 ? s1 : na, title="S1", style=circles, linewidth=1, color=#09E0F3) plot(series=plotS2R2 ? s2 : na, title="S2", style=circles, linewidth=1, color=#1E90FF) plot(series=plotS3R3 ? s3 : na, title="S3", style=circles, linewidth=1, color=#0023FF) // Display the pivot names on the chart, if applicable newPivots = (showLabels == false) ? false : (pivotType == "Intraday") ? sessEnd : (pivotType == "Daily") ? dayofmonth != dayofmonth[1] : dayofweek == monday and dayofmonth != dayofmonth[1] plotchar(series=newPivots and plotS3R3 ? r3 : na, char='', text="R3", offset=1, location=location.absolute, color=#0023FF, title="R3 label") plotchar(series=newPivots and plotS2R2 ? r2 : na, char='', text="R2", offset=1, location=location.absolute, color=#1E90FF, title="R2 label") plotchar(series=newPivots and plotS1R1 ? r1 : na, char='', text="R1", offset=1, location=location.absolute, color=#09E0F3, title="R1 label") plotchar(series=newPivots and plotTCBC ? r1 : na, char='', text="TC", offset=1, location=location.absolute, color=#FF00D1, title="TC label") plotchar(series=newPivots and plotTCBC ? r1 : na, char='', text="BC", offset=1, location=location.absolute, color=#FF00D1, title="BC label") plotchar(series=newPivots and plotS1R1 ? s1 : na, char='', text="S1", offset=1, location=location.absolute, color=#09E0F3, title="S1 label") plotchar(series=newPivots and plotS2R2 ? s2 : na, char='', text="S2", offset=1, location=location.absolute, color=#1E90FF, title="S2 label") plotchar(series=newPivots and plotS3R3 ? s3 : na, char='', text="S3", offset=1, location=location.absolute, color=#0023FF, title="S3 label") // Highlight the intra-day price data session on the chart bgcolor(color=showSess and inSession and (pivotType == "Intraday") ? orange : na, transp=95) // Step 4. Create indicator alerts alertcondition(condition=cross(close, s3), title="Pivot S3 Cross", message="Prices crossed Pivot S3 level") alertcondition(condition=cross(close, s2), title="Pivot S2 Cross", message="Prices crossed Pivot S2 level") alertcondition(condition=cross(close, s1), title="Pivot S1 Cross", message="Prices crossed Pivot S1 level") alertcondition(condition=cross(close, tc), title="Pivot TC Cross", message="Prices crossed Pivot TC level") alertcondition(condition=cross(close, pp), title="Pivot PP Cross", message="Prices crossed the main Pivot Point level") alertcondition(condition=cross(close, bc), title="Pivot BC Cross", message="Prices crossed Pivot BC level") alertcondition(condition=cross(close, r1), title="Pivot R1 Cross", message="Prices crossed Pivot R1 level") alertcondition(condition=cross(close, r2), title="Pivot R2 Cross", message="Prices crossed Pivot R2 level") alertcondition(condition=cross(close, r3), title="Pivot R3 Cross", message="Prices crossed Pivot R3 level") MA = sma(close, 20) plot(MA, color=red) Factor = input(2, type=float) Pd = input(10, minval=1,maxval = 100) Up = hl2-(Factor*atr(Pd)) Dn = hl2+(Factor*atr(Pd)) TrendUp = 0.0 TrendUp := close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown = 0.0 TrendDown := close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn Trend = 0.0 Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1) Tsl = Trend==1? TrendUp: TrendDown plot(Tsl, color=blue) if close>open if open<pp if close>pp if close>MA strategy.entry("long", true) if close<open if open>pp if close<pp if close<MA strategy.entry("short", false) strategy.close("long", when = open<Tsl) strategy.close("short", when = open>Tsl)