Stratégie de rupture de l'élan basée sur l'arrêt des pertes d'amplitude interne

Auteur:ChaoZhang est là., Date: 23 janvier 2023 14:14:58
Les étiquettes:

img

Résumé

Cette stratégie identifie les lignes K anormalement en hausse pour juger s'il existe un marché unilatérale avec une volatilité explosive. Lorsqu'une ligne K anormalement en hausse est identifiée, elle définit un ordre de limite de prise de profit près du sommet de cette ligne K, tout en définissant un stop loss près du bas de la ligne K précédente, formant une position longue avec un contrôle du risque d'effet de levier élevé. La stratégie surveille en permanence la ligne de stop loss et annule immédiatement l'ordre de stop loss si le prix dépasse la ligne de stop loss.

Principe de stratégie

Cette stratégie juge principalement la formation de lignes K anormalement en hausse. Lorsqu'une ligne K avec close>open et highlow[1] apparaît, elle croit qu'il y a une période actuelle de marché anormalement en hausse. Un signal d'entrée long sera généré, avec un prix d'entrée proche du prix le plus élevé de la ligne K actuelle. Le prix de stop loss est également fixé près du prix le plus bas de la ligne K précédente pour former un modèle de contrôle du risque de levier élevé.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle peut capturer la volatilité explosive à court terme sur le marché pour atteindre un trading à très haute fréquence. En même temps, en définissant une plage de stop loss plus large, un effet de levier élevé peut être utilisé pour le trading contrôlé par le risque afin d'obtenir de plus grands rendements. En outre, la stratégie réalise une surveillance automatique de la ligne de stop loss. Lorsque le prix franchit la ligne de stop loss vers le bas, elle peut rapidement arrêter la perte pour contrôler efficacement les risques de trading.

Analyse des risques

Le principal risque de cette stratégie est que le jugement de la flambée anormale est inexact et qu'il est incapable de capturer efficacement la volatilité explosive du marché, ce qui entraîne une probabilité plus élevée de mauvaise appréciation des signaux de trading. En outre, la définition de positions de stop loss aura également un grand impact sur les risques et les rendements de trading. Si le stop loss est trop lâche, le risque de perte de trading augmentera. Si le stop loss est trop serré, il peut ne pas être en mesure de suivre efficacement les gains sur le marché.

Directions d'optimisation

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

  1. Les critères pour juger des surtensions anormales peuvent introduire plus d'indicateurs ou de modèles d'apprentissage en profondeur pour aider à des jugements afin d'améliorer la précision des jugements des signaux de trading dans la stratégie.

  2. L'établissement de positions de stop loss peut faire l'objet d'une grande quantité d'analyses statistiques et d'optimisation pour trouver de meilleures positions de stop loss pour équilibrer les risques commerciaux et les niveaux de rendement.

  3. Des mécanismes de contrôle du risque de négociation plus fréquents peuvent être introduits, tels que le filtrage du volume des transactions, la vérification de l'écart de fourchette, etc., afin d'éviter la probabilité d'être pris au piège.

  4. Les critères d'entrée de la stratégie peuvent être ajustés et ne doivent pas être limités à des lignes K anormalement fortes.

Résumé

Cette stratégie est une stratégie de trading à haute fréquence typique, appartenant à une stratégie de rupture à court terme. Elle capture la volatilité explosive des mouvements du marché pour atteindre un trading à très haute fréquence. En même temps, elle utilise un contrôle des risques de stop-loss et des mécanismes d'effet de levier élevé pour contrôler les risques.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 08:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
// I needed to test/verify the functionality for canceling an open limit order in a strategy and also work thru the pieces needed to set the position sizing so each loss is a set amount. 
// This is not meant to be dropped into a chart but rather gives the code/logic in order to use in your own script w/alerts or strategy. Hope it helps. 
 
//@version=4
strategy("Strategy Test - Cancel Limit Order and Position Sizing", overlay=true, precision=4)
 
/////////////////
// Backtest Period Selection
 
