Created
November 14, 2023 14:56
-
-
Save iCodeForBananas/7d363db2403ab1154ca0034e6aadceed to your computer and use it in GitHub Desktop.
Broken High/Low Strategy [iCodeForBananas]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//@version=5 | |
strategy("Broken High/Low Strategy [iCodeForBananas]", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity) | |
useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy') | |
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy') | |
fastMALength = input(5 , 'Fast MA length', group = 'Trend strength') | |
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength') | |
slowMALength = input(10, 'Slow MA length', group = 'Trend strength') | |
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength') | |
ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength') | |
useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy') | |
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength') | |
longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings') | |
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings') | |
fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength) | |
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength) | |
FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters') | |
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters') | |
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters') | |
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters') | |
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters') | |
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters') | |
start=timestamp(FromYear,FromMonth,FromDay,00,00) | |
finish=timestamp(ToYear,ToMonth,ToDay,23,59) | |
window()=>time>=start and time<=finish?true:false | |
afterStartDate = time >= start and time<=finish?true:false | |
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters') | |
trailStopMA = ta.ema(close, trailStopMALength) | |
isGreenCandle = close > open | |
isRedCandle = close < open | |
isBrokenHigh = close > open[1] | |
isPriorCandleRed = close[1] < open[1] | |
isPriorPriorCandleRed = close[2] < open[2] | |
isPriorPriorCandleGreen = close[2] > open[2] | |
isPriorCandleGreen = close[1] > open[1] | |
isBrokenLow = close < open[1] | |
isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh | |
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow | |
isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false | |
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false | |
longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled | |
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA) | |
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition | |
shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled | |
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA) | |
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition | |
if (longOpenCondition) | |
strategy.entry("Long Entry", strategy.long) | |
if (longCloseCondition) | |
strategy.close('Long Entry', 'Long Exit') | |
if (shortOpenCondition) | |
strategy.entry("Short Entry", strategy.long) | |
if (shortCloseCondition) | |
strategy.close('Short Entry', 'Short Exit') | |
if (closeTradesEOD and hour >= 14 and minute >= 30) | |
strategy.close_all("EOD") | |
plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red) | |
plot(fastMA) | |
plot(ignoreSlowMA ? na : slowMA, linewidth = 4) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment