Specification
// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// © UAlgo
//@version=6
indicator("Rejection Blocks [UAlgo]", overlay=true, max_boxes_count=500, max_labels_count=500, max_lines_count=500)
// -----------------------------------------------------------------------------
// Settings
// -----------------------------------------------------------------------------
type Settings
int swingLeft
int swingRight
int confirmWindow
string sweepType
int minSweepTicks
bool useShapeFilter
float minWickToBody
float minDomWickPct
float maxOppWickPct
float maxBodyPct
string closeFilter
string rbZoneMode
string strengthModel
float innerMaxPctOfOuter
int innerMinBars
int rightOffsetBars
int maxBlocks
int maxPending
string mitigationMode
bool stopOnMitigation
bool deleteOnMitigation
string invalidationMode
bool deleteOnInvalid
int maxAgeBars
bool showBull
bool showBear
bool showStructure
int structLineLenBars
int maxStructLines
color colOuterFill
color colOuterBorder
color colOuterMitFill
color colOuterMitBorder
color colOuterInvFill
color colOuterInvBorder
color colBuyFill
color colBuyBorder
color colSellFill
color colSellBorder
// -----------------------------------------------------------------------------
// Types
// -----------------------------------------------------------------------------
type CandleParts
float rng
float body
float upperWick
float lowerWick
float bodyTop
float bodyBot
method rngAdj(CandleParts self) =>
math.max(self.rng, syminfo.mintick)
method bodyAdj(CandleParts self) =>
math.max(self.body, syminfo.mintick)
type Candidate
int leftT
float top
float bottom
int dir
float buyStrength
float sellStrength
float confirmLevel
type BlockVisuals
box outer
box buyBox
box sellBox
line capLine
type Block
int leftT
int rightT
float top
float bottom
int dir
bool mitigated
bool invalidated
int stopRightT
float buyStrength
float sellStrength
BlockVisuals vis
type StructLine
line id
label lbl
// -----------------------------------------------------------------------------
// Methods & Helpers
// -----------------------------------------------------------------------------
f_clamp(float v, float lo, float hi) =>
math.min(math.max(v, lo), hi)
f_clampInt(int v, int lo, int hi) =>
v < lo ? lo : v > hi ? hi : v
f_hidden(color c) =>
color.new(c, 100)
method delete(BlockVisuals self) =>
if not na(self.outer)
box.delete(self.outer)
if not na(self.buyBox)
box.delete(self.buyBox)
if not na(self.sellBox)
box.delete(self.sellBox)
if not na(self.capLine)
line.delete(self.capLine)
method delete(Block self) =>
self.vis.delete()
method delete(StructLine self) =>
if not na(self.id)
line.delete(self.id)
if not na(self.lbl)
label.delete(self.lbl)
type RBManager
Settings cfg
array<Candidate> pending
array<Block> blocks
array<StructLine> structLines
float lastSwingHigh
int lastSwingHighT
float lastSwingLow
int lastSwingLowT
int lastBrokenHighT
int lastBrokenLowT
int trendDir
f_getParts() =>
float bTop = math.max(open, close)
float bBot = math.min(open, close)
float uW = high - bTop
float lW = bBot - low
float rng = high - low
float body = bTop - bBot
CandleParts.new(rng, body, uW, lW, bTop, bBot)
method isRBCandle(RBManager self, int dir, float level) =>
if na(level)
false
else
CandleParts p = f_getParts()
float rngAdj = p.rngAdj()
float bodyAdj = p.bodyAdj()
float domW = dir == 1 ? p.lowerWick : p.upperWick
float oppW = dir == 1 ? p.upperWick : p.lowerWick
float domPct = domW / rngAdj
float oppPct = oppW / rngAdj
float bodyPct = p.body / rngAdj
bool shapeOk = not self.cfg.useShapeFilter ? true :
rngAdj > syminfo.mintick and
domW >= bodyAdj * self.cfg.minWickToBody and
domPct >= self.cfg.minDomWickPct and
oppPct <= self.cfg.maxOppWickPct and
bodyPct <= self.cfg.maxBodyPct
float sweepMargin = self.cfg.minSweepTicks * syminfo.mintick
bool sweepOk = dir == 1 ?
(low < level - sweepMargin and close > level) :
(high > level + sweepMargin and close < level)
bool wickSweepOk = self.cfg.sweepType == "Wick sweep (open+close inside)" ? (dir == 1 ? open > level : open < level) : true
float mid = (high + low) * 0.5
bool closeOk = switch self.cfg.closeFilter
"None" => true
"Close in favorable half" => dir == 1 ? close >= mid : close <= mid
"Close beyond open" => dir == 1 ? close > open : close < open
=> true
sweepOk and wickSweepOk and shapeOk and closeOk
method getZone(RBManager self, int dir) =>
float bodyTop = math.max(open, close)
float bodyBot = math.min(open, close)
float top = na
float bottom = na
switch self.cfg.rbZoneMode
"Wick-to-Body" =>
if dir == 1
top := bodyBot
bottom := low
else
top := high
bottom := bodyTop
"Open-to-Extreme" =>
if dir == 1
top := open
bottom := low
else
top := high
bottom := open
"Full Candle" =>
top := high
bottom := low
"Body" =>
top := bodyTop
bottom := bodyBot
=>
top := high
bottom := low
[top, bottom]
method getStrength(RBManager self, int dir) =>
CandleParts p = f_getParts()
float rngAdj = p.rngAdj()
float closeLoc = f_clamp((close - low) / rngAdj, 0.0, 1.0)
float buy = closeLoc
if self.cfg.strengthModel == "Close + Wick"
float domWickPct = (dir == 1 ? p.lowerWick : p.upperWick) / rngAdj
float wickSignal = dir == 1 ? domWickPct : (1.0 - domWickPct)
buy := f_clamp(closeLoc * 0.7 + wickSignal * 0.3, 0.0, 1.0)
float sell = 1.0 - buy
[buy, sell]
method createBlock(RBManager self, Candidate c, int rightNowT, int barMs) =>
float mid = (c.top + c.bottom) * 0.5
int minRightT = c.leftT + barMs
int r = math.max(rightNowT, minRightT)
box outer = box.new(left=c.leftT, top=c.top, right=r, bottom=c.bottom, xloc=xloc.bar_time, extend=extend.none)
box buyBox = box.new(left=c.leftT, top=mid, right=r, bottom=c.bottom, xloc=xloc.bar_time, extend=extend.none, bgcolor=color.new(color.lime, 90), border_color=color.new(color.lime, 80))
box sellBox = box.new(left=c.leftT, top=c.top, right=r, bottom=mid, xloc=xloc.bar_time, extend=extend.none, bgcolor=color.new(color.red, 90), border_color=color.new(color.red, 80))
int width = math.max(1, r - c.leftT)
int capX = c.leftT + int(math.round(width * self.cfg.innerMaxPctOfOuter))
capX := math.min(r, capX)
line capLine = line.new(x1=capX, y1=c.bottom, x2=capX, y2=c.top, xloc=xloc.bar_time, extend=extend.none, color=self.cfg.colOuterBorder, style=line.style_dashed, width=1)
BlockVisuals vis = BlockVisuals.new(outer, buyBox, sellBox, capLine)
Block b = Block.new(c.leftT, r, c.top, c.bottom, c.dir, false, false, na, c.buyStrength, c.sellStrength, vis)
b
method setVisuals(RBManager self, Block b, bool visible) =>
color fill = b.invalidated ? self.cfg.colOuterInvFill : b.mitigated ? self.cfg.colOuterMitFill : self.cfg.colOuterFill
color border = b.invalidated ? self.cfg.colOuterInvBorder : b.mitigated ? self.cfg.colOuterMitBorder : self.cfg.colOuterBorder
box.set_bgcolor(b.vis.outer, visible ? fill : f_hidden(fill))
box.set_border_width(b.vis.outer, 0)
box.set_border_color(b.vis.outer, f_hidden(border))
box.set_bgcolor(b.vis.buyBox, visible ? self.cfg.colBuyFill : f_hidden(self.cfg.colBuyFill))
box.set_border_color(b.vis.buyBox, visible ? self.cfg.colBuyBorder : f_hidden(self.cfg.colBuyBorder))
box.set_bgcolor(b.vis.sellBox, visible ? self.cfg.colSellFill : f_hidden(self.cfg.colSellFill))
box.set_border_color(b.vis.sellBox, visible ? self.cfg.colSellBorder : f_hidden(self.cfg.colSellBorder))
color capCol = b.invalidated ? self.cfg.colOuterInvBorder : b.mitigated ? self.cfg.colOuterMitBorder : self.cfg.colOuterBorder
if not na(b.vis.capLine)
line.set_color(b.vis.capLine, visible ? capCol : f_hidden(capCol))
method updateBoxCoords(RBManager self, Block b, int rightNowT, int barMs) =>
int r = rightNowT
box.set_right(b.vis.outer, r)
int width = math.max(1, r - b.leftT)
float buyPct = self.cfg.innerMaxPctOfOuter * f_clamp(b.buyStrength, 0.0, 1.0)
float sellPct = self.cfg.innerMaxPctOfOuter * f_clamp(b.sellStrength, 0.0, 1.0)
int minW = self.cfg.innerMinBars * barMs
int buyW = f_clampInt(int(math.round(width * buyPct)), minW, width)
int sellW = f_clampInt(int(math.round(width * sellPct)), minW, width)
box.set_right(b.vis.buyBox, math.min(r, b.leftT + buyW))
box.set_right(b.vis.sellBox, math.min(r, b.leftT + sellW))
int capX = b.leftT + int(math.round(width * self.cfg.innerMaxPctOfOuter))
capX := math.min(r, capX)
if not na(b.vis.capLine)
line.set_xy1(b.vis.capLine, capX, b.bottom)
line.set_xy2(b.vis.capLine, capX, b.top)
method pushLine(RBManager self, int x1, int x2, float y, color col, string sty, int limit, string txt, color txtCol) =>
if array.size(self.structLines) >= limit
StructLine old = array.shift(self.structLines)
old.delete()
line l = line.new(x1=x1, y1=y, x2=x2, y2=y, xloc=xloc.bar_time, extend=extend.none, color=col, style=sty, width=1)
int midT = int((x1 + x2) / 2)
label lbl = label.new(x=midT, y=y, text=txt, xloc=xloc.bar_time, yloc=yloc.price, color=color.new(color.white, 100), textcolor=txtCol, style=label.style_label_center, size=size.tiny)
array.push(self.structLines, StructLine.new(l, lbl))
method addBlock(RBManager self, Candidate c, int rightOffsetMs, int barMs) =>
while array.size(self.blocks) >= self.cfg.maxBlocks
Block old = array.shift(self.blocks)
old.delete()
int rightNowT = time_close + rightOffsetMs
Block b = self.createBlock(c, rightNowT, barMs)
self.setVisuals(b, true)
self.updateBoxCoords(b, rightNowT, barMs)
array.push(self.blocks, b)
method process(RBManager self) =>
int barMs = int(time_close - time)
barMs := barMs <= 0 ? 1 : barMs
int rightOffsetMs = self.cfg.rightOffsetBars * barMs
float ph = ta.pivothigh(high, self.cfg.swingLeft, self.cfg.swingRight)
float pl = ta.pivotlow(low, self.cfg.swingLeft, self.cfg.swingRight)
float srcUp = close
float srcDn = close
bool canBullBreak = not na(self.lastSwingHigh) and not na(self.lastSwingHighT) and time_close > self.lastSwingHighT and self.lastSwingHighT != self.lastBrokenHighT
bool canBearBreak = not na(self.lastSwingLow) and not na(self.lastSwingLowT) and time_close > self.lastSwingLowT and self.lastSwingLowT != self.lastBrokenLowT
bool bullBreak = canBullBreak and srcUp > self.lastSwingHigh and srcUp[1] <= self.lastSwingHigh
bool bearBreak = canBearBreak and srcDn < self.lastSwingLow and srcDn[1] >= self.lastSwingLow
if not na(ph)
self.lastSwingHigh := ph
self.lastSwingHighT := time[self.cfg.swingRight]
if not na(pl)
self.lastSwingLow := pl
self.lastSwingLowT := time[self.cfg.swingRight]
int prevTrendDir = self.trendDir
bool bearRBCandle = self.cfg.showBear and self.isRBCandle(-1, self.lastSwingHigh)
bool bullRBCandle = self.cfg.showBull and self.isRBCandle(1, self.lastSwingLow)
bool bullBOS = bullBreak and prevTrendDir != -1
bool bullCHOCH = bullBreak and prevTrendDir == -1
bool bearBOS = bearBreak and prevTrendDir != 1
bool bearCHOCH = bearBreak and prevTrendDir == 1
if barstate.isconfirmed
if bullBreak or bearBreak
self.trendDir := bullBreak ? 1 : -1
if bullBreak
self.lastBrokenHighT := self.lastSwingHighT
if bearBreak
self.lastBrokenLowT := self.lastSwingLowT
if barstate.isconfirmed and self.cfg.showStructure
int budget = 500 - self.cfg.maxBlocks
budget := budget < 0 ? 0 : budget
int limit = self.cfg.maxStructLines < budget ? self.cfg.maxStructLines : budget
if limit > 0
int x1 = time
int x2 = time + self.cfg.structLineLenBars * barMs
if bullRBCandle
self.pushLine(self.lastSwingHighT, time, self.lastSwingLow, color.new(color.gray, 25), line.style_dotted, limit, "SW", color.gray)
if bearRBCandle
self.pushLine(self.lastSwingLowT, time, self.lastSwingHigh, color.new(color.gray, 25), line.style_dotted, limit, "SW", color.gray)
if bullBOS
self.pushLine(self.lastSwingHighT, time, self.lastSwingHigh, color.new(color.lime, 0), line.style_dashed, limit, "BOS", color.lime)
if bullCHOCH
self.pushLine(self.lastSwingHighT, time, self.lastSwingHigh, color.new(color.teal, 0), line.style_dashed, limit, "CH", color.teal)
if bearBOS
self.pushLine(self.lastSwingLowT, time, self.lastSwingLow, color.new(color.red, 0), line.style_dashed, limit, "BOS", color.red)
if bearCHOCH
self.pushLine(self.lastSwingLowT, time, self.lastSwingLow, color.new(color.orange, 0), line.style_dashed, limit, "CH", color.orange)
if barstate.isconfirmed
if bearRBCandle
float confirmLvl = self.lastSwingLow
if not na(confirmLvl)
[top, bottom] = self.getZone(-1)
if not na(top) and not na(bottom) and top > bottom + syminfo.mintick
[buyStr, sellStr] = self.getStrength(-1)
Candidate c = Candidate.new(time, top, bottom, -1, buyStr, sellStr, confirmLvl)
array.push(self.pending, c)
if bullRBCandle
float confirmLvl = self.lastSwingHigh
if not na(confirmLvl)
[top, bottom] = self.getZone(1)
if not na(top) and not na(bottom) and top > bottom + syminfo.mintick
[buyStr, sellStr] = self.getStrength(1)
Candidate c = Candidate.new(time, top, bottom, 1, buyStr, sellStr, confirmLvl)
array.push(self.pending, c)
while array.size(self.pending) > self.cfg.maxPending
array.shift(self.pending)
int pn = array.size(self.pending)
if pn > 0
for i = pn - 1 to 0
Candidate c = array.get(self.pending, i)
bool expired = self.cfg.confirmWindow > 0 and (time_close - c.leftT) >= (self.cfg.confirmWindow * barMs)
bool confirmed = false
if not expired and not na(c.confirmLevel) and time > c.leftT
bool broke = c.dir == 1 ?
(srcUp > c.confirmLevel and srcUp[1] <= c.confirmLevel) :
(srcDn < c.confirmLevel and srcDn[1] >= c.confirmLevel)
confirmed := broke
if expired
array.remove(self.pending, i)
else if confirmed
self.addBlock(c, rightOffsetMs, barMs)
array.remove(self.pending, i)
while array.size(self.blocks) > self.cfg.maxBlocks
Block old = array.shift(self.blocks)
old.delete()
int bn = array.size(self.blocks)
if bn > 0
for i = bn - 1 to 0
Block b = array.get(self.blocks, i)
bool visible = b.dir == 1 ? self.cfg.showBull : self.cfg.showBear
bool doDelete = false
if not doDelete and self.cfg.maxAgeBars > 0 and (time_close - b.leftT) >= (self.cfg.maxAgeBars * barMs)
doDelete := true
true
else
false
if not doDelete and not b.invalidated and self.cfg.invalidationMode != "None"
bool inv = switch b.dir
1 => self.cfg.invalidationMode == "Close" ? close < b.bottom : low < b.bottom
-1 => self.cfg.invalidationMode == "Close" ? close > b.top : high > b.top
=> false
if inv
b.invalidated := true
self.setVisuals(b, visible)
if self.cfg.deleteOnInvalid
doDelete := true
true
else
false
if not doDelete and not b.mitigated
bool closeInside = close <= b.top and close >= b.bottom
bool intersect = high >= b.bottom and low <= b.top
bool hit = self.cfg.mitigationMode == "Close Inside" ? closeInside : intersect
if hit and time_close > b.leftT
b.mitigated := true
b.stopRightT := time_close + rightOffsetMs
if self.cfg.deleteOnMitigation
doDelete := true
true
else
false
self.setVisuals(b, visible)
int rightNowT = time_close + rightOffsetMs
if self.cfg.stopOnMitigation and b.mitigated and not na(b.stopRightT)
rightNowT := b.stopRightT
int minRightT = b.leftT + barMs
rightNowT := math.max(rightNowT, minRightT)
b.rightT := rightNowT
self.updateBoxCoords(b, rightNowT, barMs)
if doDelete
b.delete()
array.remove(self.blocks, i)
true
else
array.set(self.blocks, i, b)
false
// -----------------------------------------------------------------------------
// Initialization & Main Execution
// -----------------------------------------------------------------------------
groupStructure = "Market Structure"
swingLeft = input.int(5, "Swing left bars", minval=5, group=groupStructure)
swingRight = input.int(5, "Swing right bars", minval=5, group=groupStructure)
groupRB = "Rejection Block (RB) Detection"
sweepType = input.string("Any sweep (close inside)", "Sweep type", options=["Wick sweep (open+close inside)","Any sweep (close inside)"], group=groupRB)
minSweepTicks = input.int(0, "Min sweep distance (ticks)", minval=0, maxval=5000, group=groupRB)
useShapeFilter = input.bool(true, "Use rejection candle shape filter", group=groupRB)
minWickToBody = input.float(2.0, "Min wick/body ratio", minval=0.5, step=0.1, group=groupRB)
minDomWickPct = input.float(55.0, "Min dominant wick (% of range)", minval=5.0, maxval=100.0, step=1.0, group=groupRB) / 100.0
maxOppWickPct = input.float(30.0, "Max opposite wick (% of range)", minval=0.0, maxval=100.0, step=1.0, group=groupRB) / 100.0
maxBodyPct = input.float(60.0, "Max body (% of range)", minval=0.0, maxval=100.0, step=1.0, group=groupRB) / 100.0
closeFilter = input.string("Close in favorable half", "Close filter", options=["None","Close in favorable half","Close beyond open"], group=groupRB)
rbZoneMode = input.string("Wick-to-Body", "RB zone model", options=["Wick-to-Body","Open-to-Extreme","Full Candle","Body"], group=groupRB)
groupStrength = "Inner Buy/Sell Strength"
strengthModel = input.string("Close location", "Strength model", options=["Close location","Close + Wick"], group=groupStrength, tooltip="Approximation only. Strength is fixed at RB formation.")
innerMaxPctOfOuter = input.float(50.0, "Max inner width (% of outer, <= 50)", minval=1.0, maxval=50.0, step=1.0, group=groupStrength) / 100.0
innerMinBars = input.int(1, "Min inner width (bars)", minval=1, maxval=50, group=groupStrength)
rightOffsetBars = input.int(0, "Right offset (bars)", minval=0, maxval=200, group=groupStrength)
groupLifecycle = "Lifecycle"
maxBlocks = input.int(25, "Max blocks", minval=1, maxval=150, group=groupLifecycle)
mitigationMode = input.string("Touch", "Mitigation mode", options=["Touch","Close Inside"], group=groupLifecycle)
stopOnMitigation = input.bool(false, "Stop extending on mitigation", group=groupLifecycle)
deleteOnMitigation = input.bool(false, "Delete on mitigation", group=groupLifecycle)
invalidationMode = input.string("Close", "Invalidation mode", options=["None","Wick","Close"], group=groupLifecycle)
deleteOnInvalid = input.bool(true, "Delete on invalidation", group=groupLifecycle)
maxAgeBars = input.int(0, "Max age (bars, 0=off)", minval=0, maxval=20000, group=groupLifecycle)
groupDisplay = "Display"
showBull = input.bool(true, "Show bullish blocks", group=groupDisplay)
showBear = input.bool(true, "Show bearish blocks", group=groupDisplay)
showStructure = input.bool(true, "Show sweep/BOS/CHOCH", group=groupDisplay)
structLineLenBars = input.int(40, "Structure line length (bars, 0=off)", minval=0, maxval=2000, group=groupDisplay)
maxStructLines = input.int(120, "Max structure lines", minval=0, maxval=500, group=groupDisplay)
colOuterFill = input.color(color.new(color.gray, 82), "Outer fill", group=groupDisplay)
colOuterBorder = input.color(color.new(color.gray, 35), "Outer border", group=groupDisplay)
colOuterMitFill = input.color(color.new(color.teal, 85), "Mitigated fill", group=groupDisplay)
colOuterMitBorder = input.color(color.new(color.teal, 35), "Mitigated border", group=groupDisplay)
colOuterInvFill = input.color(color.new(color.maroon, 85), "Invalidated fill", group=groupDisplay)
colOuterInvBorder = input.color(color.new(color.maroon, 35), "Invalidated border", group=groupDisplay)
colBuyFill = input.color(color.new(color.lime, 55), "Buy fill", group=groupDisplay)
colBuyBorder = input.color(color.new(color.lime, 0), "Buy border", group=groupDisplay)
colSellFill = input.color(color.new(color.red, 55), "Sell fill", group=groupDisplay)
colSellBorder = input.color(color.new(color.red, 0), "Sell border", group=groupDisplay)
// Init Settings
Settings cfg = Settings.new(swingLeft, swingRight, 50, sweepType, minSweepTicks, useShapeFilter, minWickToBody, minDomWickPct, maxOppWickPct, maxBodyPct, closeFilter, rbZoneMode, strengthModel, innerMaxPctOfOuter, innerMinBars, rightOffsetBars, maxBlocks, 50, mitigationMode, stopOnMitigation, deleteOnMitigation, invalidationMode, deleteOnInvalid, maxAgeBars, showBull, showBear, showStructure, structLineLenBars, maxStructLines, colOuterFill, colOuterBorder, colOuterMitFill, colOuterMitBorder, colOuterInvFill, colOuterInvBorder, colBuyFill, colBuyBorder, colSellFill, colSellBorder)
// Init Manager
var RBManager mgr = RBManager.new(cfg, array.new<Candidate>(), array.new<Block>(), array.new<StructLine>(), na, na, na, na, 0, 0, 0)
// Execute
mgr.process()..
Open trades using 5% of account deposit.
Open trades at every CHOCH and BOS base on trend direction.
Close half of opened trades at every BOS and open new trade with 5% of account size.
Close all trades if an opposite CHOCH is given and open new trades in the direction of the trend and applying the same open and closing roles.
Lock profit with trailing stop after every new BOS is given. Move all trailing stop to every previous BOS.
Responded
1
Rating
Projects
19
16%
Arbitration
5
40%
/
40%
Overdue
0
Working
2
Rating
Projects
0
0%
Arbitration
0
Overdue
0
Free
3
Rating
Projects
0
0%
Arbitration
0
Overdue
0
Free
4
Rating
Projects
15
33%
Arbitration
5
40%
/
20%
Overdue
1
7%
Working
Published: 5 articles, 34 codes
5
Rating
Projects
3
33%
Arbitration
0
Overdue
0
Free
6
Rating
Projects
833
62%
Arbitration
33
27%
/
45%
Overdue
24
3%
Free
Published: 1 code
7
Rating
Projects
34
35%
Arbitration
0
Overdue
2
6%
Free
8
Rating
Projects
0
0%
Arbitration
0
Overdue
0
Free
9
Rating
Projects
0
0%
Arbitration
0
Overdue
0
Free
10
Rating
Projects
0
0%
Arbitration
0
Overdue
0
Free
11
Rating
Projects
0
0%
Arbitration
0
Overdue
0
Free
12
Rating
Projects
6
67%
Arbitration
2
0%
/
50%
Overdue
0
Free
Similar orders
*Need an MQL5 EA for MT5 to trade gold and forex automatically. Must include Stop Loss, Take Profit, and basic risk management. Budget is $30 to $50. Looking for clean, stable code that works on VPS.*
MT5 EA for XAUUSDm - Trend Grid with EMA+ATR+ADX (Non-Martingale) 【Strategy Summary】 - EMA(50) on H1 judges trend direction. 2 H1 closes to confirm crossover. - ADX(14) below 20 stops new orders. Existing orders still managed. - Parallel mode: 5 stop orders placed at once. Spacing = ATR(14)×1.5 (300-600 pts). - TP: 1 new order at furthest price + spacing. SL: no replacement. - Fixed SL 300pts. No fixed TP. Trailing
Description: I need an experienced MQL5 developer to build a professional MT5 Expert Advisor for XAU/USD based on my trading strategy. I require the full .mq5 source code and the compiled file. Trading Logic: Timeframes: H4 to determine overall direction, H1 for supply and demand zones, M15 for trade entries. Buy conditions: H4 trend is bullish, price reaches a valid H1 demand zone, liquidity sweep occurs below the
Standby Description . Prop Firm Environment . ( Monitor Execution and Handling Environment Changes as Required ) . Technical Issues . Delete extra lines of code (Clean Code , Folder) . Asset related translation , no need for Logic Alteration
MultiPair_PriceAction
30 - 200 USD
OANDA market watch clock and symbols (.sim) Multipair able so i can choose at least 6 of those more volatile forex pairs. Price Action setups instead of relay on lag indicators. But rsi for confirmation. Spread protection, position management, magic number editor, hours trading. Volatility protection Trailing Stop, Stop losses, take profit. Percentage and ATR scale instead of dollars or lot sizes. Funds management
Looking for an MT5 Expert Advisor developer with: Minimum 1 year of verified activity on the MetaTrader Market Positive, real user reviews Ability to build EAs without Bollinger Bands Fully configurable parameters (risk, filters, SL/TP, trading hours) Free test version available before any payment Clear communication and ongoing support If you meet these requirements, please send your MQL5 profile or portfolio
I want to create a EA based on an existing EA.
100 - 500 USD
I want to create a EA based on an existing EA. I want to create a COPY of same EA. This is a Grid based EA and do averaging when market goes against it. While doing Averaging it keeps on taking trades and booking profits
Akram boushaba
30 - 500 USD
مرحبا كيف حالكم انا اكرم مهتم بالتداول احاول ان اصمم برنامج روبوت قادر على التداول من تلقاء نفسه من يمكنه ان يساعدني او يعلمني كيف استطيع فهل ذلك وسأكون ممتناً له وشكرا لكم
Looking for someone who is experienced in creating MT5 EA from scratch to go over 7 public youtube videos (total duration about 5 hours) and extract the strategy code taught in the videos to make a MT5 .mq5 source code file. Full code is explained in the 7 videos so it's just a matter of going over the videos and extracting the relevant parts that relate to the source code and compiling it into a working EA. The
EA Crafter
500+ USD
Act as a professional Quantitative Developer and Risk Manager. I want to build a systematic trading strategy rulebook that prioritizes capital preservation and statistical edge over raw performance. Please generate a structured trading strategy using the following framework: 1. ASSET CLASS & TIMEFRAME: - Asset: [e.g., Apple (AAPL), Bitcoin (BTC), or EUR/USD] - Timeframe: [e.g., 5-minute, 1-hour, Daily] 2. CORE
Project information
Budget
30 - 100 USD
Deadline
from 1 to 5 day(s)
Customer
Placed orders1
Arbitrage count0