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