testStartYear = input(2020, "Backtest Start Year",minval=1980)
testStartMonth = input(2, "Backtest Start Month",minval=1,maxval=12)
testStartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
 
testStopYear = input(2020, "Backtest Stop Year",minval=1980)
testStopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
 
testPeriod() => time >= true
 
//////////////
// Inside Bar
bull_inside_bar = close>open and high<high[1] and low>low[1]

// Set Levels
bull_inside_bar_sl = valuewhen(bull_inside_bar, low[1], 0) - (1*syminfo.mintick)
bull_breakout_price = valuewhen(bull_inside_bar, high, 0) + (1*syminfo.mintick)
entry_buy   = high
inside_bar_dist = entry_buy - bull_inside_bar_sl
inside_bar_be = entry_buy + (inside_bar_dist * 1)
inside_bar_tgt = entry_buy + (inside_bar_dist * 2)

///////////////////
// Position Sizing 
//////////////////
// For each trade setup that fires in this scenario we want to set our total loss amount in USD, so every trade that loses is lets say $1 and the 2:1 target would be $2 in this example. 
// The math logic for this take the risk amount and divide by the stop percentage, take that number and divide by leverage amount chosen. Stop percentage is a variable below if questions on that. 
//
// Taken from @JoshuaMorris (shout out to the UK peeps) position sizing google doc so thank you sir. 
// Would be used if risking based on percentage of a portfolio. Leaving code snippets here in case that's the direction someone wants to go. 
// xbt_price = security("BITMEX:XBTUSD", "D", close)
// account_size_xbt = input(1, "Account Size (XBT)", type=input.float)
// account_size_usd = (account_size_xbt * xbt_price)
// percentage_risk = input(0.01, "Personal Risk Percent - Default is 1%", type=input.float)
// personal_risk = (account_size_usd * percentage_risk)
// position_size_usd = (personal_risk) / risk_percent
// leverage_req = position_size_usd / account_size_usd

// Will want to hard code leverage as 1x, 5x, 10x etc and dont need it to automagically be set as is above. If you're doing 100x you are gnarly haha. 
leverage_amount = input(title="Leverage Amount Desired", type=input.integer, defval=10, options=[1, 2, 3, 5, 10, 25, 50, 100])
risk_amount = input(title="Risk Total Per Trade in USD", type=input.integer, defval=1, minval=1, step=1)

// Reminder this is for Longs. Math needs to be changed a bit for Shorts. This is the information using the long/short tool would give us if doing manually. 
stop_percent = inside_bar_dist / (entry_buy)
pos_size_no_lev = risk_amount / stop_percent
pos_size_with_lev = pos_size_no_lev / leverage_amount 

//////////////
// Strategy Section

if testPeriod()
    strategy.entry(id="Long", long=true, qty=1, limit=9320.00, when=bull_inside_bar)
    strategy.cancel(id="Long", when = low < 9310)
// as a test swap the price to be above the limit or below to see the cancel in play.
 
//////////////
// Plot Section
plotchar(bull_inside_bar, title="bull_inside_bar", char="🐂", location=location.belowbar, offset=-0, color=color.green, transp=25)
plot(bull_inside_bar_sl, title="bull_inside_bar_sl", transp=100)
plot(entry_buy, title="entry_buy", transp=100)
plot(inside_bar_dist, title="inside_bar_dist", transp=100)
plot(stop_percent, title="stop_percent", transp=100)
plot(pos_size_no_lev, title="pos_size_no_lev", transp=100)
plot(pos_size_with_lev, title="pos_size_with_lev", transp=100)

// Hidden Plots // For Data Window Eyes Only // 
// plot(longCondition==true?1:0, title="Long Condition", transp=100)
// plot(xbt_price, title="XBT Price", transp=100)
// plot(account_size_usd, title="Account Size USD", transp=100)
// plot(risk_percent, title="risk_percent", transp=100)
// plot(position_size_usd, title="position_size_usd", transp=100)
// plot(leverage_req, title="leverage_req", transp=100)

// END //

Plus de