এই কৌশলটির মূল ধারণা হ'ল দামের প্রবণতার দিক নির্ধারণ করতে এবং ব্রেকআউট বিচারের সাথে সংমিশ্রণে ট্রেডিং সংকেত উত্পন্ন করতে গতিশীল ঢাল ব্যবহার করা। বিশেষত, এটি গতিশীল ঢাল গণনা করার জন্য বিভিন্ন সময়ের মধ্যে দামের পরিবর্তনের উপর ভিত্তি করে রিয়েল টাইমে মূল্যের উচ্চ এবং নিম্ন ট্র্যাক করে এবং তারপরে প্রবণতার রেখাগুলির বিরুদ্ধে দামের ব্রেকআউটের ভিত্তিতে দীর্ঘ এবং সংক্ষিপ্ত সংকেত নির্ধারণ করে।
এই কৌশলটির প্রধান ধাপগুলো হল:
সর্বোচ্চ এবং সর্বনিম্ন মূল্য বিচার করুন: একটি নির্দিষ্ট চক্রের (যেমন 20 বার) সর্বোচ্চ এবং সর্বনিম্ন মূল্যগুলি ট্র্যাক করুন যাতে একটি নতুন উচ্চ বা নিম্ন পৌঁছেছে কিনা তা নির্ধারণ করা যায়।
গতিশীল ঢাল গণনা করুনঃ যখন নতুন উচ্চ বা নিম্ন পয়েন্ট পাওয়া যায় তখন বার নম্বরটি রেকর্ড করুন এবং একটি নির্দিষ্ট চক্রের পরে নতুন উচ্চ / নিম্ন পয়েন্ট থেকে উচ্চ / নিম্ন পয়েন্ট পর্যন্ত গতিশীল ঢাল গণনা করুন (উদাহরণস্বরূপ 9 বার) ।
ট্রেন্ড লাইনগুলি গ্রাফ করুনঃ গতিশীল ঢালের উপর ভিত্তি করে উত্থান এবং পতনের প্রবণতা লাইনগুলি গ্রাফ করুন।
প্রবণতা রেখা প্রসারিত এবং আপডেট করুন: যখন মূল্য প্রবণতা রেখা অতিক্রম করে, প্রবণতা রেখা প্রসারিত এবং আপডেট করুন।
ট্রেডিং সিগন্যালঃ ট্রেন্ড লাইনের বিপরীতে দামের ব্রেকআউটের ভিত্তিতে লং এবং শর্ট সিগন্যাল নির্ধারণ করুন।
এই কৌশলটির সুবিধাগুলির মধ্যে রয়েছেঃ
বাজারের পরিবর্তনের প্রতিক্রিয়ায় নমনীয়তার জন্য গতিশীলভাবে প্রবণতা দিক নির্ধারণ করুন।
যুক্তিসঙ্গতভাবে স্টপগুলি নিয়ন্ত্রণ করুন এবং ড্রাউনডাউনগুলিকে সর্বনিম্ন করুন।
স্পষ্ট ট্রেডিং সিগন্যাল যা বাস্তবায়ন করা সহজ।
শক্তিশালী অভিযোজনযোগ্যতার জন্য কাস্টমাইজযোগ্য পরামিতি।
পরিষ্কার কোড কাঠামো যা বোঝা এবং আরও বিকাশ করা সহজ।
এই কৌশলটির সাথে কিছু ঝুঁকিও রয়েছেঃ
প্রবণতা পরিসীমা সীমাবদ্ধ হলে ঘন ঘন লং এবং শর্টস। ফিল্টার শর্ত যোগ করুন।
প্যারামিটার ঠিক করুন অথবা ফিল্টার যোগ করুন।
যখন বাজারে মারাত্মক পরিবর্তন হয়, তখন স্টপ লস ঝুঁকি বাড়ান।
সীমিত অপ্টিমাইজেশান স্পেস এবং লাভের সম্ভাবনা, স্বল্পমেয়াদী ট্রেডিংয়ের জন্য উপযুক্ত।
কৌশলটি অপ্টিমাইজ করার ক্ষেত্রগুলির মধ্যে রয়েছেঃ
ফিল্টার সিগন্যাল হিসাবে আরো প্রযুক্তিগত সূচক যোগ করুন।
সেরা প্যারামিটার জন্য প্যারামিটার সমন্বয় অপ্টিমাইজ করুন।
ঝুঁকি কমাতে স্টপ লস কৌশল উন্নত করার চেষ্টা করুন।
স্বয়ংক্রিয়ভাবে প্রবেশ মূল্য পরিসীমা সামঞ্জস্য করার জন্য কার্যকারিতা যোগ করুন।
আরও সুযোগ খুঁজে পেতে অন্য কৌশলগুলির সাথে একত্রিত করার চেষ্টা করুন।
সামগ্রিকভাবে, এটি একটি কার্যকর স্বল্পমেয়াদী কৌশল যা প্রবণতা এবং ট্রেডিং ব্রেকআউট নির্ধারণের জন্য গতিশীল ঢাল ব্যবহারের উপর ভিত্তি করে। এটিতে সঠিক বিচার, নিয়ন্ত্রণযোগ্য ঝুঁকি রয়েছে এবং বাজারে স্বল্পমেয়াদী সুযোগগুলি ক্যাপচার করার জন্য উপযুক্ত। পরামিতিগুলিতে আরও অপ্টিমাইজেশন এবং ফিল্টার যুক্ত করা জয়ের হার এবং লাভজনকতা উন্নত করতে পারে।
/*backtest start: 2024-01-06 00:00:00 end: 2024-01-19 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/ // © pune3tghai //Originally posted by matsu_bitmex //tried adding alerts on plots and cleared the chart for a cleaner view. //Publishing the script in hope of getting it improved by someone else. //Added strategy code for easier calculations //Needs work on TP and SL part. //P.S - THE ORIGINAL CODE IS MUCH BETTER BUT I have tried to be more usable and understandable. //@version=4 strategy("TrendLines with Alerts", overlay=true) //study("TrendLines with Alerts", overlay=true) //update length1 = input(20) check = input(9) //length2 = input(200) u=0.0 u := u[1] l=0.0 l := l[1] y=0.0 y := y[1] yl=0.0 yl := yl[1] angle = 0.0 angle := angle[1] anglel = 0.0 anglel := anglel[1] if (highest(length1) == high[check] and highest(length1) == highest(length1)[check] and barssince(barstate.isfirst) > check) u := high[check] if (lowest(length1) == low[check] and lowest(length1) == lowest(length1)[check] and barssince(barstate.isfirst) > check) l := low[check] p = round(barssince(u == high[check])) pl = round(barssince(l == low[check])) if p == 0 and barssince(barstate.isfirst) > check y := high[abs(p[1]+1+check)] if pl == 0 and barssince(barstate.isfirst) > check yl := low[abs(pl[1]+1+check)] if p == 0 angle := (u-y)/p[1] if pl == 0 anglel := (l-yl)/pl[1] uppertrend = u+ (p * angle) lowertrend = l+ (pl * anglel) extendup = if barssince(barstate.isfirst) > check uppertrend[check] + angle[check] * check*2 extenddown = if barssince(barstate.isfirst) > check lowertrend[check] + anglel[check] * check*2 //plot(l[offset]-u,color=red) //plot(u[offset]-l,color = green ) plot(lowertrend, color = color.green, transp=30,offset = -check) plot(extenddown, color = color.green, transp=100) plot(uppertrend, color = color.red, transp=30, offset = -check) plot(extendup, color = color.red, transp=100) //plot(l[offset], color = red) l1 = lowertrend l2 = extenddown u1 = uppertrend u2 = extendup l2sell = crossunder(high, l2) u2buy = crossover(low, u2) buy1 = (low<=lowertrend) and open>lowertrend and high>lowertrend and close>lowertrend buy2 = (low<=extenddown) and open>extenddown and high>extenddown and close>extenddown buy = buy1 or buy2 or u2buy plotshape(series=buy, title="Buy", style=shape.triangleup, size=size.tiny, color=color.lime, location=location.belowbar) sell1 = (high>=uppertrend) and open<uppertrend and low<uppertrend and close<uppertrend sell2 = (high>=extendup) and open<extendup and low<extendup and close<extendup sell = sell1 or sell2 or l2sell plotshape(series=sell, title="Sell", style=shape.triangledown, size=size.tiny, color=color.red, location=location.abovebar) longCond = buy shortCond = sell tp = input(0.2, title="Take Profit") tpbuyval = valuewhen(buy, close, 1) + (tp/100)*(valuewhen(buy, close, 1)) tpsellval = valuewhen(sell, close, 1) - (tp/100)*(valuewhen(sell, close, 1)) sl = input(0.2, title="Stop Loss") slbuyval = valuewhen(buy, close, 0) - (sl/100)*(valuewhen(buy, close, 0)) slsellval = valuewhen(sell, close, 0) + (sl/100)*(valuewhen(sell, close, 0)) // === STRATEGY === tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"]) // stop loss slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0) tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0) //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>// testStartYear = input(2019, "Backtest Start Year", minval=1980) testStartMonth = input(1, "Backtest Start Month", minval=1, maxval=12) testStartDay = input(1, "Backtest Start Day", minval=1, maxval=31) testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0) testStopYear = input(9999, "Backtest Stop Year", minval=1980) testStopMonth = input(12, "Backtest Stop Month", minval=1, maxval=12) testStopDay = input(31, "Backtest Stop Day", minval=1, maxval=31) testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<// // //set up exit parameters TP = tpPoints > 0 ? tpPoints : na SL = slPoints > 0 ? slPoints : na // Make sure we are within the bar range, Set up entries and exit conditions if testPeriod() and tradeType != "NONE" strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT") strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG") strategy.close("long", when=shortCond == true and tradeType == "LONG") strategy.close("short", when=longCond == true and tradeType == "SHORT") strategy.exit("XL", from_entry="long", profit=tpbuyval, loss=slbuyval) strategy.exit("XS", from_entry="short", profit=tpsellval, loss=slsellval) // === /STRATEGY === //EOF ////ALERT SYNTEX //alertcondition(longCond, title="Long", message="Killer Market") //alertcondition(shortCond, title="Short", message="Poopy Market")