175 lines
8.6 KiB
Markdown
175 lines
8.6 KiB
Markdown
##
|
|
|
|
//@version=5
|
|
strategy("Swing Trading Strategy with ATR Stop Loss and Take Profit", overlay=true)
|
|
|
|
// Define Daily Chart EMAs
|
|
daily_ema20 = ta.ema(close, 20)
|
|
daily_ema50 = ta.ema(close, 50)
|
|
daily_ema100 = ta.ema(close, 100)
|
|
daily_ema200 = ta.ema(close, 200)
|
|
|
|
// Define Daily Trend
|
|
daily_trend = daily_ema20 > daily_ema50 and daily_ema50 > daily_ema100 and daily_ema100 > daily_ema200
|
|
|
|
// Define 4-Hour Chart MACD
|
|
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
|
|
|
|
// Define 4-Hour Trend
|
|
four_hour_trend = macdLine > signalLine ? 1 : macdLine < signalLine ? -1 : 0
|
|
|
|
// Define 1-Hour Chart Engulfing Patterns
|
|
one_hour_engulfing_bullish = ta.candlebullengulfing(close, open)
|
|
one_hour_engulfing_bearish = ta.candlebearengulfing(close, open)
|
|
|
|
// Define Additional Technical Indicators
|
|
rsi = ta.rsi(close, 14)
|
|
bb_upper = ta.bbupper(close, 20, 2)
|
|
bb_lower = ta.bblower(close, 20, 2)
|
|
stoch = ta.stoch(close, high, low, 14, 3)
|
|
|
|
// Define Entry and Exit Parameters
|
|
atr_mult = input.float(title="ATR Multiplier", defval=2.0, minval=0.0)
|
|
atr_period = input.int(title="ATR Period", defval=14, minval=1)
|
|
atr = ta.atr(atr_period)
|
|
|
|
// Define Trading Logic
|
|
if daily_trend
|
|
if four_hour_trend > 0 and one_hour_engulfing_bullish and rsi > 50 and close < bb_upper
|
|
strategy.entry("Buy", strategy.long)
|
|
strategy.exit("Take Profit", "Buy", profit=atr _ atr_mult, trail_offset=atr)
|
|
strategy.exit("Stop Loss", "Buy", loss=atr _ atr_mult _ 1.5)
|
|
else if four_hour_trend < 0 and one_hour_engulfing_bearish and rsi < 50 and close > bb_lower
|
|
strategy.entry("Sell", strategy.short)
|
|
strategy.exit("Take Profit", "Sell", profit=atr _ atr_mult, trail_offset=atr)
|
|
strategy.exit("Stop Loss", "Sell", loss=atr _ atr_mult _ 1.5)
|
|
|
|
##
|
|
|
|
review the following version 5 pinescript that is designed to help a swing trading strategy for forex trading and provide feedback:
|
|
|
|
//@version=5
|
|
strategy("Swing Trading Strategy with ATR Stop Loss and Take Profit", overlay=true)
|
|
|
|
// Define Daily Chart EMAs
|
|
daily_ema20 = ta.ema(close, 20)
|
|
daily_ema50 = ta.ema(close, 50)
|
|
daily_ema100 = ta.ema(close, 100)
|
|
daily_ema200 = ta.ema(close, 200)
|
|
|
|
// Define Daily Trend
|
|
daily_trend = daily_ema20 > daily_ema50 and daily_ema50 > daily_ema100 and daily_ema100 > daily_ema200
|
|
|
|
// Define 4-Hour Chart MACD
|
|
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
|
|
|
|
// Define 4-Hour Trend
|
|
four_hour_trend = macdLine > signalLine ? 1 : macdLine < signalLine ? -1 : 0
|
|
|
|
// Define 1-Hour Chart Engulfing Patterns
|
|
one_hour_engulfing_bullish = ta.candlebullengulfing(close, open)
|
|
one_hour_engulfing_bearish = ta.candlebearengulfing(close, open)
|
|
|
|
// Define RSI
|
|
rsi_length = input.int(title="RSI Length", defval=14, minval=1)
|
|
rsi_overbought = input.float(title="RSI Overbought Level", defval=70.0, minval=0.0, maxval=100.0)
|
|
rsi_oversold = input.float(title="RSI Oversold Level", defval=30.0, minval=0.0, maxval=100.0)
|
|
rsi = ta.rsi(close, rsi_length)
|
|
|
|
// Define Entry and Exit Parameters
|
|
atr_mult = input.float(title="ATR Multiplier", defval=2.0, minval=0.0)
|
|
atr_period = input.int(title="ATR Period", defval=14, minval=1)
|
|
atr = ta.atr(atr_period)
|
|
|
|
// Define Trading Logic
|
|
if daily_trend
|
|
if four_hour_trend > 0 and one_hour_engulfing_bullish and rsi < rsi_overbought
|
|
strategy.entry("Buy", strategy.long)
|
|
strategy.exit("Take Profit", "Buy", profit=atr _ atr_mult, trail_offset=atr)
|
|
strategy.exit("Stop Loss", "Buy", loss=atr _ atr_mult _ 1.5)
|
|
else if four_hour_trend < 0 and one_hour_engulfing_bearish and rsi > rsi_oversold
|
|
strategy.entry("Sell", strategy.short)
|
|
strategy.exit("Take Profit", "Sell", profit=atr _ atr_mult, trail_offset=atr)
|
|
strategy.exit("Stop Loss", "Sell", loss=atr _ atr_mult _ 1.5)
|
|
|
|
##
|
|
|
|
fix the following error message after trying to compile the following code: Could not find function or function reference 'input.resolution'
|
|
//@version=5
|
|
strategy("Swing Trading Strategy with ATR Stop Loss and Take Profit", overlay=true)
|
|
|
|
// Define Daily Chart EMAs
|
|
ema20_length = input.int(title="EMA 20 Length", defval=20, minval=1)
|
|
ema50_length = input.int(title="EMA 50 Length", defval=50, minval=1)
|
|
ema100_length = input.int(title="EMA 100 Length", defval=100, minval=1)
|
|
ema200_length = input.int(title="EMA 200 Length", defval=200, minval=1)
|
|
daily_ema20 = ta.ema(close, ema20_length)
|
|
daily_ema50 = ta.ema(close, ema50_length)
|
|
daily_ema100 = ta.ema(close, ema100_length)
|
|
daily_ema200 = ta.ema(close, ema200_length)
|
|
|
|
// Define Daily Trend
|
|
daily_trend = daily_ema20 > daily_ema50 and daily_ema50 > daily_ema100 and daily_ema100 > daily_ema200
|
|
|
|
// Define 4-Hour Chart MACD
|
|
macd_fast_length = input.int(title="MACD Fast Length", defval=12, minval=1)
|
|
macd_slow_length = input.int(title="MACD Slow Length", defval=26, minval=1)
|
|
macd_signal_length = input.int(title="MACD Signal Length", defval=9, minval=1)
|
|
[macdLine, signalLine, histLine] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
|
|
|
|
// Define 4-Hour Trend
|
|
four_hour_trend = macdLine > signalLine ? 1 : macdLine < signalLine ? -1 : 0
|
|
|
|
// Define RSI
|
|
rsi_length = input.int(title="RSI Length", defval=14, minval=1)
|
|
rsi_overbought_level = input.float(title="RSI Overbought Level", defval=70.0, minval=0.0, maxval=100.0)
|
|
rsi_oversold_level = input.float(title="RSI Oversold Level", defval=30.0, minval=0.0, maxval=100.0)
|
|
rsi = ta.rsi(close, rsi_length)
|
|
|
|
// Define ATR Multiplier
|
|
atr_multiplier = input.float(title="ATR Multiplier", defval=2.0, minval=0.0)
|
|
atr_period = input.int(title="ATR Period", defval=14, minval=1)
|
|
atr = ta.atr(atr_period)
|
|
|
|
// Define Additional Entry Criteria
|
|
price_action_high_length = input.int(title="Price Action High Length", defval=10, minval=1)
|
|
price_action_low_length = input.int(title="Price Action Low Length", defval=10, minval=1)
|
|
price_action_signal = ta.highest(high, price_action_high_length) > ta.highest(high, price_action_high_length _ 2) and ta.lowest(low, price_action_low_length) > ta.lowest(low, price_action_low_length _ 2)
|
|
supp_resolution = input.resolution(title="Support/Resistance Resolution", defval="60")
|
|
supp_length = input.int(title="Support/Resistance Length", defval=30, minval=1)
|
|
supp_lookback = input.int(title="Support/Resistance Lookback", defval=100, minval=1)
|
|
supp_offset = input.float(title="Support/Resistance Offset", defval=0.25)
|
|
support_resistance_signal = ta.supp(resolution=supp_resolution)
|
|
|
|
Bollinger Band Squeeze Breakout Strategy:
|
|
Bollinger Band Reversal Trading Strategy: In this strategy, you look for overbought or oversold conditions. When the price reaches the upper band, it's considered overbought, while when it reaches the lower band, it's considered oversold. Wait for a candlestick to close below the upper band in an overbought condition or above the lower band in an oversold condition, indicating a potential reversal. Enter a short trade if the price is overbought and a long trade if the price is oversold. Use a stop-loss order above the breakout candlestick and a take-profit order at the middle band.
|
|
|
|
I. Bollinger Band Squeeze Breakout Strategy
|
|
A. Wait for Bollinger Bands to squeeze together, indicating low volatility
|
|
B. Wait for a candlestick to close above or below the upper or lower band, indicating a potential breakout
|
|
C. Enter a long trade if the price breaks above the upper band, or a short trade if it breaks below the lower band
|
|
D. Use a stop-loss order below the breakout candlestick
|
|
E. Use a take-profit order at the middle band.
|
|
A. Use Bollinger Bands to determine trend direction
|
|
|
|
1. Trending above upper band signals uptrend
|
|
2. Trending below lower band signals downtrend
|
|
B. Wait for a pullback to the middle band
|
|
C. Enter a long trade if price bounces off middle band in uptrend
|
|
3. Enter a short trade if price bounces off middle band in downtrend
|
|
D. Use a stop-loss order below the middle band
|
|
E. Use a take-profit order at the upper or lower band, depending on the trend direction.
|
|
I. Bollinger Band Squeeze Breakout Strategy
|
|
A. Wait for Bollinger Bands to squeeze together, indicating low volatility
|
|
B. Wait for a candlestick to close above or below the upper or lower band, indicating a potential breakout
|
|
C. Enter a long trade if the price breaks above the upper band, or a short trade if it breaks below the lower band
|
|
D. Use a stop-loss order below the breakout candlestick
|
|
E. Use a take-profit order at the middle band.
|
|
A. Look for overbought or oversold conditions
|
|
4. Upper band considered overbought
|
|
5. Lower band considered oversold
|
|
B. Wait for a candlestick to close below the upper band in an overbought condition or above the lower band in an oversold condition, indicating a potential reversal
|
|
C. Enter a short trade if the price is overbought and a long trade if the price is oversold
|
|
D. Use a stop-loss order above the breakout candlestick
|
|
E. Use a take-profit order at the middle band.
|