ٹریڈنگ اے بی سی

مصنف:چاؤ ژانگ، تاریخ: 2022-05-23 16:33:08
ٹیگز:ایس ایم اےای ایم اے

ہیلو تاجروں،

کچھ مہینوں سے مجھے اپنے پیروکاروں سے اے بی سی پیٹرن کے بارے میں درخواستیں مل رہی ہیں اور آخر میں میں نے یہ اشارے بنانے کا فیصلہ کیا۔

یہ کیسے کام کرتا ہے؟

  • یہ تخلیق کرتا ہے رجحان کلاؤڈ سادہ اور exponential چلتی اوسط کے ساتھ طول و عرض کے ساتھ 50, 100, 150, 200, 20, 40 ڈیفالٹ کی طرف سے اور رجحان کی جانچ پڑتال کرتا ہے. آپ کی خواہش کے طور پر لمبائی تبدیل کر سکتے ہیں
  • یہ بھی اختیارات میں ZigZag مدت کا استعمال کرتے ہوئے ZigZag تخلیق کرتا ہے.
  • آخری 2 زگ زگ لہروں کا استعمال کرتے ہوئے یہ چیک کرتا ہے کہ آیا رجحان کے مطابق مناسب اے بی سی پیٹرن موجود ہے، Min / Max فبونیکی کی سطح اور غلطی کی شرح
  • اس کے بعد یہ چیک کرتا ہے کہ قیمت اس 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)

متعلقہ

مزید