এই কৌশলটি স্বয়ংক্রিয়ভাবে পিভট পয়েন্ট এবং ফিবোনাচি পুনরুদ্ধার অনুপাতের উপর ভিত্তি করে স্টক মূল্যগুলিতে এবিসি প্যাটার্নগুলি সনাক্ত করে এবং দীর্ঘ / সংক্ষিপ্ত সংকেত উত্পন্ন করে। এটি মূল্য তরঙ্গগুলি নির্ধারণ করতে পিভট পয়েন্টগুলি ব্যবহার করে এবং এবিসি তরঙ্গগুলির মধ্যে ফিবোনাচি পুনরুদ্ধার অনুপাতগুলি গণনা করে। যদি অনুপাতগুলি নির্দিষ্ট মানদণ্ড পূরণ করে তবে ট্রেডিং সংকেত উত্পন্ন হয়।
এই কৌশলটি মূল সমর্থন / প্রতিরোধের স্তরগুলির পিভট পয়েন্ট নিশ্চিতকরণের উপর ভিত্তি করে প্রবণতা পাল্টা পয়েন্টগুলিতে দীর্ঘ / সংক্ষিপ্ত সংকেত উত্পন্ন করার জন্য এবিসি প্যাটার্নগুলি সনাক্ত করে। যুক্তিটি সহজ এবং পরিষ্কার, যুক্তিসঙ্গত লাভ / ক্ষতির নিয়মগুলির সাথে যা ঝুঁকিগুলি কার্যকরভাবে নিয়ন্ত্রণ করে। তবে কিছু ভুল মূল্যায়নের ঝুঁকি রয়েছে, আরও বাজারের অবস্থার সাথে খাপ খাইয়ে নেওয়ার জন্য আরও অপ্টিমাইজেশন এবং উন্নতির প্রয়োজন।
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-19 23:59:59 period: 1m basePeriod: 1m 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/ // © kerok3g //@version=5 strategy("ABCD Strategy", shorttitle="ABCDS", overlay=true, commission_value=0.04) calcdev(fprice, lprice, fbars, lbars) => rise = lprice - fprice run = lbars - fbars avg = rise/run ((bar_index - lbars) * avg) + lprice len = input(5) ph = ta.pivothigh(len, len) pl = ta.pivotlow(len, len) var bool ishigh = false ishigh := ishigh[1] var float currph = 0.0 var int currphb = 0 currph := nz(currph) currphb := nz(currphb) var float oldph = 0.0 var int oldphb = 0 oldph := nz(oldph) oldphb := nz(oldphb) var float currpl = 0.0 var int currplb = 0 currpl := nz(currpl) currplb := nz(currplb) var float oldpl = 0.0 var int oldplb = 0 oldpl := nz(oldpl) oldplb := nz(oldplb) if (not na(ph)) ishigh := true oldph := currph oldphb := currphb currph := ph currphb := bar_index[len] else if (not na(pl)) ishigh := false oldpl := currpl oldplb := currplb currpl := pl currplb := bar_index[len] endHighPoint = calcdev(oldph, currph, oldphb, currphb) endLowPoint = calcdev(oldpl, currpl, oldplb, currplb) plotshape(ph, style=shape.triangledown, color=color.red, location=location.abovebar, offset=-len) plotshape(pl, style=shape.triangleup, color=color.green, location=location.belowbar, offset=-len) // var line lnhigher = na // var line lnlower = na // lnhigher := line.new(oldphb, oldph, bar_index, endHighPoint) // lnlower := line.new(oldplb, oldpl, bar_index, endLowPoint) // line.delete(lnhigher[1]) // line.delete(lnlower[1]) formlong = oldphb < oldplb and oldpl < currphb and currphb < currplb longratio1 = (currph - oldpl) / (oldph - oldpl) longratio2 = (currph - currpl) / (currph - oldpl) formshort = oldplb < oldphb and oldphb < currplb and currplb < currphb shortratio1 = (oldph - currpl) / (oldph - oldpl) shortratio2 = (currph - currpl) / (oldph - currpl) // prevent multiple entry for one pattern var int signalid = 0 signalid := nz(signalid[1]) longCond = formlong and longratio1 < 0.7 and longratio1 > 0.5 and longratio2 > 1.1 and longratio2 < 1.35 and close < oldph and close > currpl and signalid != oldplb if (longCond) signalid := oldplb longsl = currpl - ta.tr longtp = ((close - longsl) * 1.5) + close strategy.entry("Long", strategy.long) strategy.exit("Exit Long", "Long", limit=math.min(longtp, oldph), stop=longsl) shortCond = formshort and shortratio1 < 0.7 and shortratio1 > 0.5 and shortratio2 > 1.1 and shortratio2 < 1.35 and close > oldpl and close < currph and signalid != oldphb if (shortCond) signalid := oldphb shortsl = currph + ta.tr shorttp = close - ((shortsl - close) * 1.5) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", "Short", limit=math.max(shorttp, oldpl), stop=shortsl)