Stratégie de trading automatique avec algorithme à double canal


Date de création: 2023-10-10 15:25:53 Dernière modification: 2023-10-10 15:25:53
Copier: 0 Nombre de clics: 639
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie utilise les deux indicateurs Supertrend et StochRSI pour analyser les tendances des prix et les situations de survente et de survente sur différentes périodes de temps afin d’identifier les signaux potentiels d’achat et de vente. La stratégie vise à suivre les principales tendances et à capturer les principales directions des prix sur les lignes moyennes et longues.

Principe de stratégie

La stratégie utilise les indicateurs de Supertrend de deux périodes de 1 heure et 4 heures pour déterminer la direction de la tendance des prix. Lorsque les deux périodes de Supertrend sont dans la même direction, nous pouvons considérer qu’une tendance de prix plus forte a été observée.

En outre, la stratégie utilise l’indicateur StochRSI pour déterminer s’il y a une situation de survente. L’indicateur StochRSI combine les avantages des deux indicateurs RSI et Stochastic Oscillator.

Pour vérifier davantage le signal, la stratégie définit également une période de rétrocession, après que le signal de sur-achat et de survente du StochRSI a été affiché, un certain nombre de lignes K doivent être rétroactivées. Si la tendance du prix confirme le signal du StochRSI pendant cette période, il sera déclenché un achat ou une vente.

Dans l’ensemble, la stratégie utilise le Supertrend pour déterminer les grandes tendances sur deux périodes et la méthode StochRSI pour déterminer les ajustements locaux pour effectuer des transactions de type suivi de tendance sur les lignes moyennes et longues.

Avantages stratégiques

  • Les indicateurs à cycles multiples permettent de juger et de filtrer efficacement les signaux erronés
  • Les avantages de l’indicateur combiné Supertrend et StochRSI pour juger de la tendance et détecter les sur-achats et les sur-vente
  • La mise en place d’une période de rétroaction pour la vérification des signaux permet d’éviter des transactions inutiles
  • Une stratégie de négociation en ligne moyenne et longue peut réduire les pertes de points de glissement causées par des transactions trop fréquentes.
  • Une combinaison de deux indicateurs facile à comprendre, avec une flexibilité d’ajustement des paramètres

Risque stratégique

  • Pendant les périodes d’oscillation, la tendance moyenne-longue n’est pas évidente et il peut y avoir plus de signaux erronés
  • Une période de rétroaction trop longue peut faire perdre une meilleure opportunité d’achat/vente
  • Le paramètre StochRSI est mal réglé, ce qui peut entraîner des signaux de survente et de survente erronés
  • Les paramètres de Supertrend sont mal configurés et peuvent induire une mauvaise direction de tendance
  • Suivre mécaniquement les signaux d’indicateurs et ignorer les changements fondamentaux

Comment optimiser:

  • Optimiser les combinaisons de paramètres du StochRSI et du Supertrend
  • Adaptation de la longueur du cycle de rétroaction pour différents environnements de disque
  • Vérification combinée avec des indicateurs tels que le volume des transactions
  • Attention aux informations essentielles et intervention lorsque cela est nécessaire

Orientation de l’optimisation de la stratégie

  • Ajout d’autres indicateurs de Supertrend pour différentes périodes de temps, formant un filtrage à plusieurs niveaux
  • le remplacement du StochRSI par d’autres indicateurs de type surachat-survente, tels que le KD, le RSI, etc.
  • Augmentation de la stratégie de stop loss mobile pour obtenir des gains plus importants en fonction des tendances
  • Combinez des indicateurs de moyenne importants, tels que la moyenne à 30 cycles, pour déterminer les grandes tendances
  • Développer des programmes d’optimisation automatique des paramètres pour rendre les stratégies plus robustes

Résumer

