Stratégie dynamique de soutien et de résistance basée sur des données historiques

Auteur:ChaoZhang est là., Date: 2023-11-28 17h13
Les étiquettes:

img

Résumé

Cette stratégie calcule dynamiquement les niveaux de support et de résistance en fonction des prix historiques élevés, bas et de fermeture, et génère des signaux de trading en conséquence.

La logique de la stratégie

  1. Calculer la moyenne des prix hauts, bas et de clôture des périodes précédentes en tant que point pivot (PP).

  2. Calculer 3 lignes de support: S1 = 2PP - prix le plus élevé; S2 = PP - (R1-S1); S3 = prix le plus bas - 2(prix le plus élevé - PP).

  3. Calculer 3 lignes de résistance: R1 = 2PP - prix le plus bas; R2 = PP + (R1-S1); R3 = prix le plus élevé + 2(PP - prix le plus bas).

  4. Prenez une position longue lorsque le prix franchit les lignes de résistance, prenez une position courte lorsque le prix franchit les lignes de support.

Analyse des avantages

  1. Les niveaux dynamiques de soutien et de résistance basés sur des données historiques permettent de saisir rapidement les changements de la structure du marché.

  2. Les réglages de support et de résistance multicouches permettent une meilleure optimisation de la gestion des risques.

  3. Des signaux de trading simples et intuitifs et un mécanisme de stop loss.

Analyse des risques

  1. Les niveaux de prix de référence fournis par les données historiques peuvent devenir invalides dans des scénarios de forte volatilité.

  2. Le passage entre positions longues et courtes devrait tenir compte du coût de négociation.

  3. La qualité des données doit être assurée pour éviter les erreurs de calcul.

Directions d'optimisation

  1. Considérez l'incorporation de plus de références de données historiques telles que la moyenne mobile sur 100 jours, etc.

  2. Optimiser la taille des positions, par exemple en ajustant la taille des positions en fonction de la volatilité.

  3. Ajoutez des stratégies de stop loss telles que le stop loss de suivi ou le stop loss basé sur le risque.

Résumé

Cette stratégie fournit des niveaux de prix de référence de support et de résistance à plusieurs niveaux basés sur l'histoire. Elle a une logique simple et directe adaptée aux positions à moyen et long terme. Pendant ce temps, les risques en raison de la forte volatilité du marché et des coûts de négociation doivent être surveillés.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/06/2020
// Pivot points simply took the high, low, and closing price from the previous period and 
// divided by 3 to find the pivot. From this pivot, traders would then base their 
// calculations for three support, and three resistance levels. The calculation for the most 
// basic flavor of pivot points, known as ‘floor-trader pivots’, along with their support and 
// resistance levels.
//
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Pivot Point V2", shorttitle="Pivot Point V2", overlay = true)
res = input(title="Resolution", type=input.resolution, defval="D")
SellFrom = input(title="Sell from ", defval="R1", options=["R1", "R2", "R3"])
BuyFrom = input(title="Buy from ", defval="S1", options=["S1", "S2", "S3"])
width = input(1, minval=1)
reverse = input(false, title="Trade reverse")
xHigh  = security(syminfo.tickerid,res, high)
xLow   = security(syminfo.tickerid,res, low)
xClose = security(syminfo.tickerid,res, close)
vPP = (xHigh+xLow+xClose) / 3
vS1 = 2*vPP - xHigh 
vR1 = 2*vPP-xLow
vS2 = vPP - (vR1 - vS1)
vR2 = vPP + (vR1 - vS1)
vS3 = xLow - 2 * (xHigh - vPP)
vR3 = xHigh + 2 * (vPP - xLow) 
pos = 0
S = iff(BuyFrom == "S1", vS1, 
      iff(BuyFrom == "S2", vS2,
         iff(BuyFrom == "S3", vS3,0)))
B = iff(SellFrom == "R1", vR1, 
      iff(SellFrom == "R2", vR2,
         iff(SellFrom == "R3", vR3,0)))
pos := iff(close > B, 1,
       iff(close < S, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Plus de