Tendance à la suite de la stratégie du réseau

Auteur:ChaoZhang est là., Date: le 12 août 2023 12:05:17
Les étiquettes:

img

Résumé

Cette stratégie est une tendance suivant une stratégie de grille qui ne va que longtemps et ne va pas court, en choisissant des périodes de temps où la tendance principale est à la hausse. La taille de grille par défaut est 1xATR, en construisant 1, 2, 3 niveaux de grille vers le bas pour poursuivre les ordres, et la 5ème grille arrête la perte. Lorsque la position vide atteint la grille précédente, toute la grille monte pour suivre le prix.

La logique de la stratégie

  1. Utilisez les lignes EMA pour juger de la direction de la tendance majeure, EMA12 supérieur à EMA144 signifie que la tendance majeure est à la hausse
  2. Ouvrez uniquement des positions longues lorsque la tendance principale est à la hausse
  3. La taille de grille par défaut est 1xATR, le multiplicateur peut être ajusté
  4. Construire 1, 2, 3 niveaux de grille vers le bas pour suivre le prix et ouvrir des positions longues séparément
  5. Réglez le point de stop-loss à la 5ème grille
  6. Après avoir ouvert des positions, définissez des points stop-loss et des points profit
  7. Fermer les positions lorsque le prix franchit le point de prise de profit à la hausse
  8. Fermer les positions lorsque le prix atteint le point stop loss à l'automne
  9. Après que toutes les positions sont fermées, si le prix traverse à nouveau la dernière grille, recalculer l'emplacement de la grille et la quantité pour suivre vers le haut

Cette stratégie combine l'EMA pour déterminer la direction de la tendance majeure et le trading de grille pour suivre le prix. Elle peut obtenir de plus grands rendements dans une tendance haussière. La grille définit plusieurs points de prix pour ouvrir des positions séparément, ce qui réduit le risque par position. Les paramètres de stop loss et take profit verrouillent les profits et limitent également les pertes maximales. Après la fermeture de toutes les positions, la stratégie peut recalculer de nouveaux niveaux élevés de grilles pour ouvrir à nouveau des positions, maximisant les profits.

Analyse des avantages

  1. Utiliser l'EMA pour déterminer la direction de la tendance principale, éviter d'ouvrir des positions contre la tendance
  2. Le trading en réseau peut ouvrir des positions séparément pour réduire le risque d'une seule position
  3. Arrêter les pertes et prendre des bénéfices verrouiller les bénéfices, contrôler les pertes maximales
  4. Après avoir fermé toutes les positions, recalculer les grilles pour continuer à chasser peut élargir l'espace de profit

Le principal avantage est la combinaison du trading de tendance et du trading de grille, ce qui assure la justesse de la direction de la tendance et permet également de disperser les risques du trading de grille.

Analyse des risques

  1. Le jugement de tendance majeure peut être erroné, entrant dans la mauvaise direction
  2. Volatilité latérale significative qui entraîne de lourdes pertes dans les réseaux
  3. Stop-loss déclenché trop vite, fermant toutes les positions
  4. Impossible de revenir au point d'entrée optimal après le retrait

Le risque principal est le mauvais jugement de la direction de la tendance majeure, ce qui entraînera l'ouverture de positions contre la tendance et d'énormes pertes. En outre, s'il y a une forte volatilité latérale avec plusieurs réseaux pris au piège, les pertes seraient exacerbées. De plus, des baisses de prix rapides peuvent déclencher un stop loss et fermer toutes les positions, perdant ainsi les opportunités de profit ultérieures.

La précision du jugement de la tendance majeure peut être améliorée en optimisant les paramètres de l'EMA. L'ajustement de l'intervalle de grille et de la taille de la première entrée peut également contrôler les pertes globales.

Directions d'optimisation

Cette stratégie peut également être optimisée dans les aspects suivants:

  1. Optimiser les paramètres de l'EMA pour améliorer la précision du jugement des principales tendances
  2. Ajuster les intervalles et les quantités de grille pour optimiser le rapport risque/rendement
  3. Améliorer la logique du stop loss et du take profit, par exemple le partiel take profit, le trailing stop loss, etc.
  4. Ajouter plus de restrictions aux conditions de réentrée pour éviter une réentrée prématurée lors des retraits
  5. Incorporer plus d'indicateurs pour déterminer le moment optimal d'entrée, par exemple les modèles de chandeliers, la sensibilité de l'indicateur, etc.
  6. Ajouter la détection des anomalies pour éviter d'énormes pertes dans des conditions de marché anormales

Grâce à ces mesures d'optimisation, la stratégie peut obtenir des bénéfices plus élevés lors de tendances importantes, tout en contrôlant les risques et en réduisant les pertes en cas de volatilité latérale normale.

Résumé

Cette stratégie combine le trading de tendance et le trading de grille de manière organique. Elle utilise l'EMA pour déterminer la direction majeure et utilise le trading de grille pour ouvrir des positions séparément pour poursuivre les tendances. Avec une bonne gestion des risques, y compris des mécanismes de stop loss, de prise de profit et de recalculation de grille, cette stratégie peut générer des profits décents pendant les tendances majeures, tout en contrôlant les risques. Des optimisations supplémentaires sur les paramètres et la précision du jugement peuvent conduire à des profits plus élevés.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 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/
// © zxcvbnm3260