La stratégie de coupe de cuisine à deux voies exploite pleinement les méthodes de Supertrend pour déterminer les grandes tendances et les ajustements locaux de StochRSI pour réaliser une stratégie de suivi de tendance fiable. La stratégie est basée sur la manipulation de longue et moyenne ligne, ce qui permet d’éviter efficacement les pertes de revenus causées par des transactions trop fréquentes. Par des moyens tels que l’optimisation des paramètres et la vérification de l’indicateur combiné, la stratégie peut obtenir des rendements positifs stables.

Code source de la stratégie
/*backtest
start: 2023-09-09 00:00:00
end: 2023-10-09 00:00:00
period: 4h
basePeriod: 15m
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/
// © Baby_whale_to_moon

//@version=5
strategy('Kitchen [ilovealgotrading]', overlay=true, format=format.price, initial_capital = 1000)

// BACKTEST DATE
Start_Time = input(defval=timestamp('01 January 2017 13:30 +0000'), title='Start_Time', group = " ################# BACKTEST DATE ################ " )
End_Time = input(defval=timestamp('30 April 2024 19:30 +0000'), title='End_Time', group = " ################# BACKTEST DATE ################ " )

// supertrend 
atrPeriod = input(10, 'ATR Length', group = " #################  Supertrend  ################ ")
factor = input(3, 'Factor', group = " #################  Supertrend  ################ ")

time1 = input.string(title='Short Time Period', defval='07 1h', options=['01 1m','02 3m','03 5m',  '04 15m', '05 30m', '06 45m', '07 1h', '08 2h', '09 3h', '10 4h', '11 1D', '12 1W' ], group = " #################  Supertrend  ################ ",tooltip = "this timeframe is the value of our short-time supertrend indicator")
time2 = input.string(title='Long Time Period', defval='10 4h', options=[ '01 1m','02 3m','03 5m', '04 15m', '05 30m', '06 45m', '07 1h', '08 2h', '09 3h', '10 4h', '11 1D', '12 1W' ], group = " #################  Supertrend  ################ ",tooltip = "this timeframe is the value of our long-time supertrend indicator")


res(Resolution) =>
    if Resolution == '00 Current'
        timeframe.period
    else
        if Resolution == '01 1m'
            '1'
        else
            if Resolution == '02 3m'
                '3'
            else
                if Resolution == '03 5m'
                    '5'
                else
                    if Resolution == '04 15m'
                        '15'
                    else
                        if Resolution == '05 30m'
                            '30'
                        else
                            if Resolution == '06 45m'
                                '45'
                            else
                                if Resolution == '07 1h'
                                    '60'
                                else
                                    if Resolution == '08 2h'
                                        '120'
                                    else
                                        if Resolution == '09 3h'
                                            '180'
                                        else
                                            if Resolution == '10 4h'
                                                '240'
                                            else
                                                if Resolution == '11 1D'
                                                    '1D'
                                                else
                                                    if Resolution == '12 1W'
                                                        '1W'
                                                    else
                                                        if Resolution == '13 1M'
                                                            '1M'


// supertrend Long time period 
[supertrend2, direction2] = request.security(syminfo.tickerid, res(time2), ta.supertrend(factor, atrPeriod))
bodyMiddle4 = plot((open + close) / 2, display=display.none)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, 'Up Trend', color=color.new(color.green, 0), style=plot.style_linebr, linewidth=2)
downTrend2 = plot(direction2 < 0 ? na : supertrend2, 'Down Trend', color=color.new(color.red, 0), style=plot.style_linebr, linewidth=2)

// supertrend short time period 
[supertrend1, direction1] = request.security(syminfo.tickerid, res(time1), ta.supertrend(factor, atrPeriod))
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction1 < 0 ? supertrend1 : na, 'Up Trend', color=color.new(color.yellow, 0), style=plot.style_linebr)
downTrend = plot(direction1 < 0 ? na : supertrend1, 'Down Trend', color=color.new(color.orange, 0), style=plot.style_linebr)


// Stochastic RSI
low_limit_stoch_rsi = input.float(title = 'Stoch Rsi Low Limit', step=0.5, defval=15, group = " #################  Stoch RSI   ################ ", tooltip = "when Stock rsi value crossover Low Limit value we get Long")
up_limit_stoch_rsi = input.float(title = 'Stoch Rsi Up Limit', step=0.5, defval=85, group = " #################  Stoch RSI   ################ ", tooltip = "when Stock rsi value crossunder Up Limit value we get Short")
stocrsi_back_length = input.int(20, 'Stoch Rsi retroactive length', minval=1, group = " #################  Stoch RSI   ################ ", tooltip = "How many candles are left behind, even if there is a buy or sell signal, it will be valid now")
smoothK = input.int(3, 'Stochastic RSI K', minval=1, group = " #################  Stoch RSI   ################ ")
lengthRSI = input.int(14, 'RSI Length', minval=1, group = " #################  Stoch RSI   ################ ")
lengthStoch = input.int(14, 'Stochastic Length', minval=1, group = " #################  Stoch RSI   ################ ")
src_rsi = input(close, title='RSI Source', group = " #################  Stoch RSI   ################ ")
rsi1 = request.security(syminfo.tickerid, '240', ta.rsi(src_rsi, lengthRSI))
k = request.security(syminfo.tickerid, '240', ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK))

// Strategy settings 
dollar = input.float(title='Dollar Cost Per Position ', defval=20000, group = " #################  Strategy Settings  ################ ")
trade_direction = input.string(title='Trade_direction', group = " #################  Strategy Settings  ################ ", options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
Long_message_open = input('Long Open', title = "Long Open Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Long Open Message ")
Short_message_open = input('Short Open', title = "Short Open Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Short Open Message ")
Long_message_close = input('Long Close', title = "Long Close Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Long Close Message ")
Short_message_close = input('Short Close', title = "Short Close Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Short Close Message ")

Time_interval = true
bgcolor(Time_interval ? color.rgb(255, 235, 59, 95) : na)

back_long = 0
back_short = 0

for i = 1 to stocrsi_back_length by 1
    if ta.crossover(k, low_limit_stoch_rsi)[i] == true 
        back_long += i
        back_long
    if ta.crossunder(k, up_limit_stoch_rsi)[i] == true 
        back_short += i
        back_short

// bgcolor(back_long>0?color.rgb(153, 246, 164, 54):na)
// bgcolor(back_short>0?color.rgb(246, 153, 153, 54):na)

buy_signal = false
sell_signal = false

if direction2 < 0 and direction1 < 0 and back_long > 0
    buy_signal := true
    buy_signal

if direction2 > 0 and direction1 > 0 and back_short > 0
    sell_signal := true
    sell_signal


//bgcolor(buy_signal  ? color.new(color.lime,90) : na ,title="BUY bgcolor")
plotshape( buy_signal[1] == false and  strategy.opentrades == 0 and Time_interval and buy_signal  ? supertrend2 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)

//bgcolor(sell_signal  ? color.new(color.red,90) : na ,title="SELL bgcolor")
plotshape(sell_signal[1] == false and strategy.opentrades == 0 and Time_interval and sell_signal  ? supertrend2 : na , title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)


// Strategy entries 
if strategy.opentrades == 0 and Time_interval and buy_signal and ( trade_direction == 'LONG' or trade_direction == 'BOTH')
    strategy.entry('Long_Open', strategy.long, qty=dollar / close, alert_message=Long_message_open)

if strategy.opentrades == 0 and Time_interval and sell_signal and ( trade_direction == 'SHORT' or trade_direction == 'BOTH')
    strategy.entry('Short_Open', strategy.short, qty=dollar / close, alert_message=Short_message_open)


// Strategy Close
if close < supertrend1 and strategy.position_size > 0 
    strategy.exit('Long_Close',from_entry = "Long_Open", stop=close, qty_percent=100, alert_message=Long_message_close)

if close > supertrend1 and strategy.position_size < 0 
    strategy.exit('Short_Close',from_entry = "Short_Open", stop=close, qty_percent=100, alert_message=Short_message_close)