রিসোর্স লোড হচ্ছে... লোডিং...

ট্রেডিং এবিসি

লেখক:চাওঝাং, তারিখ: ২০২২-০৫-২৩ ১৬ঃ৩৩ঃ০৮
ট্যাগঃএসএমএইএমএ

হ্যালো ট্রেডার,

কয়েক মাস ধরে আমি আমার অনুসারীদের কাছ থেকে এবিসি প্যাটার্ন সম্পর্কে অনুরোধ পেয়েছি এবং অবশেষে আমি এই সূচকটি তৈরি করার সিদ্ধান্ত নিয়েছি।

এটা কিভাবে কাজ করে?

  • এটা তোলে প্রবণতা ক্লাউড সৃষ্টি সহজ এবং এক্সপোনেনশিয়াল চলন্ত গড় ব্যবহার করে দৈর্ঘ্য সঙ্গে 50, 100, 150, 200, 20, 40 ডিফল্টরূপে এবং প্রবণতা চেক. আপনি দৈর্ঘ্য পরিবর্তন করতে পারেন আপনি চান হিসাবে
  • এটি বিকল্পগুলিতে জিগজ্যাগ পিরিয়ড ব্যবহার করে জিগজ্যাগও তৈরি করে।
  • গত 2 zigzag তরঙ্গ ব্যবহার করে এটি প্রবণতা, মিনি / ম্যাক্স ফিবোনাচি মাত্রা এবং ত্রুটি হার অনুযায়ী উপযুক্ত ABC প্যাটার্ন আছে কিনা তা পরীক্ষা করে
  • তারপর এটি পরীক্ষা করে যে এই ABC প্যাটার্নের পরে দাম রিবাউন্স হয়েছে কিনা।
  • এবং যদি এই সব শর্ত পূরণ করা হয় তাহলে এটা ট্র্যাক্ট ত্রিভুজ
  • যদি সেখানে একাধিক ঝাঁপ দেওয়া হয় তাহলে আপনি একাধিক ত্রিভুজ দেখতে পারেন

আপনি পরিবর্তন / সেট করতে পারেন;

  • জিগজ্যাগ সময়কাল
  • ফিবোনাচি ম্যাক্স স্তর
  • ফিবোনাচি মিনি লেভেল
  • ত্রুটির হার
  • চলমান গড়ের জন্য ব্যবহৃত দৈর্ঘ্য
  • পুরাতন এবিসি লাইন/লেবেল রাখা
  • জিগজ্যাগ এবং মিনি/ম্যাক্স ফিবোনাচি স্তর দেখান
  • ট্রেন্ড ক্লাউড দেখান
  • এবং রং

ব্যাকটেস্ট

img


