Transformateurs de backtest Squeeze v2.0


Date de création: 2024-04-28 14:09:26 Dernière modification: 2024-04-28 14:09:26
Copier: 0 Nombre de clics: 536
1
Suivre
1617
Abonnés

Transformateurs de backtest Squeeze v2.0

Aperçu

Extreme Retracement Metamorphosis Gold v2.0 est un système de trading quantitatif basé sur une stratégie de type extrême. Il effectue des retraits sur des stratégies dans des intervalles de temps spécifiques en définissant des paramètres tels que le pourcentage d’entrée, de perte et de stop, ainsi que le temps de maintien maximal. La stratégie prend en charge le trading multidirectionnel, permettant de définir de manière flexible la direction de la transaction pour faire plus ou moins.

Principe de stratégie

  1. Tout d’abord, déterminez l’heure de début et l’heure de fin de la période de réévaluation en fonction des paramètres de la période de réévaluation définis par l’utilisateur.
  2. Au cours de la période de réévaluation, si aucune position n’est actuellement détenue et que le prix touche le prix d’entrée (calculé en fonction du pourcentage d’ouverture de la position), une position est ouverte et un prix de stop loss et de stop stop est défini en même temps (calculé en fonction du pourcentage de stop loss et de stop stop).
  3. Si la position est déjà détenue, l’ordre de stop-loss précédent est annulé et un nouveau prix de stop-loss est réinitialisé (calculé sur la base du prix moyen de la position actuelle).
  4. Si vous avez défini une durée de maintien maximale, vous devrez forcer la liquidation lorsque la durée de maintien atteint la valeur maximale.
  5. La stratégie prend en charge les transactions à la fois en plus et en moins.

Avantages stratégiques

  1. Les paramètres sont flexibles et peuvent être ajustés en fonction des différentes conditions du marché et des besoins des transactions.
  2. Il est possible d’obtenir des bénéfices dans différentes conditions de marché en supportant des transactions multidirectionnelles.
  3. Il offre de nombreuses options de réglage de la période de récupération pour faciliter la récupération et l’analyse des données historiques.
  4. Les paramètres Stop Loss et Stop Stop permettent de contrôler efficacement les risques et d’améliorer l’efficacité de l’utilisation des fonds.
  5. Le réglage de la durée maximale de détention permet d’éviter le risque de détention excessive.

Risque stratégique

  1. Les réglages des prix d’entrée, des prix d’arrêt et des prix d’arrêt ont une grande influence sur les gains de la stratégie, et des paramètres mal réglés peuvent entraîner des pertes.
  2. En cas de forte volatilité du marché, il peut arriver que le stop loss soit déclenché immédiatement après l’ouverture de la position, entraînant ainsi une perte.
  3. Si vous déclenchez un plafond de la période de détention maximale, vous risquez de manquer une opportunité de profit ultérieure.
  4. La stratégie peut être défectueuse dans certaines situations particulières (comme les marchés en crise).

Orientation de l’optimisation de la stratégie

  1. Il est possible d’envisager l’introduction de plus d’indicateurs techniques ou d’indicateurs de l’humeur du marché, afin d’optimiser les conditions d’entrée, d’arrêt et d’arrêt, d’améliorer la stabilité et la rentabilité de la stratégie.
  2. Pour le réglage de la durée maximale de détention, il est possible d’ajuster la dynamique en fonction de la volatilité du marché et des pertes et pertes de détention, afin d’éviter le coût d’opportunité que peut entraîner la liquidation à temps fixe.
  3. Pour les caractéristiques d’un marché de choc, il est possible d’ajouter des logiques telles que la rupture entre les zones de choc ou la confirmation d’un renversement de tendance, afin de réduire les coûts liés aux transactions fréquentes.
  4. Envisager d’intégrer des stratégies de gestion des positions et de gestion des fonds, afin de limiter les risques de transaction unique, d’améliorer l’efficacité et la stabilité de l’utilisation des fonds.

Résumer

Extreme Retracement Metamorphosis Gold v2.0 est un système de trading quantitatif basé sur une stratégie d’extrême, qui peut être négocié dans différents environnements de marché grâce à des paramètres flexibles et à la prise en charge des transactions multidirectionnelles. De plus, de nombreuses options de réglage de la période de retracement et des paramètres de stop-loss peuvent aider les utilisateurs à analyser les données historiques et à contrôler les risques. Cependant, la performance de la stratégie est fortement influencée par les paramètres du réglage.

Code source de la stratégie
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title="Squeeze Backtest by Shaqi v2.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0)
R0 = "6 Hours"
R1 = "12 Hours"
R2 = "24 Hours"
R3 = "48 Hours"
R4 = "1 Week"
R5 = "2 Weeks"
R6 = "1 Month"
R7 = "Maximum"