//@version=5
strategy("grid strategy long", overlay=true)


// 版本更新记录:
// v1.0 2021/11/09 只做多、不做空,选择大趋势向上的时间段。网格大小默认为1倍ATR,往下1、2、3个网格吃单,第5个网格止损。空仓时到达往上一个网格则网格整体抬升。(Only go long, not short, choose a time period when the general trend is up. The default grid size is 1x ATR, the next one, two, and three grids will take orders, and the fifth grid will stop loss. When the empty position reaches the upper grid, the grid as a whole rises.)


X_ATR = input.float(title='网格大小是多少倍ATR?', defval = 1)


// 1.基础变量
ema169 = ta.ema(close, 169)
ema144 = ta.ema(close, 144)
ema12 = ta.ema(close, 12)

ema576 = ta.ema(close, 576)
ema676 = ta.ema(close, 676)

plot(ema169, color=color.new(color.orange, 0), linewidth=2)
// plot(ema144, color=color.orange)
plot(ema12,  color=color.blue)
// plot(ema676, color=color.orange, linewidth=1)

mtr = math.max(high - low, math.abs(close[1] - high), math.abs(close[1] - low))
atr = ta.ema(mtr, 30)

is_0930 = hour(time, 'GMT-4') == 9  and minute(time, 'GMT-4') == 30
is_1500 = hour(time, 'GMT-4') == 15 and minute(time, 'GMT-4') == 00
is_1530 = hour(time, 'GMT-4') == 15 and minute(time, 'GMT-4') == 30

is_yangxian = close>open
is_yinxian = close<open

// 2.基本趋势标记

big_trend  = ema12 >= ema169 ? 1 : 0
big_trend2 = ema12 <= ema169 ? 1 : 0

// 背景的变色处理:
bgcolor(big_trend == 1 ? color.new(color.green, 90) : color.new(color.red, 90) )

// 3.网格点位初始化

grid_size = atr * X_ATR // 网格大小
        
price_entry1 = open - grid_size*1
price_entry2 = open - grid_size*2
price_entry3 = open - grid_size*3
price_stop_loss = open - grid_size*5

price_exit1 = price_entry1 + grid_size*1
price_exit2 = price_entry2 + grid_size*1
price_exit3 = price_entry3 + grid_size*1

qty1 = int(1000/price_entry1)
qty2 = int(1000/price_entry2)
qty3 = int(1000/price_entry3)


// 标出各种点位
slm_lines_time(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)=>
    time2 = time + 1000*3600*24*5
    line.new(time, price_stop_loss, time2, price_stop_loss, color=color.red, xloc = xloc.bar_time, width=2)  // 止损位
    line.new(time, price_entry1, time2, price_entry1, color=color.green, xloc = xloc.bar_time)  // 
    line.new(time, price_entry2, time2, price_entry2, color=color.green, xloc = xloc.bar_time)  // 
    line.new(time, price_entry3, time2, price_entry3, color=color.green, xloc = xloc.bar_time)  // 
    line.new(time, price_exit1,  time2, price_exit1,  color=color.green, xloc = xloc.bar_time, width=2)  // 

slm_lines(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)=>
    line.new(bar_index, price_stop_loss, bar_index[5], price_stop_loss, color=color.red, xloc = xloc.bar_index, width=2)  // 止损位
    line.new(bar_index, price_entry1, bar_index[5], price_entry1, color=color.green, xloc = xloc.bar_index)  // 
    line.new(bar_index, price_entry2, bar_index[5], price_entry2, color=color.green, xloc = xloc.bar_index)  // 
    line.new(bar_index, price_entry3, bar_index[5], price_entry3, color=color.green, xloc = xloc.bar_index)  // 
    line.new(bar_index, price_exit1,  bar_index[5], price_exit1,  color=color.green, xloc = xloc.bar_index, width=2)  // 


// 4.网格点位更新和下单

is_entry0 = big_trend==1 and year>=2020

var is_entry = false

// 未进场时:
if is_entry0 and not is_entry
    is_entry := true
    
    grid_size := atr * X_ATR // 网格大小
    
    price_entry1 := close - grid_size*1
    price_entry2 := close - grid_size*2
    price_entry3 := close - grid_size*3
    price_stop_loss := close - grid_size*5
    
    price_exit1 := price_entry1 + grid_size*1
    price_exit2 := price_entry2 + grid_size*1
    price_exit3 := price_entry3 + grid_size*1
    
    qty1 := int(1000/price_entry1)
    qty2 := int(1000/price_entry2)
    qty3 := int(1000/price_entry3)
    
    // slm_lines(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)
    
    strategy.entry("open1", strategy.long, qty1, limit = price_entry1)
    strategy.entry("open2", strategy.long, qty2, limit = price_entry2)
    strategy.entry("open3", strategy.long, qty3, limit = price_entry3)
    
    strategy.exit("close1", qty = qty1, limit = price_exit1, stop = price_stop_loss)
    strategy.exit("close2", qty = qty2, limit = price_exit2, stop = price_stop_loss)
    strategy.exit("close3", qty = qty3, limit = price_exit3, stop = price_stop_loss)

// 已进场的各类情况

// 1.止损
if is_entry and close <= price_stop_loss
    strategy.close_all()
    is_entry := false

// 2.网格抬升
if is_entry and close >= price_exit1
    is_entry := false
        




Plus de