conversion d’un indicateur tradingview Bjorgum Double Tap
Forums › ProRealTime forum Français › Support ProBuilder › conversion d’un indicateur tradingview Bjorgum Double Tap
- This topic has 1 reply, 2 voices, and was last updated 5 months ago by Iván.
-
-
02/07/2023 at 8:15 AM #209270
This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bjorgum// ________________________________________________________________
// |\______________________________________________________________/|
// || ________________ ||
// || ___ __ )_____(_)___________________ ____ ________ ___ ||
// || __ __ |____ /_ __ \_ ___/_ __/ / / /_ __
__ \ ||
// || _ /_/ /____ / / /_/ / / _ /_/ // /_/ /_ / / / / / ||
// || /_____/ ___ / \____//_/ _\__, / \__,_/ /_/ /_/ /_/ ||
// || /___/ /____/ ||
// ||______________________________________________________________||
// |/______________________________________________________________\|//@version=5
// @strategy_alert_message {{strategy.order.alert_message}}strategy(
title = “Bjorgum Double Tap”,
shorttitle = “Bj Double Tap”,
overlay = true,
max_lines_count = 500,
max_labels_count = 500,
precision = 3,
default_qty_type = strategy.cash,
commission_value = 0.04,
commission_type = strategy.commission.percent,
slippage = 1,
currency = currency.USD,
default_qty_value = 1000,
initial_capital = 1000)// ══════════════════════════════════ //
// —————> Immutable Constants <—————— // // ══════════════════════════════════ // string useStratTip = “Enables or disables the strategy tester allowing a change between either an indicator or a strategy.” string dLongTip = “Detect long setups.” string dShortTip = “Detect short setups.” string FLIPTip = “Allow entry in the opposite bias while already in a position.” string startTip = “Start date & time to begin backtest period. Useful for beginning new bot. eg. Set time to now to make broker emulator in a flat position with the proper starting captial before setting alerts” string endTip = “End date & time to stop searching for setups for back testing.” string tolTip = “The difference in height allowable for the signifcant points of the pattern expressed as a percent of the pattern height. Example: The points can vary in height by 15% of the pattern height from one another.” string lenTip = “The length used to calcuate significant points to form pivots for pattern detection. Example: The highest or lowest point in 50 bars.” string fibTip = “The fib target extension projected from the neckline of the pattern in the direction of the pattern bias expressed as a percent. Example: 100% is a 1:1 measurment of the height from the pattern neckline.” string stopPerTip = “The fib extension of the pattern height measured from the point of invalidation. Example: 0% would be the high point of a double top. 50% would be halfway between the top and the neckline.” string offsetTip = “The number of bars lines are extended into the future during an ongoing pattern.” string atrStopTip = “Enables an ATR trailing stop once the target extension is breached. NOTE: This disables a take profit order in the strategy format.” string atrLenTip = “The number of bars used in the ATR calculation.” string atrMultTip = “The multiplier of the ATR value to subtract from the swing low or swing high point. Example: 1 is 100% of the ATR, 2 is 2x the ATR value.” string lookbackTip = “The number of bars to look back to find a swing high or swing low to be used in the trailing stop calculation. Example: 1 ATR subtracted from the lowest point in 5 bars. 1 would use the lowest point within the last bar.” string tableTip = “Show the data table for trade limit levels during an active trade. (table will only show when a pattern is present on the chart, or in bar replay).” string labelTip = “Updates the double top/bottom label with ‘Success’ or ‘Failure’ and updates color based on the outcome of the pattern.” string thirdTip = “Where would you like to send your alerts?” string pPhraseTip = “A custom passphrase to authenticate your json message with a touch more security.” string aTronKeyTip = “The name of your Alertatron API keys. (Add the ticker in brackets). Example: MyKeys(XBTUSD).” string tickerTip = “The ticker to be traded when using Trading Connector” string LongTip = “3Commas start long deal bot keys.” string LongEndTip = “3Commas end long deal bot keys.” string ShortTip = “3Commas start short deal bot keys.” string ShortEndTip = “3Commas end short deal bot keys.” string dt = “Double Top” string db = “Double Bottom” string suc = ” – Success” string fail = ” – Failure” string winStr = “Target reached! 💰” string loseStr = “Stopped out… 🤷♂” string tabPerc = “{0, number, #.##}\n({1, number, #.##}%)” string tcStop = “slmod slprice={0} tradeid={1}” string dExit = “‘{‘\”content\”: \”Bjorgum {0}\\n\\n\\t'{{ticker}}' '{{interval}}'\\n\\n\\t{1}
\”‘}'” string S1 = “tiny” , string P1 = “top” string S2 = “small” , string P2 = “middle” string S3 = “normal” , string P3 = “bottom” string S4 = “large” , string P4 = “left” string S5 = “huge” , string P5 = “center” string S6 = “auto” , string P6 = “right” var string tnB = “” , string A1 = “Custom Json” string altStr = “” , string A2 = “Trading Connector” string tUp = “” , string A3 = “Alertatron” string dCordWin = “” , string A4 = “3Commas” string dCordLose = “” , string A5 = “Discord” float pos = strategy.position_size int sync = bar_index bool confirm = barstate.isconfirmed var int dir = na var float lmt = na var float stp = na string altExit = na bool FLAT = pos == 0 bool LONG = pos > 0
bool SHORT = pos < 0
var int tradeId = 0color col1 = color.new(#b2b5be, 15)
color col2 = color.new(#b2b5be, 87)
color col3 = color.new(#ffffff, 0)
color col4 = color.new(#17ff00, 15)
color col5 = color.new(#ff0000, 15)
color col6 = color.new(#ff5252, 0)var matrix logs = matrix.new (5, 3)
var line [] zLines = array.new_line (5)
var line [] tLines = array.new_line (5)
var line [] bLines = array.new_line (5)
var label[] bullLb = array.new_label ()
var label[] bearLb = array.new_label ()int timeStart = timestamp(“01 Jan 2000”)
int timeEnd = timestamp(“01 Jan 2099”)// ══════════════════════════════════ //
// —————————> User Input <——————————— // // ══════════════════════════════════ // string GRP1 = “════ Detection and Trade Parameters ════” bool useStrat = input.bool (true , “Use Strategy” , group= GRP1, tooltip= useStratTip) bool dLong = input.bool (true , “Detect Bottoms” , group= GRP1, tooltip= dLongTip ) bool dShort = input.bool (true , “Detect Tops” , group= GRP1, tooltip= dShortTip ) bool FLIP = input.bool (true , “Flip Trades” , group= GRP1, tooltip= FLIPTip ) float tol = input.float (15 , “Pivot Tolerance” , group= GRP1, tooltip= tolTip , minval= 1) int len = input.int (50 , “Pivot Length” , group= GRP1, tooltip= lenTip , minval= 1) float fib = input.float (100 , “Target Fib” , group= GRP1, tooltip= fibTip , minval= 0) int stopPer = input.int (0 , “Stop Loss Fib” , group= GRP1, tooltip= stopPerTip ) int offset = input.int (30 , “Line Offset” , group= GRP1, tooltip= offsetTip , minval= 0) string GRP2 = “═══════════ Time Filter ═══════════” int startTime = input.time(timeStart , “Start Filter” , group= GRP2, tooltip= startTip) int endTime = input.time(timeEnd , “End Filter” , group= GRP2, tooltip= endTip ) string GRP3 = “══════════ Trailing Stop ══════════” bool atrStop = input.bool (false , “Use Trail Stop” , group= GRP3, tooltip= atrStopTip ) int atrLength = input.int (14 , “ATR Length” , group= GRP3, tooltip= atrLenTip , minval= 1) float atrMult = input.float (1 , “ATR Multiplier” , group= GRP3, tooltip= atrMultTip , minval= 0) int lookback = input.int (5 , “Swing Lookback” , group= GRP3, tooltip= lookbackTip, minval= 1) string GRP5 = “════════════ Colors ════════════” color col = input.color (col1 , “Lines ” , group= GRP5, inline= “41”) color zCol = input.color (col3 , “Patterns ” , group= GRP5, inline= “42”) int hWidth = input.int (1 , “” , group= GRP5, inline= “41”, minval= 1) int zWidth = input.int (1 , “” , group= GRP5, inline= “42”, minval= 1) color colf = input.color (col2 , “Stop Fill” , group= GRP5) color tCol = input.color (col4 , “Target Color” , group= GRP5) color sCol = input.color (col5 , “Stop Color” , group= GRP5) color trailCol = input.color (col6 , “Trail Color” , group= GRP5) string GRP6 = “═════════ Table and Label ═════════” bool showTable = input.bool (true , “Show Table” , group= GRP6, tooltip= tableTip) bool setLab = input.bool (true , “Update Label” , group= GRP6, tooltip= labelTip) string labSize = input.string(“small” , “Label Text Size” , group= GRP6, options= [S1, S2, S3, S4, S5, S6]) string textSize = input.string(“normal” , “Table Text Size” , group= GRP6, options= [S1, S2, S3, S4, S5, S6]) string tableYpos = input.string(“bottom” , “Table Position” , group= GRP6, options= [P1, P2, P3]) string tableXpos = input.string(“right” , “” , group= GRP6, options= [P4, P5, P6]) string GRP7 = “══════════ Alert Strings ══════════” string thirdParty = input.string(A1 , “3rd Party” , group= GRP7, tooltip= thirdTip, options= [A1, A2, A3, A4, A5]) string pPhrase = input.string(“1234” , “Json Passphrase” , group= GRP7, tooltip= pPhraseTip ) string aTronKey = input.string(“myKeys” , “Alertatron Key” , group= GRP7, tooltip= aTronKeyTip) string tcTicker = input.string(“” , “TC Ticker” , group= GRP7, tooltip= tickerTip ) string c3Long = input.string(“” , “3Comma Long” , group= GRP7, tooltip= LongTip ) string c3LongEnd = input.string(“” , “3Comma Long End” , group= GRP7, tooltip= LongEndTip ) string c3Short = input.string(“” , “3Comma Short” , group= GRP7, tooltip= ShortTip ) string c3ShortEnd = input.string(“” , “3Comma Short End”, group= GRP7, tooltip= ShortEndTip) // ══════════════════════════════════ // // ————> Variable Calculations <————— // // ══════════════════════════════════ // bool dif = stopPer != 0 int set = sync + offset float atr = ta.atr (14) float sLow = ta.lowest (lookback) – (atr * atrMult) float sHigh = ta.highest (lookback) + (atr * atrMult) float pivHigh = ta.highest (len) float pivLows = ta.lowest (len) float hbar = ta.highestbars (len) float lbar = ta.lowestbars (len) // ══════════════════════════════════ // // ———> Functional Declarations <———— // // ══════════════════════════════════ // High(m) =>
float result = (m == 1 ? high : low)Low(m) =>
float result = (m == 1 ? low : high)perD(_p) =>
float result = (_p – close) / close * 100_coords(_x, _i) =>
x = matrix.get (_x, _i, 0)
y = matrix.get (_x, _i, 1)
[int(x), y]_arrayLoad(_x, _max, _val) =>
array.unshift (_x, _val)
if array.size (_x) > _max
array.pop (_x)_matrixPush(_mx, _max, _row) =>
matrix.add_row(_mx, matrix.rows (_mx), _row)
if matrix.rows (_mx) > _max
matrix.remove_row (_mx, 0)_mxLog(_cond, _x, _y) =>
float[] _row = array.from (sync, _y, 0)
if _cond
_matrixPush (_x, 5, _row)_mxUpdate(_cond, _dir, _x, y) =>
int m = _dir ? 1 : -1
int _end = matrix.rows (_x) -1
if _cond and y * m > matrix.get (_x, _end, 1) * m
matrix.set (_x, _end, 0, sync)
matrix.set (_x, _end, 1, y)_extend(_x, _len) =>
for l in _x
line.set_x2(l, _len)_hLine(_l, x2, y2, y3, y4, y5, _t) =>
line l1 = line.new (x2 , y2, set, y2, color= col, width= hWidth)
line l2 = line.new (x2 , y4, set, y4, color= col, width= hWidth)
array.set (_l , 3, l1)
array.set (_l , 2, l2)
array.set (_l , 1, line.new (x2 , y3, set, y3, color= col, width= hWidth))
array.set (_l , 0, line.new (sync-1, _t, set, _t, color= col, width= hWidth))
linefill.new (l1 , l2, colf)
if stopPer != 0
array.set (_l, 4, line.new (sync-1, y5, set, y5, color= col, width= hWidth))_zLine(x1, y1, x2, y2, x3, y3, x4, y4) =>
array.set (zLines, 3, line.new (x1, y1, x2 , y2 , color= zCol, width= zWidth))
array.set (zLines, 2, line.new (x2, y2, x3 , y3 , color= zCol, width= zWidth))
array.set (zLines, 1, line.new (x3, y3, x4 , y4 , color= zCol, width= zWidth))
array.set (zLines, 0, line.new (x4, y4, sync, close, color= zCol, width= zWidth))_label(x, y, m) =>
m > 0 ?
_arrayLoad (bearLb, 1, label.new (x, y, dt, color= color(na), style= label.style_label_down, textcolor= col, size= labSize)) :
_arrayLoad (bullLb, 1, label.new (x, y, db, color= color(na), style= label.style_label_up, textcolor= col, size= labSize))_labelUpdate(_x, _y, m) =>
if (_x or _y) and setLab
label lab = array.get (m > 0 ? bearLb : bullLb, 0)
string oStr = (m > 0 ? dt : db)
string nStr = oStr + (_x ? suc : fail)
label.set_text (lab, nStr)
label.set_textcolor (lab, _x ? tCol : sCol)_atrTrail(_cond, _lt, _s, m) =>
var float _stop = na
var bool _flag = na
var bool _trail = na
_flag := _cond
_stop := _s
_trail := _flag ? false : _trail
if atrStop and useStrat
if _lt
_flag := false
_trail := true
_stop := m == -1 ? _lt ? sLow : math.max(_stop, sLow) : _stop
_stop := m == 1 ? _lt ? sHigh : math.min(_stop, sHigh) : _stop
if High(m) * m > _stop * m
_flag := true
_trail := false
[_flag, _stop, _trail]_inTrade(_cond, _x, _e, m) =>
var bool _flag = na
var float _stop = na
var float _limit = na
line l1 = array.get (_x, 0)
float lp = line.get_price(l1, sync)
line l2 = array.get (_x, dif ? 4 : 2)
float ls = line.get_price(l2, sync)
bool win = Low (m) * m <= lp * m and not _e bool lose = High(m) * m >= ls * m and not _e
_flag := _cond
_stop := _e ? ls : _stop
_limit := _e ? lp : _limit
if win or lose
_flag := true
_extend (_x , sync)
_labelUpdate (win , lose, m)
line.set_color (win ? l1 : l2, win ? tCol : sCol)
array.fill (_x , na)
array.fill (zLines, na)
[_f, _s, _t] = _atrTrail (_flag , win , _stop, m)
_flag := atrStop ? _f : _flag
_stop := _t and _s * m < _stop * m and confirm ? _s : _stop [_flag, _stop, _t, _limit] _double(_cond, _l, _x, m) =>
var bool _flag = na
int _rows = matrix.rows (_x)
_flag := _cond
if _flag
[x1, y1] = _coords (_x , _rows – 5)
[x2, y2] = _coords (_x , _rows – 4)
[x3, y3] = _coords (_x , _rows – 3)
[x4, y4] = _coords (_x , _rows – 2)
bool traded = matrix.get (_x , _rows – 2, 2)
float height = math.avg (y2 , y4) – y3
float _high = y2 + height * (tol/ 100)
float _low = y2 – height * (tol/ 100)
float _t = y3 – height * (fib/ 100)
float y5 = y2 * m < y4 * m ? y2 : y4 float y6 = y2 * m > y4 * m ? y2 : y4
float y7 = y6 – height *(stopPer/100)
bool result = y1*m < y3*m and y4*m <= _high*m and y4*m >= _low*m and close*m < y3*m and not (close[1]*m < y3*m) and not traded if result and _flag and (m > 0 ? dShort : dLong)
_hLine (_l, x2, y5, y3, y6, y7, _t)
_zLine (x1, y1, x2, y2, x3, y3, x4, y4)
_label (x4, y6, m)
matrix.set (_x, _rows – 2, 2, 1)
_flag := false
_flag_scan(_l, _x, m) =>
var bool _cond = true
_cond := _double (_cond, _l, _x, m)
bool enter = _cond[1] and not _cond
[f,s,t,l] = _inTrade (_cond, _l, enter, m)
_cond := f
_extend(_l, set)
[f,s,t,l]_populate(_n, _x, _i, _col) =>
for [i, _a] in _x
if not na(_a)
table.cell(table_id = _n, column = _i ,
row = i, bgcolor = na ,
text = _a, text_color = _col,
text_size = textSize)// ══════════════════════════════════ //
// ————————> Logical Order <————————— // // ══════════════════════════════════ // dir := not hbar ? 1 : not lbar ? 0 : dir bool dirUp = dir != dir[1] and dir bool dirDn = dir != dir[1] and not dir bool setUp = not hbar and dir bool setDn = not lbar and not dir _mxLog (dirUp or dirDn, logs, dirUp ? pivHigh : pivLows) _mxUpdate (setUp or setDn, dir, logs, setUp ? pivHigh : pivLows) [bear,ss,ts,sl] = _scan(tLines, logs, 1) [bull,ls,tl,ll] = _scan(bLines, logs, -1) bool st = SHORT ? ts : false bool lt = LONG ? tl : false bool sell = bear[1] and not bear bool buy = bull[1] and not bull color ssCol = st or st[1] ? trailCol : na color lsCol = lt or lt[1] ? trailCol : na bool longEntry = buy and (FLAT or (SHORT and FLIP)) bool shortEntry = sell and (FLAT or (LONG and FLIP)) bool dateFilter = time >= startTime and time <= endTime tradeId += longEntry or shortEntry ? 1 : 0 lmt := atrStop ? na : shortEntry ? sl : longEntry ? ll : lmt stp := shortEntry or SHORT and atrStop ? ss : longEntry or LONG and atrStop ? ls : stp plot (atrStop ? ss : na, “Short Stop”, ssCol, style= plot.style_linebr) plot (atrStop ? ls : na, “Long Stop”, lsCol, style= plot.style_linebr) bgcolor (not dateFilter ? color.new(color.red,80) : na, title= “Filter Color”) // ══════════════════════════════════ // // —————————> Data Display <————————— // // ══════════════════════════════════ // if showTable string tls = bull ? na : str.format(tabPerc, ls, perD(ls)) string tss = bear ? na : str.format(tabPerc, ss, perD(ss)) string tll = bull ? na : str.format(tabPerc, ll, perD(ll)) string tsl = bear ? na : str.format(tabPerc, sl, perD(sl)) string[] titles = array.from(na, bull ? na : “Bullish”, bear ? na : “Bearish”) string[] stops = array.from(“Stop” , tls, tss) string[] limtis = array.from(“Target”, tll, tsl) table bjTab = table.new(tableYpos + “_” + tableXpos, 3, 3, border_color= color.new(color.gray, 60), border_width= 1) if not bear or not bull _populate(bjTab, titles, 0, color.white) _populate(bjTab, stops, 1, color.red) if not (na(ll) or lt) or not (na(sl) or st) _populate(bjTab, limtis, 2, color.green) // ══════════════════════════════════ // // ——————> String Variables <———————— // // ══════════════════════════════════ // bool cSon = thirdParty == A1 bool tCon = thirdParty == A2 bool aTron = thirdParty == A3 bool c3 = thirdParty == A4 bool dCord = thirdParty == A5 if cSon and useStrat string json = “‘{‘ \n \”passphrase\”: \”{0}\”, \n \”time\”: ‘\”{{timenow}}\”‘, \n \”ticker\”: ‘\”{{ticker}}\”‘, \n \”plot\”: ‘{‘ \n \”stop_price\”: {1, number, #.########}, \n \”limit_price\”: {2, number, #.########} \n ‘}’, \n \”strategy\”: ‘{‘ \n \”position_size\”: ‘{{strategy.position_size}}’, \n \”order_action\”: ‘\”{{strategy.order.action}}\”‘, \n \”market_position\”: ‘\”{{strategy.market_position}}\”‘, \n \”market_position_size\”: ‘{{strategy.market_position_size}}’, \n \”prev_market_position\”: ‘\”{{strategy.prev_market_position}}\”‘, \n \”prev_market_position_size\”: ‘{{strategy.prev_market_position_size}}’ \n ‘}’ \n’}'” altStr := str.format(json, pPhrase, stp, lmt) if tCon and useStrat string tcTrade = “‘{{strategy.order.action}}’ tradesymbol={0} tradeid={1}” + (atrStop ? “” : ‘ tpprice={2, number, #.########}’) + ‘ slprice={3, number, #.########}’ altStr := str.format(tcTrade, tcTicker, tradeId, lmt, stp) tUp := str.format(tcStop, stp, tradeId) if aTron and useStrat string altEnt = aTronKey + ” ‘{‘\ncancel(which=all);\nmarket(position='{{strategy.position_size}}’);\n” string altEnd = “‘}’\n#bot” string altBrkt = (atrStop ? “stopOrder(” : “stopOrTakeProfit(“) + (atrStop ? “” : “tp=@{0, number, #.########}, “) + (atrStop ? “offset=@” : “sl=@”) + “{1, number, #.########}, position=0, reduceOnly=true” + (atrStop ? “, tag=trail” : “”) + “);\n” string enter = altEnt + altBrkt + altEnd string exit = altEnt + altEnd altStr := str.format(enter, lmt, stp) altExit := na(altExit) ? exit : altExit string stopUpdate = aTronKey + ” ‘{‘\ncancel(which=tagged, tag=trail);\n” + altBrkt + altEnd tUp := atrStop ? str.format(stopUpdate, lmt, stp) : tUp if dCord and useStrat tnB := longEntry ? db : shortEntry ? dt : tnB string postTrade = “‘{‘\”content\”: \”🚨 Bjorgum {0} detected 🚨\\n\\n\\t'{{ticker}}' '{{interval}}'\\n\\n\\t" + (atrStop ? "" : "🎯 Target: {1, number, #.########}\\n\\t") + "🛑 Stop: {2, number, #.########}
\”‘}'” altStr := str.format(postTrade, tnB, lmt, stp) dCordWin := str.format(dExit, tnB, winStr) dCordLose := str.format(dExit, tnB, loseStr) if c3 and useStrat c3Long := SHORT and buy ? str.format(“[{0}, {1}]”, c3ShortEnd, c3Long) : c3Long c3Short := LONG and sell ? str.format(“[{0}, {1}]”, c3LongEnd, c3Short) : c3Short // ══════════════════════════════════ // // ——————> Strategy Execution <—————— // // ══════════════════════════════════ // strategy.entry(“Long” , strategy.long , comment= “Long”, when= useStrat and longEntry and dateFilter, alert_message= c3 ? c3Long : altStr) strategy.entry(“Short”, strategy.short, comment= “Short”, when= useStrat and shortEntry and dateFilter, alert_message= c3 ? c3Short : altStr) strategy.exit(“Long Exit”, “Long”, stop = stp, limit = lmt, comment = “L Exit”, alert_message = c3 ? c3LongEnd : aTron ? altExit : tCon ? “closelong” : dCord ? na : altStr, alert_profit = dCord ? dCordWin : na, alert_loss = dCord ? dCordLose : na) strategy.exit(“Short Exit”, “Short”, stop = stp, limit = lmt, comment = “S Exit”, alert_message = c3 ? c3ShortEnd : aTron ? altExit : tCon ? “closeshort” : dCord ? na : altStr, alert_profit = dCord ? dCordWin : na, alert_loss = dCord ? dCordLose : na) // ══════════════════════════════════ // // —————> Alert Functionality <—————— //
// ══════════════════════════════════ //if (lt and ls != ls[1] or st and ss != ss[1]) and (tCon or aTron)
alert(tUp, alert.freq_once_per_bar_close)if not useStrat and (buy or sell)
alert((buy ? db : dt) + ‘ Detected’, alert.freq_once_per_bar)// ____ __ _ ____
// ( __)( ( \( \
// ) _) / / ) D (
// (____)\_)__)(____/07/12/2024 at 3:18 PM #235171Salut! Voici la traduction :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156//-----inputsprd = 50tol = 15showPivot=1Show2Bot=1Show2Top=1ShowShort=1ShowLong=1src1 = lowsrc2 = high//----------------------------------------------------------////-----Pivots High&Low--------------------------------------//ph = high=highest[prd](high)pl = low=lowest[prd](low)//----------------------------------------------------------////-----Direction Calculation--------------------------------//if ph and pl=0 thendir=1elsif pl and ph=0 thendir=-1elsedir=direndifdirchanged=dir<>dir[1]//----------------------------------------------------------////-----Calculate Arrays for each pivot----------------------//if ph or pl thenif dirchanged thenif dir=1 then$zigzag[t+1]=highest[prd](high)$zigzagidx[t+1]=barindex$dir[t+1]=1t=t+1elsif dir=-1 then$zigzag[t+1]=lowest[prd](low)$zigzagidx[t+1]=barindex$dir[t+1]=-1t=t+1endifelseif dir=1 and highest[prd](high)> $zigzag[t] then$zigzag[t]=highest[prd](high)$zigzagidx[t]=barindexelsif dir=-1 and lowest[prd](low)< $zigzag[t] then$zigzag[t]=lowest[prd](low)$zigzagidx[t]=barindexendifendifendif//----------------------------------------------------------//if t>4 then//-----Double Top pattern----------------------------//htop=($zigzag[t-3]+$zigzag[t-1])/2-$zigzag[t-2]TopHigh=$zigzag[t-3]+htop*tol/100BotHigh=$zigzag[t-3]-htop*tol/100DoubleTop=($zigzag[t-1]>=BotHigh and $zigzag[t-1]<=TopHigh) and ($zigzag[t-3]>y1 and $zigzag[t-3]>$zigzag[t-2] and $zigzag[t-1]>$zigzag[t-2])if DoubleTop and not DoubleTop[1] thencheckTop=1short=0x1=$zigzagidx[t-4]y1=$zigzag[t-4]x2=$zigzagidx[t-3]y2=$zigzag[t-3]x3=$zigzagidx[t-2]y3=$zigzag[t-2]x4=$zigzagidx[t-1]y4=$zigzag[t-1]x5=$zigzagidx[t]y5=$zigzag[t]dist=abs(y3-min(y2,y4))if Show2Top thendrawrectangle(x2,y2,x4,y4)coloured("red")fillcolor("red",50)endifendifif checkTop and ShowShort thenif not short and close crosses under y3 thenshort=1tpsh=(y3-dist)slsh=max(y2,y4)drawarrowdown(barindex,high)coloured("blue")drawsegment(x3,y3,barindex,y3)coloured("blue")endifif short and low crosses under tpsh thenshort=0checkTop=0Drawsegment(x3,tpsh,barindex,tpsh)coloured("blue")style(dottedline)drawarrowup(barindex,low)coloured("orange")endifif short and close crosses over slsh thencheckTop=0short=0Drawsegment(x4,slsh,barindex,slsh)coloured("blue")style(dottedline)drawarrowup(barindex,low)coloured("orange")endifendif//-----Double Bottom pattern------------------------//hbot=$zigzag[t-2]-($zigzag[t-3]+$zigzag[t-1])/2topLow=$zigzag[t-3]+hbot*tol/100botLow=$zigzag[t-3]-hbot*tol/100DoubleBot=($zigzag[t-1]>=botLow and $zigzag[t-1]<=toplow) and ($zigzag[t-3]<$zigzag[t-4] and $zigzag[t-3]<$zigzag[t-2] and $zigzag[t-1]<$zigzag[t-2])if DoubleBot and not DoubleBot[1] thencheckBot=1xx1=$zigzagidx[t-4]yy1=$zigzag[t-4]xx2=$zigzagidx[t-3]yy2=$zigzag[t-3]xx3=$zigzagidx[t-2]yy3=$zigzag[t-2]xx4=$zigzagidx[t-1]yy4=$zigzag[t-1]xx5=$zigzagidx[t]yy5=$zigzag[t]dist1=abs(yy3-min(yy2,yy4))if Show2Bot thendrawrectangle(xx2,yy2,xx4,yy4)coloured("green")fillcolor("green",50)endifendifif checkbot and ShowLong thenif not long and close crosses over yy3 thenlong=1tp=yy3+dist1sl=min(yy2,yy4)drawarrowup(barindex,low)coloured("green")drawsegment(xx3,yy3,barindex,yy3)coloured("blue")endifif long and high crosses over tp thenlong=0checkBot=0Drawsegment(xx3,tp,barindex,tp)coloured("blue")style(dottedline)drawarrowdown(barindex,high)coloured("red")endifif long and close crosses under sl thencheckBot=0long=0Drawsegment(xx4,sl,barindex,sl)coloured("blue")style(dottedline)drawarrowdown(barindex,high)coloured("red")endifendifendif//-----Draw Pivots------------------------------------------//if islastbarupdate and showPivot thenfor i=t downto 4 dodrawpoint($zigzagidx[i],$zigzag[i],2)coloured("blue",100)nextendif//----------------------------------------------------------//return -
AuthorPosts
Find exclusive trading pro-tools on