BL = "low"
BH = "high"
BO = "open"
BC = "close"
BHL= "mid (hl)"
BOC = "mid (oc)"

LONG = "LONG"
SHORT = "SHORT"

direction = input.string(title="Direction", defval=LONG, options=[LONG, SHORT], group="Squeeze Settings")
strategy.risk.allow_entry_in(direction == LONG ? strategy.direction.long : strategy.direction.short)
openPercent = input.float(1.4, "Open, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
closePercent = input.float(0.6, "Close, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
stopPercent = input.float(0.8, "Stop Loss, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
isMaxBars = input.bool(true, "Max Bars To Sell", inline="MaxBars", group="Squeeze Settings")
maxBars = input.int(10, title="", minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings")
bind = input.string(BC, "Bind", options=[BL, BH, BO, BC, BHL, BOC], group="Squeeze Settings")
isRange = input.bool(true, "Fixed Range", inline="Range", group="Backtesting Period")
rangeStart = input.string(R2, "", options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period")
periodStart = input(timestamp("12 Apr 2024 00:00 +0000"), "Backtesting Start", group="Backtesting Period")
periodEnd = input(timestamp("20 Apr 2024 00:00 +0000"), "Backtesting End", group="Backtesting Period")

int startDate = na
int endDate = na
if isRange
    if rangeStart == R0
        startDate := timenow - 21600000
        endDate := timenow
    else if rangeStart == R1
        startDate := timenow - 43200000
        endDate := timenow
    else if rangeStart == R2
        startDate := timenow - 86400000
        endDate := timenow
    else if rangeStart == R3
        startDate := timenow - 172800000
        endDate := timenow
    else if rangeStart == R4
        startDate := timenow - 604800000
        endDate := timenow
    else if rangeStart == R5
        startDate := timenow - 1209600000
        endDate := timenow
    else if rangeStart == R6
        startDate := timenow - 2592000000
        endDate := timenow
    else if rangeStart == R7
        startDate := time
        endDate := timenow
else 
    startDate := periodStart
    endDate := periodEnd
    
float bindOption = na
if bind == BL
    bindOption := low
else if bind == BH
    bindOption := high
else if bind == BO
    bindOption := open
else if bind == BC
    bindOption := close
else if bind == BHL
    bindOption := hl2
else
    bindOption := ohlc4

afterStartDate = (time >= startDate)
beforeEndDate = (time <= endDate)
periodCondition = true
notInTrade = strategy.position_size == 0
inTrade = strategy.position_size != 0

barsFromEntry = ta.barssince(strategy.position_size[0] > strategy.position_size[1])
entry = strategy.position_size[0] > strategy.position_size[1]
entryBar = barsFromEntry == 0
notEntryBar = barsFromEntry != 0
openLimitPrice = direction == LONG ? (bindOption - bindOption * openPercent) : (bindOption + bindOption * openPercent)

closeLimitPriceEntry = openLimitPrice * (direction == LONG ? 1 + closePercent : 1 - closePercent)
closeLimitPrice = strategy.position_avg_price * (direction == LONG ? 1 + closePercent : 1 - closePercent)

stopLimitPriceEntry = direction == LONG ? openLimitPrice - openLimitPrice * stopPercent : openLimitPrice + openLimitPrice * stopPercent
stopLimitPrice = direction == LONG ? strategy.position_avg_price - strategy.position_avg_price * stopPercent : strategy.position_avg_price + strategy.position_avg_price * stopPercent

if periodCondition and notInTrade
    strategy.entry(direction == LONG ? "BUY" : "SELL", direction == LONG ? strategy.long : strategy.short, limit = openLimitPrice, stop = stopLimitPriceEntry)
    strategy.exit("INSTANT", limit = closeLimitPriceEntry, stop = stopLimitPriceEntry, comment_profit = direction == LONG ? 'INSTANT SELL' : 'INSTANT BUY', comment_loss = 'INSTANT STOP')
if inTrade 
    strategy.cancel("INSTANT")
    strategy.exit(direction == LONG ? "SELL" : "BUY", limit = closeLimitPrice, stop = stopLimitPrice, comment_profit = direction == LONG ? "SELL" : "BUY", comment_loss = "STOP")
if isMaxBars and barsFromEntry == maxBars
    strategy.close_all(comment = "TIMEOUT STOP", immediately = true)



showStop = stopPercent <= 0.20

// plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=1)
// plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=1)
// plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=1)
plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=0)
plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=0)
plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=0)

plot(openLimitPrice, title="Trailing Open Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.blue : color.red, 30), offset=1)
plot(closeLimitPriceEntry, title="Trailing Close Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.red : color.blue, 80), offset=1)
plot(stopLimitPriceEntry, title="Trailing Stop Position Limit Order", style=plot.style_stepline, color=color.new(#c50202, 80), offset=1)