This strategy combines moving averages and the Stochastic oscillator to implement an automated stock trading system. It uses two moving averages of different lengths and the Stochastic indicator to capture trend and overbought/oversold signals, and makes buy and sell decisions based on the trend direction and indicator signals in overbought/oversold regions.
A fast line (5-day) and slow line (20-day) moving average are used. The fast line crossing above the slow line is a buy signal, while crossing below is a sell signal. The moving averages determine the price trend and direction.
The Stochastic parameters are set to: K line period of 14, K line smooth period of 3, D line smooth period of 3. Below 20 on the K line is the oversold region, while above 80 is the overbought region. The Stochastic oscillator determines whether it is in overbought/oversold regions.
Buy condition: Fast MA crossover above slow MA and K line <20 (oversold region) Sell condition: Fast MA crossover below slow MA and K line >80 (overbought region)
Go long when the buy condition is met; go short when the sell condition is met.
Set 1% profit target after buying; set 1% stop loss after selling.
This strategy combines trend and indicators to effectively capture medium-to-long term price trends, while using the Stochastic oscillator to control the timing of trades and avoid random entries without a clear directional bias. The strategy parameters are adjustable to different market environments. Overall this strategy works very well on large/mid-cap stocks in uptrends.
Price spikes from significant news events may incur large losses. Stop losses can control the risk.
Sustained range-bound markets may lead to consecutive small losses. Adjust the MA periods to reduce losses.
Avoid key market periods when prices tend to reverse.
Test different parameter combinations to find optimal parameters, such as different MA lengths.
Incorporate other analysis tools like volume, volatility for filter conditions to improve profit rate.
Research stock selection mechanisms, like picking strong stocks or cap-weighted indices, to reduce single-stock risks.
The overall strategy operates smoothly. With stop losses and profit targets, the overall profit/loss profile is solid. Further improvements can be expected from parameter tuning and stock pool filtering. In general this is an easy-to-implement and robust quantitative trading strategy.
/*backtest start: 2024-01-25 00:00:00 end: 2024-02-01 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Moving Average and Stochastic Strategy 80% ", overlay=true) // Moving Average Settings maShortLength = input(5, title="Short MA Length") maLongLength = input(20, title="Long MA Length") // Stochastic Settings stochLength = input(14, title="Stochastic Length") smoothK = input(3, title="Stochastic %K") smoothD = input(3, title="Stochastic %D") stochOverbought = 80 stochOversold = 20 // Profit Target Settings profitTarget = input(1, title="Profit Target (%)") // 1% profit target // Calculate Moving Averages maShort = sma(close, maShortLength) maLong = sma(close, maLongLength) // Calculate Stochastic k = sma(stoch(close, high, low, stochLength), smoothK) d = sma(k, smoothD) // Entry Conditions longConditionMA = crossover(maShort, maLong) and k < stochOversold shortConditionMA = crossunder(maShort, maLong) and k > stochOverbought // Opposite Conditions oppositeLongConditionMA = crossunder(maShort, maLong) and k < stochOversold oppositeShortConditionMA = crossover(maShort, maLong) and k > stochOverbought // Strategy Logic if (longConditionMA) strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", profit=close * (50 + profitTarget / 100)) if (shortConditionMA) strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", profit=close * (20 - profitTarget / 100)) // Opposite Strategy Logic if (oppositeLongConditionMA) strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", profit=close * (50 - profitTarget / 100)) if (oppositeShortConditionMA) strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", profit=close * (20 + profitTarget / 100)) // Plot Moving Averages plot(maShort, color=color.blue, title="Short MA") plot(maLong, color=color.red, title="Long MA") // Plot Stochastic hline(stochOverbought, "Overbought", color=color.red) hline(stochOversold, "Oversold", color=color.green) plot(k, color=color.black, title="Stochastic %K")