এই কৌশলটি ট্রেন্ড ট্র্যাকিং ট্রেডিং অর্জনের জন্য চ্যানেল এবং গতির সূচকগুলি গণনা করে প্রবণতা গঠনগুলি সনাক্ত করে। বিশেষত, এটি গতির সূচক এবং ভারসাম্য চ্যানেল সূচকগুলিকে একত্রিত করে এবং দীর্ঘমেয়াদী প্রবণতাগুলিতে হস্তক্ষেপ করার জন্য উভয়ই ব্যবহার করে। দীর্ঘ লাভের অঞ্চলগুলিতে লক করার জন্য ভারসাম্য চ্যানেলগুলি ব্যবহার করে।
কৌশলটি মূলত নিম্নলিখিত দুটি সূচককে মূল্যায়নের জন্য ব্যবহার করেঃ
ইম্পোমেন্টাম ইন্ডিকেটর (ডিএমআই): বাজারে দীর্ঘ এবং স্বল্প প্রবণতা বিচার করুন এবং সূচকটি নির্ধারিত প্রান্তিকের চেয়ে বেশি হলে ট্রেডিং সংকেত তৈরি করুন।
ইকুইলেন্সি চ্যানেল (কেল্টনার চ্যানেল): ট্রেন্ড এলাকা নির্ধারণ করুন। যখন দাম উপরের রেলটি ভেঙে যায়, তখন কেনার সময় হয় এবং যখন দাম মাঝের রেলের নীচে পড়ে, তখন এটি অবস্থান বন্ধ করার সংকেত।
নির্দিষ্ট ট্রেডিং লজিক হলঃ যখন + ডিআই গতির সূচক সেট থ্রেশহোল্ডের (ডিফল্ট ৩২) চেয়ে বড় হয়, তখন এটি নির্ধারিত হয় যে একটি উত্থান প্রবণতা গঠিত হয়েছে। এই সময়ে, যদি মূল্য ভারসাম্য চ্যানেলের উপরের রেলটি ভেঙে যায়, তবে একটি ক্রয় সংকেত উত্পন্ন হয়; এর পরে, ভারসাম্য চ্যানেলটি ব্যবহার করা হয়। মধ্য রেলটি স্টপ লস ট্র্যাক করতে এবং লাভ সুরক্ষা অর্জনের জন্য স্টপ লস লাইন হিসাবে ব্যবহৃত হয়।
এই কৌশলটি দুটি সূচকের সুবিধাগুলি একত্রিত করে, প্রবণতার দিকনির্দেশ নির্ধারণের জন্য গতির সূচক ব্যবহার করে এবং প্রবেশের সময় এবং স্টপ লস অঞ্চলগুলি নির্ধারণের জন্য ভারসাম্য চ্যানেল ব্যবহার করে। ডাবল সূচক সংমিশ্রণটি কৌশলটিকে প্রবণতা আবিষ্কারের প্রাথমিক পর্যায়ে দক্ষতার সাথে প্রবেশ করতে দেয়, যখন লাভ এবং স্টপগুলিতে লক করার জন্য চ্যানেল সূচকগুলি ব্যবহার করে।
কৌশলটি বাজারের প্রবণতার প্রাথমিক পর্যায়ে নির্ধারণের জন্য গতির সূচক ব্যবহার করে, যা সহজ চলমান গড়ের মতো পিছিয়ে থাকা সূচকগুলির চেয়ে বেশি দক্ষ।
নির্দিষ্ট ট্রেডিং রেঞ্জ নির্ধারণের জন্য ভারসাম্য চ্যানেল ব্যবহার করে লাভের অঞ্চল কার্যকরভাবে লক করা যায়।
সূচক প্যারামিটার এবং ট্রেডিং নিয়মগুলি কঠোর এবং যুক্তিসঙ্গত, এবং ব্যাকটেস্টের ডেটা ভালভাবে সম্পাদন করে এবং প্রকৃত যুদ্ধের প্রভাব যাচাই করে।
কৌশলটি তুলনামূলকভাবে সহজ এবং পরিষ্কার, সহজেই বোঝা এবং বাস্তবায়ন করা যায় এবং পরিমাণগত ট্রেডিংয়ের শিক্ষানবিশদের জন্য উপযুক্ত।
কৌশলটির ঝুঁকি নিয়ন্ত্রণযোগ্য এবং এটি কার্যকরভাবে একক ক্ষতি নিয়ন্ত্রণ করতে মধ্যম রেখার সাথে গতিশীল স্টপ লস গ্রহণ করে।
কৌশলটি শুধুমাত্র ট্রেন্ডিং মার্কেটের জন্য উপযুক্ত এবং একত্রীকরণ এবং ওঠানামা বাজারের জন্য উপযুক্ত নয়। যদি QtCore চ্যানেল বৃদ্ধি পায় এবং মধ্য রেল স্টপ ক্ষতি খুব আলগা হয়, এটি ক্ষতি নিয়ন্ত্রণ করতে পারে না।
ডিএমআই সূচকটির একটি নির্দিষ্ট বিলম্ব রয়েছে এবং এটি প্রবণতা নিশ্চিতকরণ নির্ধারণ করতে পারে না। এটি প্রবণতার আগে হস্তক্ষেপ করে ক্ষতির কারণ হতে পারে।
ফিক্সড শতাংশ স্টপ লস পদ্ধতিতে ঝুঁকি রয়েছে। এটি একটি ধারালো ওঠানামা পরে প্রবণতা পুনরায় হস্তক্ষেপ করতে অক্ষম, তাই পরবর্তী প্রবণতা মিস।
ব্যাকটেস্টের তথ্য পর্যাপ্ত, কিন্তু বাস্তব ট্রেডিংয়ে প্যারামিটার স্থিতিশীলতা যাচাই করার জন্য দীর্ঘমেয়াদী চলমান এখনও প্রয়োজন।
নির্দিষ্ট শতাংশ স্টপ লস প্রতিস্থাপনের জন্য বিভিন্ন স্টপ লস পদ্ধতি পরীক্ষা করা যেতে পারে, যেমন এটিআর স্টপ লস, চলমান স্টপ লস ইত্যাদি।
প্রবণতা নিশ্চিত হওয়ার পরে প্রবেশ নিশ্চিত করার জন্য ভলিউম পরিবর্ধনের মতো মাধ্যমিক নিশ্চিতকরণ সূচক যুক্ত করা যেতে পারে।
সর্বোত্তম প্যারামিটার সংমিশ্রণ খুঁজে পেতে বিভিন্ন প্যারামিটার সংমিশ্রণ পরীক্ষা করা যেতে পারে।
ধাপে ধাপে অপ্টিমাইজেশান এবং ওয়াক ফরওয়ার্ড টেস্টিংয়ের মাধ্যমে পরামিতিগুলির দৃঢ়তা যাচাই করা যেতে পারে।
এই কৌশলটি ডাবল সূচক রায় ব্যবহার করে প্রবণতা বাজারের দক্ষ ক্যাপচার অর্জন করে। কৌশলটি পরিষ্কার যুক্তি এবং ভাল ব্যাকটেস্ট পারফরম্যান্সের সাথে তুলনামূলকভাবে সহজ এবং স্বজ্ঞাত। এটি পরিমাণগত ট্রেডিংয়ের প্রবেশের কৌশলগুলির মধ্যে একটি হিসাবে কাজ করতে পারে। তবে বাস্তব ট্রেডিং ডেটা এবং পরামিতি অপ্টিমাইজেশনের পর্যাপ্ত যাচাইকরণ এখনও বাস্তব ট্রেডিং ক্ষতি হ্রাস করার জন্য প্রয়োজনীয়। এটি ভবিষ্যতের কাজের কেন্দ্রবিন্দু হবে।
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-11 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Original Idea by: @Wunderbit //@version=4 strategy("Keltner Channel [LINKUSDT] 1H", overlay=true, initial_capital=3000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.1) /// TREND trend_cond = input(true, title="Enable Ribbon Filter") ribbon_period = input(30, "Ribbon Period", step=1) leadLine1 = ema(close, ribbon_period) leadLine2 = sma(close, ribbon_period) // p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1) // p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1) // fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c) //Upward Trend UT=leadLine2 < leadLine1 DT=leadLine2 > leadLine1 ///////////////////////////////////////INDICATORS // KELTNER // source = close useTrueRange = input(true) length = input(80, "KELTNER Period", step=1, minval=1) mult = input(3.0,"KELTNER Multiple", step=0.1) // Calculate Keltner Channel ma = ema(source, length) range = useTrueRange ? tr : high - low rangema = ema(range, length) upper = ma + rangema * mult lower = ma - rangema * mult plot(ma, title="Middle", color=color.orange) p1=plot(upper, title="Upper", color=color.orange) p2=plot(lower, title="Lower", color=color.orange) fill(p1,p2) // DMI INDICATOR // lensig = input(14, title="ADX Smoothing", minval=1, maxval=50) len = input(14, minval=1, title="DI Length") up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / trur) minus = fixnan(100 * rma(minusDM, len) / trur) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) trig_level=input(title="+DI Trigger Level", defval=32, minval=1,step=1) //trig_level_adx=input(title="ADX Trigger Level", defval=30, minval=1,step=1) //plot(adx, color=#FF006E, title="ADX") //plot(plus, color=#0094FF, title="+DI") //plot(minus, color=#FF6A00, title="-DI") // plot(trig_level, color=color.white, title="Key Level") /////////////////////////////////////////////////////////// ////////////////////////////////////////////////////Component Code Start testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false ///// Component Code Stop ////////////////////////////////////////// //////////////// STRATEGY EXECUTION ////////////////////////// // STRATEGY CONDITION // LONG long = ((open > lower and open < upper) and close > upper) and plus > minus and plus > trig_level and volume[0] > volume[1] entry_long = trend_cond ? long and UT : long exit_long = (close < ma) //or low < SL_long //LONG SET UP // Take Profit / Stop Loss entry_price_long=valuewhen(entry_long,close,0) //SL_long = entry_price_long * (1 - long_sl_inp) long_tp1_inp = input(8, title='Long Take Profit 1 Target %', step=0.1)/100 long_tp1_qty = input(20, title="Long Take Profit 1 Qty %", step=1) long_tp2_inp = input(16, title='Long Take Profit 2 Target %', step=0.1)/100 long_tp2_qty = input(30, title="Long Take Profit 2 Qty %", step=1) long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp) long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp) //long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100 //long_stop_level = strategy.position_avg_price * (1 - long_sl_inp) // STRATEGY EXECUTION if testPeriod() // LONG strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTRY LONG COMMAND") strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND") //PLOT FIXED SLTP LINE // LONG POSITION plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit") plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit") //plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")