Stratégie de négociation à court terme basée sur l'indicateur stochastique avec stop loss élastique

Auteur:ChaoZhang est là., Date: 28 septembre 2023 à 10h45
Les étiquettes:

Résumé

Cette stratégie utilise l'indicateur d'oscillateur stochastique pour déterminer les conditions de marché de surachat et de survente pour le trading à court terme.

La logique de la stratégie

Logique d'entrée

L'indicateur de l'oscillateur stochastique se compose de la ligne %K et de la ligne %D. Lorsque la ligne %K traverse au-dessus de la ligne %D, un signal d'achat croisé doré est généré. Lorsque la ligne %K traverse au-dessous de la ligne %D, un signal de vente croisée mortelle est déclenché. Cette stratégie suit simplement les croisements sur l'indicateur stochastique pour déterminer les entrées.

Plus précisément, lorsqu'il y a une croix dorée sur l'indicateur stochastique, si la valeur de %K est inférieure à 80 (non suracheté), une position longue sera prise.

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20

Arrêtez la logique de la perte

Cette stratégie utilise une approche de stop loss élastique, fixant le prix de stop sur la base des points pivots précédents, comme indiqué ci-dessous:

piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)

stoploss_long=valuewhen(piv_low,piv_low,0)
stoploss_short=valuewhen(piv_high,piv_high,0) 

Les pivots représentent des niveaux de support et de résistance importants. Si le prix dépasse le niveau de pivot, la position sera fermée et le prix de stop loss suivra élastiquement les points de pivot changeants.

En outre, le prix d'arrêt prend également en compte les prix les plus élevés et les plus bas de la période en cours pour une optimisation ultérieure:

if GoLong
    stoploss_long := low<pl ? low : pl
if GoShort
    stoploss_short := high>ph ? high : ph

Les avantages

  1. Utiliser le Stochastique pour éviter de courir après les sommets et les bas;

  2. Le stop loss élastique suit les changements du marché et optimise le prix du stop;

  3. L'arrêt des pertes basé sur la rupture du point de pivot est plus efficace;

  4. L'optimisation du prix d'arrêt en utilisant les prix actuels les plus élevés et les plus bas rend l'arrêt plus précis.

Risques et solutions

  1. Risque de faux signaux de Stochastique

    • Solution: confirmer les signaux avec d'autres indicateurs pour éviter les faux signaux
  2. Résultats de l'analyse de risque

    • Solution: Réduisez la distance d'arrêt ou utilisez des méthodes comme Chandelier Exit
  3. Risque de fréquence de négociation élevée et de commissions

    • Solution: assouplir les règles d'entrée pour réduire le nombre de transactions

Directions d'optimisation

  1. Optimiser le stop loss, en utilisant des méthodes telles que Chandelier Exit, trailing stop, stop loss oscillant, etc.

  2. Optimiser les règles d'entrée avec d'autres indicateurs pour éviter les faux signaux stochastiques

  3. Optimiser la prise de bénéfices, en utilisant la cible de bénéfices à la traîne, l'objectif de bénéfices oscillant, etc. pour augmenter la rentabilité

  4. Ajouter à la gestion du risque par transaction la dimension de position, telle que la quantité fixe par transaction, le pourcentage de risque fixe, etc.

  5. Optimiser les paramètres tels que les périodes K, D, lissage, etc. basé sur les différents marchés

Résumé

Cette stratégie est basée sur le stochastique suracheté/survendu et gère le risque avec un stop loss élastique. Elle a l'avantage d'éviter de poursuivre l'élan, des arrêts efficaces, mais comporte également des risques de faux signaux. Des améliorations futures peuvent être apportées aux entrées, aux arrêts, aux sorties, à la gestion des risques, etc.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
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/
// © Peter_O

//@version=4
//strategy(title="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000)

// This script was created for educational purposes only.
// It is showing how to create pending orders and cancel them
// Together with syntax to send these events through TradingView alerts system
// All the way to brokers for execution

TakeProfitLevel=input(400)

// **** Entries logic **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
// plot(k, title="%K", color=color.blue)
// plot(d, title="%D", color=color.orange)
// h0 = hline(80)
// h1 = hline(20)
// fill(h0, h1, color=color.purple, transp=75)

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high

pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort 
    stoploss_short := high>ph ? high : ph
plot(stoploss_long, color=color.lime, title="stoploss_long")
plot(stoploss_short, color=color.red, title="stoploss_short")
// } End of Pivot-points and stop-loss logic

CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0
CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0
entry_distance=input(10, title="Entry distance for stop orders")

plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny)
plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny)

strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.cancel("Long", when = CancelLong)
strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
strategy.cancel("Short", when = CancelShort)

if GoLong
    alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if CancelLong
    alertsyntax_cancellong='cancel long'
    alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close)
if CancelShort
    alertsyntax_cancelshort='cancel short'
    alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)
    


Plus de