I have this indicator that I use for my strategy and I want make it into an EA
/@version=5
indicator("Swing High/Low with Horizontal Lines", overlay=true)
// Inputs
barsback = input(2, title='Bars back to check for a swing')
futureBars = input(10, title='Number of future bars for horizontal line')
showSwings = input.string("Both", title="Show Swings", options=["Both", "Highs", "Lows"])
maxSwings = input.int(5, title="Maximum number of swings to show", minval=1)
// Function to detect swing highs and lows
swing_detection(index) =>
swing_high = true
swing_low = true
for i = 1 to barsback
if high[index - i] >= high[index] or high[index + i] > high[index]
swing_high := false
if low[index - i] <= low[index] or low[index + i] < low[index]
swing_low := false
[swing_high, swing_low]
// Detect swings for the current bar
[swing_high, swing_low] = swing_detection(barsback)
// Initialize arrays for swing lines and their end bars
var line[] swingHighLines = array.new_line()
var int[] swingHighEndBars = array.new_int()
var line[] swingLowLines = array.new_line()
var int[] swingLowEndBars = array.new_int()
// Function to draw lines
draw_line(lineArray, endBarArray, index, price, color) =>
if array.size(lineArray) >= maxSwings
line.delete(array.shift(lineArray))
array.shift(endBarArray)
newLine = line.new(x1=bar_index - index, y1=price, x2=bar_index - index + futureBars, y2=price, color=color, width=2)
array.push(lineArray, newLine)
array.push(endBarArray, bar_index + futureBars)
// Check if the line should be extended or stopped
update_lines(lineArray, endBarArray) =>
for i = 0 to array.size(lineArray) - 1
lineId = array.get(lineArray, i)
endBar = array.get(endBarArray, i)
price = line.get_y1(lineId)
if bar_index <= endBar
if high >= price and low <= price
array.set(endBarArray, i, bar_index)
line.set_x2(lineId, bar_index)
line.set_extend(lineId, extend.none)
// Conditionally draw swing highs and lows based on user selection and maximum number of swings
if (showSwings == "Both" or showSwings == "Highs") and swing_high
draw_line(swingHighLines, swingHighEndBars, barsback, high[barsback], color.red)
if (showSwings == "Both" or showSwings == "Lows") and swing_low
draw_line(swingLowLines, swingLowEndBars, barsback, low[barsback], color.green)
// Update lines to stop extending when crossed
if showSwings == "Both" or showSwings == "Highs"
update_lines(swingHighLines, swingHighEndBars)
if showSwings == "Both" or showSwings == "Lows"
update_lines(swingLowLines, swingLowEndBars)
Identify swings using the above indicator way of identifying them
Compare two charts (Allow me to choose which charts + allow me to use the time frame) (time frame should be in the same for both of them)
Mark the common swings (Common swing is a swing that has formed on both choose charts within the same candle on the selected time frame
Once one of the common swings broken on only 1 chart and not on the other (That is called Obba) set a stop order on the pair that hasn’t broken the common swing
For example
Pair 1 broke the common swing high but pair 2 didn’t, then Set stop order on pair 2 on the low of the last formed candle, set SL on the common swing
Set Tp 2.5RR
If the common swing is broken before order activation then cancel the order
If the order is not activated and new candle formed and the common swing still not broken then cancel the order and set it again on the low of the last formed candle
When price reaches 1.5RR move stop loss to breakeven and close 0.25% of the open lot size
Only 1 trade per pair a time (you can enter for the other pair) unless the open trade is on breakeven
Maximum loses per day ( variable)
Maximum Tp ( variable)
Chosen Risk in percentage from the equity capital ( variable)