
এই কৌশলটি স্বয়ংক্রিয়ভাবে মূল অক্ষ এবং ফিবোনাচি রিটার্নের অনুপাতের উপর ভিত্তি করে শেয়ারের দামের এবিসি রেঞ্জ সনাক্ত করে এবং একটি দীর্ঘ বা সংক্ষিপ্ত পজিশন সংকেত দেয়। কৌশলটি মূল অক্ষগুলি ব্যবহার করে শেয়ারের দামের রেঞ্জ নির্ধারণ করে এবং তারপরে এবিসি রেঞ্জের মধ্যে ফিবোনাচি রিটার্নের অনুপাত গণনা করে, যা নির্দিষ্ট শর্ত পূরণ করলে একটি লেনদেনের সংকেত দেয়।
এই কৌশলটি মূলধারার উপর ভিত্তি করে গুরুত্বপূর্ণ সমর্থন ও প্রতিরোধের অঞ্চলগুলি নির্ধারণ করে এবং ফিবোনাচিস প্রত্যাহারের অনুপাত ব্যবহার করে স্বয়ংক্রিয়ভাবে এবিসি ফর্ম্যাটগুলি সনাক্ত করে, যা ব্যাপ্তি পরিবর্তনের সময় দীর্ঘ এবং স্বল্প ব্যবসায়ের সংকেত দেয়। কৌশলটির যুক্তি পরিষ্কার এবং সংক্ষিপ্ত, স্টপ লস সেটিংটি যুক্তিসঙ্গত, যা ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করতে পারে। তবে কিছু ভুল সিদ্ধান্তের ঝুঁকিও রয়েছে, যা আরও বাজারের পরিস্থিতিতে মানিয়ে নেওয়ার জন্য আরও অপ্টিমাইজেশন এবং উন্নতির প্রয়োজন।
/*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)