Stratégie de rupture de momentum long-short basée sur un stop de gain interne


Date de création: 2023-11-23 14:14:58 Dernière modification: 2023-11-23 14:14:58
Copier: 0 Nombre de clics: 675
1
Suivre
1617
Abonnés

Stratégie de rupture de momentum long-short basée sur un stop de gain interne

Aperçu

La stratégie détermine si le marché actuel est confronté à une situation unilatérale soudaine en identifiant des lignes K de hausse anormale. Lorsqu’une ligne K de hausse anormale est détectée, un ordre de stop-loss est placé près du sommet de cette ligne K. Un ordre de stop-loss est placé près du bas de la ligne K précédente, formant ainsi un ordre de contrôle du risque de forte levier.

Principe de stratégie

La stratégie est principalement utilisée pour déterminer la formation de lignes K de hausse anormale, lorsque close>open et highlow[1] lorsque la ligne K est considérée comme une tendance à une hausse anormale du cycle actuel. Un signal d’entrée long est alors défini, le prix d’entrée étant le plus élevé de la ligne K actuelle. Le prix d’arrêt est également défini comme le prix le plus bas de la ligne K précédente.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle permet de capturer les courts épisodes d’extrême volatilité du marché, permettant des transactions à très haute fréquence. En outre, la stratégie permet de contrôler les risques de négociation en utilisant un levier élevé, ce qui permet d’obtenir des gains plus importants. En outre, la stratégie permet de surveiller automatiquement les limites de perte, permettant de contrôler rapidement et efficacement les risques de négociation lorsque les prix franchissent les limites de perte.

Analyse des risques

Le principal risque de cette stratégie est que la mesure des gains anormaux est inexacte et ne peut pas capturer efficacement les mouvements soudains, ce qui entraîne une forte probabilité d’erreur de jugement des signaux de négociation. De plus, le paramètre de la position d’arrêt-perte a également un impact important sur le risque et le rendement des transactions.

Direction d’optimisation

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

  1. Les critères de jugement de la hausse anormale peuvent être introduits dans des indicateurs supplémentaires ou des modèles d’apprentissage en profondeur pour aider à juger et améliorer l’exactitude des jugements des signaux de trading stratégiques.

  2. Le paramètre de position de stop-loss permet une analyse statistique et optimisée importante pour trouver la position de stop-loss la plus optimale pour équilibrer les niveaux de risque et de gain de la transaction.

  3. Il est possible d’introduire plus de mécanismes de contrôle des transactions à haute fréquence, tels que le filtrage du volume de transactions, la vérification des ruptures de zone, etc., pour éviter la probabilité d’être enfermé.

  4. Les critères d’admission stratégiques peuvent être adaptés, et ne doivent pas être limités à une augmentation anormale de la ligne K. Ils peuvent être déterminés en combinaison avec plus d’indicateurs et de modèles, formant un mécanisme de vérification multiple.

Résumer

Cette stratégie est une stratégie de trading à haute fréquence typique de la catégorie des stratégies de rupture de courte ligne. Elle permet la négociation à haute fréquence en capturant les fluctuations anormales soudaines de la tendance.

Code source de la stratégie
/*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 //