Şartname
// 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.
Yanıtlandı
1
Derecelendirme
Projeler
19
16%
Arabuluculuk
5
40%
/
40%
Süresi dolmuş
0
Çalışıyor
2
Derecelendirme
Projeler
0
0%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
3
Derecelendirme
Projeler
0
0%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
4
Derecelendirme
Projeler
15
33%
Arabuluculuk
5
40%
/
20%
Süresi dolmuş
1
7%
Çalışıyor
Yayınlandı: 5 makale, 34 kod
5
Derecelendirme
Projeler
3
33%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
6
Derecelendirme
Projeler
833
62%
Arabuluculuk
33
27%
/
45%
Süresi dolmuş
24
3%
Serbest
Yayınlandı: 1 kod
7
Derecelendirme
Projeler
34
35%
Arabuluculuk
0
Süresi dolmuş
2
6%
Serbest
8
Derecelendirme
Projeler
0
0%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
9
Derecelendirme
Projeler
0
0%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
10
Derecelendirme
Projeler
0
0%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
11
Derecelendirme
Projeler
0
0%
Arabuluculuk
0
Süresi dolmuş
0
Serbest
12
Derecelendirme
Projeler
6
67%
Arabuluculuk
2
0%
/
50%
Süresi dolmuş
0
Serbest
Benzer siparişler
I am looking for an experienced futures trader with a proven track record of passing Topstep Trading Combines/Evaluations . Scope of Work Trade my Topstep evaluation account in line with all Topstep rules. Use a disciplined strategy focused on consistency and risk management. Reach the profit target without violating daily or maximum drawdown limits. Provide brief updates on progress and performance. Requirements
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
JOB TITLE: XAUUSD ONLY MQL5 Strategy Developer Needed To Improve Existing MT5 EA Winrate JOB DESCRIPTION: I already have a working MetaTrader 5 Expert Advisor with a fixed set file and existing trading logic. The strategy is based on Volume Profile / Delta bias, ATR-based TP/SL, ATR deviation filtering, ATR trade spacing, break-even after TP1, and TP lock management. I am looking for an experienced MQL5 / trading
Driven Multiple Choice
30+ USD
Part 1: Project setup Input settings (risk, stop loss, take profit, EMA periods) Indicator initialization Trade management framework Part 2: Trading logic EMA crossover detection Buy/Sell entry rules One-trade-per-symbol check Part 3: Risk management Automatic lot size calculation Stop-loss and take-profit placement Trade execution and error handling Part 4: Final touches On-screen information Optimization
Institutional‑Grade Multi‑Currency MT5 EA
1000 - 1300 USD
Hello, I am reopening this project with a fully updated and clarified specification. I am looking for a high‑level MQL5 developer who can deliver a clean, stable, and professional Phase 1 version of my: Institutional‑Grade Multi‑Currency MT5 EA (A2SR + SMC + Smart Recovery + Smart Grid + Liquidity + Volatility + Safety Filters) This EA is not a simple indicator conversion or a basic strategy. It is a structured
I have an expert advisor's investor login. I want you to study it and make me the exact same EA. There should be absolutely no differences or mistakes. You should have great observation skills for this aswell
HFT / Latency Arbitrage / Scalper needed
30 - 5000 USD
I am looking for an experienced MQL5 or MQL4 developer with a strong background in low-latency algorithmic trading, market data integration, arbitrage and execution optimization. The project involves developing a high-performance HFT Expert Advisor (EA) for XAUUSD or US30 on IC Markets that is designed for robust execution in both demo and live environments. The EA may use market data feeds (such as lmax,one zero or
Hft gold ea live account ic market
30 - 3000 USD
I am looking for an experienced MQL5 or MQL4 developer with a strong understanding of high-frequency trading (HFT) concepts who can explain how certain HFT-style strategies have historically been able to pass proprietary firm evaluations while also being profitable on demo accounts and capable of transitioning successfully to live trading. I am interested in understanding the legitimate trading logic, execution
Advanced Forex Expert Advisor-fully automated system
200 - 300 USD
I require a custom EA and an accompanying custom indicator built in MQL5 for Meta Trader 4/5. The EA must be fully automated (Algo Trading); Telegram-Signal-Linked and named 'AMK Fx'
Proje bilgisi
Bütçe
30 - 100 USD
Son teslim tarihi
from 1 to 5 gün
Müşteri
Verilmiş siparişler1
Arabuluculuk sayısı0