/*backtest
start: 2022-04-22 00:00:00
end: 2022-05-21 23:59:00
period: 30m
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/
// © LonesomeTheBlue

//@version=4
study("Trading ABC", overlay = true, max_bars_back = 500, max_lines_count = 500, max_labels_count = 500)
prd = input(defval = 8, title="ZigZag Period", minval = 2, maxval = 50, group = "Setup")
fiboup = input(defval = 0.618, title = "Fibonacci Max", group = "Setup")
fibodn = input(defval = 0.382, title = "Fibonacci Min", group = "Setup")
errorrate = input(defval = 5.0, title = "Error Rate", minval = 0, maxval = 30, group = "Setup") / 100
showabc = input(defval = true, title = "Show ABC", group = "Extras")
keepabc = input(defval = true, title = "Keep Old ABCs", group = "Extras")
showcloud = input(defval = true, title = "Show Cloud", group = "Extras", inline = "cloud")
c_upcol = input(defval = color.new(color.lime, 75), title = "", group = "Extras", inline = "cloud")
c_dncol = input(defval = color.new(color.red, 75), title = "", group = "Extras", inline = "cloud")
showzigzag = input(defval = true, title = "Show Zig Zag & Fibo", group = "Extras", inline = "zigzag")
upcol = input(defval = color.lime, title = "", group = "Extras", inline = "zigzag")
dncol = input(defval = color.red, title = "", group = "Extras", inline = "zigzag")
srcma = input(defval = close, title = "Source for Moving Averages", group = "Trend Cloud")
malen1 = input(defval = 50, title = "SMA 1 Length", minval = 1, group = "Trend Cloud")
malen2 = input(defval = 100, title = "SMA 2 Length", minval = 1, group = "Trend Cloud")
malen3 = input(defval = 150, title = "SMA 3 Length", minval = 1, group = "Trend Cloud")
malen4 = input(defval = 200, title = "SMA 4 Length", minval = 1, group = "Trend Cloud")
malen5 = input(defval = 20, title = "EMA 1 Length", minval = 1, group = "Trend Cloud")
malen6 = input(defval = 40, title = "EMA 2 Length", minval = 1, group = "Trend Cloud")

ma_array = array.new_float(6)
array.set(ma_array, 0, sma(srcma, malen1))
array.set(ma_array, 1, sma(srcma, malen2))
array.set(ma_array, 2, sma(srcma, malen3))
array.set(ma_array, 3, sma(srcma, malen4))
array.set(ma_array, 4, ema(srcma, malen5))
array.set(ma_array, 5, ema(srcma, malen6))

float umax = na
float umin = na
float lmax = na
float lmin = na
int upper = 0
int lower = 0
for x = 1 to 6
    ma = array.get(ma_array, x -1)
    if ma >= max(open, close)
        upper := upper + 1
        if na(umax)
            umax := ma
            umin := ma
        else
            umax := max(umax, ma)
            umin := min(umin, ma)
    else if ma <= min(open, close)
        lower := lower + 1
        if na(lmax)
            lmax := ma
            lmin := ma
        else
            lmax := max(lmax, ma)
            lmin := min(lmin, ma)

var int trend = 0
trend := lower > 0 and upper == 0 and lower[1] > 0 and upper[1] == 0 ? 1 :
         lower == 0 and upper > 0 and lower[1] == 0 and upper[1] > 0 ? -1 :
         trend
         
tucolor = trend ==  1 ? c_upcol: na
tdcolor = trend == -1 ? c_dncol : na
fill(plot(umax, color = na), plot(umin, color = na), color = showcloud ? tdcolor : na)
fill(plot(lmax, color = na), plot(lmin, color = na), color = showcloud ? tucolor : na)

//===================================================================

// zigzag part
get_ph_pl_dir(len)=>
    float ph = highestbars(high, len) == 0 ? high : na
    float pl = lowestbars(low, len) == 0 ? low : na
    var dir = 0
    dir := iff(ph and na(pl), 1, iff(pl and na(ph), -1, dir))
    [ph, pl, dir]

[ph, pl, dir] = get_ph_pl_dir(prd)

var max_array_size = 10
var zigzag = array.new_float(0)

add_to_zigzag(value, bindex)=>
    array.unshift(zigzag, bindex)
    array.unshift(zigzag, value)
    if array.size(zigzag) > max_array_size
        array.pop(zigzag)
        array.pop(zigzag)
    
update_zigzag(value, bindex)=>
    if array.size(zigzag) == 0
        add_to_zigzag(value, bindex)
    else
        if (dir == 1 and value > array.get(zigzag, 0)) or (dir == -1 and value < array.get(zigzag, 0))
            array.set(zigzag, 0, value)
            array.set(zigzag, 1, bindex)
        0.

dir_changed = change(dir)
if ph or pl
    if dir_changed
        add_to_zigzag(dir == 1 ? ph : pl, bar_index)
    else
        update_zigzag(dir == 1 ? ph : pl, bar_index)

// if showzigzag and array.size(zigzag) > 5
    // var line zzline1 = na
    // var line zzline2 = na
    //line.delete(zzline1)
    //line.delete(zzline2)
   // zzline1 := line.new(x1 = round(array.get(zigzag, 1)) , y1 = array.get(zigzag, 0), x2 = round(array.get(zigzag, 3)), y2 = array.get(zigzag, 2), color = dir == 1 ? upcol : dncol, width = 2, style = line.style_dashed)
    //zzline2 := line.new(x1 = round(array.get(zigzag, 3)) , y1 = array.get(zigzag, 2), x2 = round(array.get(zigzag, 5)), y2 = array.get(zigzag, 4), color = dir == -1 ? upcol : dncol, width = 2, style = line.style_dashed)
    // min/max fibo levels
    // zzlen = abs(array.get(zigzag, 2) - array.get(zigzag, 4))
    // fmin = dir == 1 ? array.get(zigzag, 2) + zzlen * (fibodn - errorrate) : array.get(zigzag, 4) + zzlen * ((1 - fibodn) + errorrate)
    // fmax = dir == 1 ? array.get(zigzag, 2) + zzlen * (fiboup + errorrate) : array.get(zigzag, 4) + zzlen * ((1 - fiboup) - errorrate)
    // var line fibo1 = na
    // var line fibo2 = na
    // line.delete(fibo1)
    // line.delete(fibo2)
    // fibo1 := line.new(x1 = round(array.get(zigzag, 3)), y1 = fmin, x2 = round(array.get(zigzag, 3)) + 1, y2 = fmin, color = color.blue, style = line.style_dashed, extend = extend.right)
    // fibo2 := line.new(x1 = round(array.get(zigzag, 3)), y1 = fmax, x2 = round(array.get(zigzag, 3)) + 1, y2 = fmax, color = color.blue, style = line.style_dashed, extend = extend.right)

zchange = array.size(zigzag) > 0 ? array.get(zigzag, 0) :  0.0
abc = array.new_float(0)
if change(zchange) and array.size(zigzag) > 5 and ((pl and trend == 1  and dir == -1 and low < array.max(ma_array)) or (ph and trend == -1 and dir == 1 and high > array.min(ma_array)))
    a = array.get(zigzag, 0)
    b = array.get(zigzag, 2)
    b_loc = array.get(zigzag, 3)
    c = array.get(zigzag, 4)
    c_loc = array.get(zigzag, 5)
    rate = (a - b) / (c - b)
    if rate >= (fibodn - fibodn * errorrate) and rate <= (fiboup + fiboup * errorrate)
        array.push(abc, b)
        array.push(abc, b_loc)
        array.push(abc, c)
        array.push(abc, c_loc)

// draw_line(dir, x1_,y1_, x2_, y2_, x3_, y3_)=>
//     l1 = line.new(x1 = x1_, y1 = y1_, x2 = x2_, y2 = y2_, color = dir == 1 ? upcol : dncol, width = 2)
//     l2 = line.new(x1 = x2_, y1 = y2_, x2 = x3_, y2 = y3_, color = dir == 1 ? dncol : upcol, width = 2)
//     [l1, l2]

// draw_label(dir, x1_,y1_, x2_, y2_, x3_, y3_)=>
//     alabel = label.new(  x = x1_, 
//                          y = y1_, 
//                          text = "C", 
//                          style = dir == 1 ? label.style_label_down : label.style_label_up, 
//                          color = color.new(color.white, 100),
//                          textcolor = color.blue)
//     blabel = label.new(  x = x2_, 
//                          y = y2_, 
//                          text = "B", 
//                          style = dir == -1 ? label.style_label_down : label.style_label_up, 
//                          color = color.new(color.white, 100),
//                          textcolor = color.blue)
//     clabel = label.new(  x = x3_, 
//                          y = y3_, 
//                          text = "A", 
//                          style = dir == 1 ? label.style_label_down : label.style_label_up, 
//                          color = color.new(color.white, 100),
//                          textcolor = color.blue)
//     [alabel, blabel, clabel]
    
// var abclines = array.new_line(2)
// var abclabels = array.new_label(3)

// if showabc and array.size(abc) >= 4
//     if not keepabc
//         line.delete(array.pop(abclines))
//         line.delete(array.pop(abclines))
//         label.delete(array.pop(abclabels))
//         label.delete(array.pop(abclabels))
//         label.delete(array.pop(abclabels))
        
//     [l1_, l2_] = draw_line(dir, bar_index, array.get(zigzag, 0), round(array.get(abc, 1)),  array.get(abc, 0), round(array.get(abc, 3)), array.get(abc, 2))
//     array.unshift(abclines, l1_)
//     array.unshift(abclines, l2_)
    
//     [la1_, la2_, la3_] = draw_label(dir, bar_index, array.get(zigzag, 0), round(array.get(abc, 1)),  array.get(abc, 0), round(array.get(abc, 3)), array.get(abc, 2))
//     array.unshift(abclabels, la1_)
//     array.unshift(abclabels, la2_)
//     array.unshift(abclabels, la3_)

// bounce?
lbounced = false
sbounced = false
for i = 0 to 5
    if min(low, low[1]) <= array.get(ma_array, i) and close > array.get(ma_array, i) and close > open
        lbounced := true
    if max(high, high[1]) >= array.get(ma_array, i) and close < array.get(ma_array, i) and close < open
        sbounced := true

// stoch give signal?
sto = sma(stoch(close, high, low, 5), 3)
sto_sig = sma(sto, 3)
lstoch = sto[1] <= sto_sig[1] and sto > sto_sig and sto[1] < 50 //and sto_sig > 20
sstoch = sto[1] >= sto_sig[1] and sto < sto_sig  and sto[1] > 50 //and sto_sig < 80

/// check if conditions met
there_is_abc = array.size(abc) != 0
var float last_zz_point = 0.
last_zz_point := array.size(zigzag) > 2 and there_is_abc ? array.get(zigzag, 0) : last_zz_point
var abc_bar_count = 0
abc_bar_count := there_is_abc ? 0 : abc_bar_count + 1
hhh_ = highest(abc_bar_count + 1)
lll_ = lowest(abc_bar_count + 1)

// long condition
long = trend == 1 and abc_bar_count <= 6 and lbounced and lll_ >= last_zz_point
short = trend == -1 and abc_bar_count <= 6 and sbounced and hhh_ <= last_zz_point

plotshape(long,  style = shape.triangleup, color = upcol, location =  location.belowbar, size = size.small)
plotshape(short,  style = shape.triangledown, color = dncol, location =  location.abovebar, size = size.small)

alertcondition(long, title = "ABC Long", message = "ABC Long")
alertcondition(short, title = "ABC Short", message = "ABC Short")


if long
    strategy.entry("Enter Long", strategy.long)
else if short
    strategy.entry("Enter Short", strategy.short)

সম্পর্কিত

আরো