
La stratégie de négociation de la régression linéaire décide des signaux d’achat et de vente en calculant la ligne de régression linéaire et le croisement de la ligne de régression linéaire. La stratégie, combinant l’analyse de la régression linéaire et linéaire, prend en compte à la fois les tendances des cours des actions et les caractéristiques statistiques, permettant de déterminer efficacement les points de retournement des cours des actions et de réaliser des achats et des ventes à bas prix.
La stratégie commence par calculer une ligne de régression linéaire et une ligne de moyenne journalière m pour le cours de l’action. La ligne de régression linéaire reflète la tendance statistique à long terme du cours de l’action et la ligne de moyenne reflète le mouvement à court terme du cours de l’action.
Lorsque la ligne de régression linéaire traverse la moyenne, cela indique que le prix de l’action a augmenté et produit un signal d’achat. Lorsque la ligne de régression linéaire traverse la moyenne, cela indique que le prix de l’action est faible et produit un signal de vente.
Plus précisément, la stratégie détermine les signaux de transaction par les étapes suivantes:
Calculer la ligne de régression linéaire du cours d’une action sur n jours
Calculer une moyenne mobile simple de m jours LRMA de la ligne de régression linéaire
Indice m-jour pour calculer la moyenne mobile des actions
Quand l’ema est en LRMA, un signal d’achat longEntry est généré.
Quand l’ema est en LRMA, il génère un signal de vente longExit
En même temps, en combinant les jugements du marché boursier, les signaux d’achat ne sont envisagés que lorsque le marché boursier est en hausse.
Exécution d’une transaction d’achat ou de vente selon le signal
Le croisement de la ligne de moyenne et de la ligne de régression permet de déterminer le moment d’achat et de vente, de filtrer efficacement les fausses ruptures et de capturer les points de retournement, ce qui permet d’acheter et de vendre à bas prix.
Les paramètres à prendre en compte sont les suivants: ajustement des paramètres, augmentation appropriée des paramètres de la moyenne et de la périodicité de la ligne de régression, réduction de la fréquence des transactions.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimisation de l’indicateur de moyenne: essayez différents types de moyenne, comme les moyennes mobiles pondérées, pour trouver la meilleure moyenne pour l’action.
Optimisation de la ligne de régression: ajuster le cycle de calcul de la ligne de régression pour trouver le paramètre de cycle qui reflète le mieux la tendance à long terme de l’action.
Optimisation du jugement de marché: tester différents indicateurs de jugement de marché pour trouver le signal de marché le mieux adapté à la stratégie.
Optimisation des paramètres: recherche d’une configuration optimale des paramètres en effectuant des tests répétés sur différentes combinaisons de paramètres.
Optimisation de la stratégie de stop loss: tester différentes méthodes de stop loss et définir la meilleure logique de stop loss pour contrôler le risque.
Optimisation des coûts de transaction: Adaptez la fréquence des transactions en fonction des différents modèles de frais de transaction afin de réduire les coûts de transaction.
L’optimisation des points ci-dessus peut améliorer encore la stabilité et la rentabilité de la stratégie.
Cette stratégie de négociation de régression linéaire intègre l’analyse linéaire et l’analyse linéaire de la régression. Elle permet d’identifier efficacement les points de retournement des cours d’actions et de guider les cours bas. La stratégie est simple et fiable et convient à la négociation d’actions optionnelles à moyen et long terme. La stabilité de la stratégie peut être encore améliorée par l’optimisation des paramètres et le contrôle du risque.
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lazy_capitalist
//@version=5
strategy('Linear Regression MA', overlay=true, initial_capital=10000)
datesGroup = "Date Info"
startMonth = input.int(defval = 1, title = "Start Month", minval = 1, maxval = 12, group=datesGroup)
startDay = input.int(defval = 1, title = "Start Day", minval = 1, maxval = 31, group=datesGroup)
startYear = input.int(defval = 2022, title = "Start Year", minval = 1970, group=datesGroup)
averagesGroup = "Averages"
lrLineInput = input.int(title="Linear Regression Line", defval=55, minval = 1, group=averagesGroup)
lrMAInput = input.int(title="Linear Regression MA", defval=55, minval = 1, group=averagesGroup)
emaInput = input.int(title="EMA Length", defval=55, minval = 1, group=averagesGroup)
tradesGroup = "Execute Trades"
executeLongInput = input.bool(title="Execute Long Trades", defval=true)
executeShortInput = input.bool(title="Execute Short Trades", defval=true)
executeStopLoss = input.bool(title="Execute Stop Loss", defval=true)
fourHrSMAExpr = ta.sma(close, 200)
fourHrMA = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr)
bullish = close > fourHrMA ? true : false
maxProfitInput = input.float( title="Max Profit (%)", defval=10.0, minval=0.0) * 0.01
stopLossPercentageInput = input.float( title="Stop Loss (%)", defval=1.75, minval=0.0) * 0.01
start = timestamp(startYear, startMonth, startDay, 00, 00) // backtest start window
window() => time >= start ? true : false // create function "within window of time"
showDate = input(defval = true, title = "Show Date Range")
lrLine = ta.linreg(close, lrLineInput, 0)
lrMA = ta.sma(lrLine, lrMAInput)
ema = ta.ema(close, emaInput)
longEntry = ema < lrMA
longExit = lrMA < ema
shortEntry = lrMA < ema
shortExit = ema < lrMA
maxProfitLong = strategy.opentrades.entry_price(0) * (1 + maxProfitInput)
maxProfitShort = strategy.opentrades.entry_price(0) * (1 - maxProfitInput)
stopLossPriceShort = strategy.position_avg_price * (1 + stopLossPercentageInput)
stopLossPriceLong = strategy.position_avg_price * (1 - stopLossPercentageInput)
if(executeLongInput and bullish)
strategy.entry( id="long_entry", direction=strategy.long, when=longEntry and window(), qty=10, comment="long_entry")
strategy.close( id="long_entry", when=longExit, comment="long_exit")
// strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp")
if(executeShortInput and not bullish)
strategy.entry( id="short_entry", direction=strategy.short, when=shortEntry and window(), qty=10, comment="short_entry")
strategy.close( id="short_entry", when=shortExit, comment="short_exit")
// strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp")
if(strategy.position_size > 0 and executeStopLoss)
strategy.exit( id="long_entry", stop=stopLossPriceLong, comment="exit_long_SL")
strategy.exit( id="short_entry", stop=stopLossPriceShort, comment="exit_short_SL")
// plot(series=lrLine, color=color.green)
plot(series=lrMA, color=color.red)
plot(series=ema, color=color.blue)