Stratégie de Martingale avec plage de moyennes mobiles élargie pour la négociation d'actions

Auteur:ChaoZhang est là., Date: 2023-11-02 17:16:08 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie identifie les tendances en élargissant l'intervalle entre les moyennes mobiles. Lorsqu'une tendance à la hausse est identifiée, elle construit progressivement des positions longues pour tirer profit de la tendance.

La logique de la stratégie

  1. La valeur de la valeur de l'indice de change est la valeur de la valeur de l'indice de change, qui est la valeur de la valeur de l'indice de change.

  2. Lorsque le prix dépasse les MAs, il indique une tendance à la hausse.

  3. Après avoir pris une position, continuez la pyramide lorsque le prix continue d'augmenter.

  4. Lorsque le prix tombe en dessous du MA, fermez les longs pour arrêter la perte. Le stop loss flotte avec le prix d'entrée.

  5. Cela permet aux positions pyramidales de tirer profit d'une tendance, tout en définissant un stop loss pour contrôler les risques.

Analyse des avantages

  1. La large plage d'AM aide à identifier clairement les tendances.

  2. La pyramide crée des rendements plus élevés sur les tendances.

  3. Le stop loss dynamique tire profit des tendances tout en limitant les pertes.

  4. Convient pour le trading à long terme.

Analyse des risques

  1. La tendance doit être correctement identifiée, sinon les pertes s'accélèrent.

  2. La pyramide doit être contrôlée afin d'éviter les risques d'appel de marge.

  3. Le stop loss doit être réglé de manière raisonnable, trop large peut élargir les pertes, trop serré peut provoquer des coups de fouet.

  4. La liquidité doit être prise en considération, les actifs à faible liquidité ne conviennent pas.

Suggestions d'optimisation

  1. Ajoutez plus d'indicateurs comme RSI, KD pour confirmer les tendances et éviter de fausses ruptures.

  2. Optimiser les périodes d'AM en fonction des caractéristiques des actifs afin de trouver les meilleures combinaisons.

  3. Rechercher des modèles pyramidaux optimaux pour contrôler les risques liés à la taille de la position.

  4. Considérez la prise partielle de bénéfices pour bloquer les gains et réduire les retraits.

  5. Définir un stop-loss basé sur la volatilité des actifs pour équilibrer la protection et éviter les échecs.

Résumé

Cette stratégie identifie les tendances avec une plage de MA plus large, les positions pyramidales pour tirer profit des tendances et définit un stop loss flottant pour contrôler les risques.


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

//@version=2
// strategy(title='Super Simple Martingale Buying', shorttitle="Martingale v5",overlay=true, pyramiding = 10, initial_capital=1, calc_on_order_fills = true)


// Revision:        1
// Author:          @ToS_MavericK

// === INPUT SMA ===
EMA1  = input(55)
EMA2  = input(89)

Amount  = input(defval = 6, type = float, title = "Max open Orders", minval = 1, step = 1)
Multiplier  = input(defval = 2  , type = float, title = "Multiplier", minval = 1, step = 0.1)
BuyLvl  = input(defval = 1, type = float, title = "BuyLvl", minval = 0, step = 0.1)
Profit  = input(3)
DoubleUpLimit    = input(2)

// === INPUT BACKTEST RANGE ===
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear    = input(defval = 2019, title = "From Year", minval = 2012)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)

RSIFilter = input(false)
minRSI  = input(defval = 35,  title = "RSI", minval = 1, step = 1)
lengthRSI = input(14, minval=1)
src = input(close, title="RSI Source")

StochRSIFilter = input(false)
lengthStoch = input(14, minval=1)
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)

rsi = rsi(src, lengthRSI)
k = sma(stoch(rsi, rsi, rsi, lengthStoch), smoothK)
d = sma(k, smoothD)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)

buy  =  (rsi < minRSI or RSIFilter == false) and ((crossover(k,d) and k < 20) or StochRSIFilter == false) and ((close < vEMA1 * (1 - BuyLvl/100) and vEMA1 < vEMA2) or (close < vEMA2 * (1 - BuyLvl/100) and vEMA2 < vEMA1))

BuyPrice = strategy.position_avg_price * (1 - DoubleUpLimit/50)
SellPrice = strategy.position_avg_price * (1 + Profit/(100*strategy.opentrades))

// Exit first, due to the limit orders, which can be hit on the same bar
strategy.exit("EMA1", limit = SellPrice, when = window() and strategy.opentrades > 0)
strategy.close("EMA1",when = time > finish) // close positions at the end of the specified time period

// Normal entry
strategy.entry("EMA1", strategy.long,qty = strategy.equity/ (close * pow(2,Amount - 1)), when = window() and strategy.opentrades == 0 and buy)
// Martingale
strategy.entry("EMA1", strategy.long,qty = strategy.position_size, limit = strategy.position_avg_price * (1 - DoubleUpLimit/100), when = window() and strategy.opentrades == 1)
strategy.entry("EMA1", strategy.long,qty = strategy.position_size, limit = BuyPrice, when = window() and strategy.opentrades > 1 and strategy.opentrades < Amount)

plot(vEMA1, title = 'EMA1', color = orange, linewidth = 2, style = line)
plot(vEMA2, title = 'EMA2', color = yellow, linewidth = 2, style = line)
plot(BuyPrice[1], title = 'BuyPrice', color = red, linewidth = 2, style = line)
plot(SellPrice[1], title = 'SellPrice', color = green, linewidth = 2, style = line)

Plus de