Stratégie de scalping intraday folle avec combinaison de deux indicateurs


Date de création: 2023-12-01 14:47:57 Dernière modification: 2023-12-01 14:47:57
Copier: 0 Nombre de clics: 857
1
Suivre
1619
Abonnés

Stratégie de scalping intraday folle avec combinaison de deux indicateurs

Aperçu

Cette stratégie combine les signaux d’achat et de vente des deux indicateurs TMO et AMA développés par LuxAlgo pour capturer les opportunités de début de tendance dans le cycle de compilation des chocs. Elle effectue un shorting supplémentaire après avoir satisfait à plusieurs conditions, telles que le signal d’achat et de vente de l’indicateur TMO, le pic d’achat et de vente de l’indicateur AMA, l’augmentation progressive de la quantité d’entités de la ligne K. La méthode de stop loss est le prix le plus bas de la ligne NK la plus récente.

Principe de stratégie

L’indicateur TMO reflète la dynamique des prix. Il appartient au type d’indicateur de choc, qui peut émettre un signal de transaction en cas de déviation des prix. L’indicateur AMA est un indicateur de moyenne mobile lisse.

La logique principale de cette stratégie est que l’indicateur TMO reflète la tendance des prix pour fournir un signal de négociation, l’indicateur AMA montre les zones où les prix peuvent être inversés, tout en combinant l’amplification d’entités de la ligne K pour confirmer le démarrage de la tendance. Leur combinaison peut donc améliorer le taux de réussite des transactions.

  1. Le TMO apparaît comme un signal multiple, c’est-à-dire que le prix s’écarte vers le haut et l’indicateur AMA apparaît comme une valeur maximale multiple
  2. Le TMO montre un signal de dépréciation, c’est-à-dire que le prix s’est détourné vers le bas et l’indicateur AMA montre un minimum de dépréciation
  3. Le nombre d’entités demandant les 3 dernières lignes K devient de plus en plus grand.

Ainsi, il résout le problème de faux signaux causés par un seul indicateur. La méthode de stop-loss choisit le prix le plus élevé ou le plus bas de la ligne N à la racine K la plus proche, ce qui permet de mieux contrôler le risque.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. La combinaison d’indicateurs améliore la précision du signal. Les indicateurs TMO et AMA se vérifient mutuellement, ce qui réduit les faux signaux et améliore la précision du signal.

  2. La stratégie vise à capturer le début de la tendance en combinant plusieurs conditions telles que les signaux de l’indicateur TMO, les extrêmes de l’indicateur AMA et l’amplification de la ligne K.

  3. La méthode de K-Line Stop permet de mieux contrôler le risque de chaque tranche en utilisant la méthode de K-Line Latest Highest Price Minimum Price comme méthode de stop-loss. En même temps, le risque de retard induit par le recalcul de l’indicateur ne sera pas inversé.

  4. Une stratégie de trading simple et efficace. La stratégie utilise seulement deux indicateurs pour réaliser une stratégie de scalping plus complète. La stratégie n’est pas complexe, la logique est simple et claire.

Risque stratégique

La stratégie présente principalement les risques suivants:

  1. Le risque d’entrée est fréquent. En tant que stratégie de scalping, sa durée de détention est courte et, si les frais de transaction sont élevés, cela peut avoir un impact sur les bénéfices.

  2. Le risque d’arrêt de la ligne K est trop radical. L’utilisation du prix le plus bas au plus haut du dernier jour comme méthode d’arrêt peut être plus radicale et ne peut pas filtrer complètement le bruit du marché, ce qui augmente la probabilité que l’arrêt soit déclenché.

  3. Risque de difficulté d’optimisation des paramètres. La stratégie implique plusieurs paramètres, il peut être difficile de trouver la meilleure combinaison de paramètres.

Direction d’optimisation

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. L’ajout d’indicateurs de filtrage supplémentaires, tels que le volume des transactions sur le marché, permet de filtrer certains faux signaux et d’améliorer encore la qualité des signaux.

  2. Essayez d’ajouter des conditions de filtrage à la méthode d’arrêt pour éviter que l’arrêt soit trop radical. Par exemple, attendez plusieurs lignes K de confirmation avant de déclencher l’arrêt, puis arrêtez.

  3. Optimiser les paramètres pour trouver la meilleure combinaison de paramètres de l’indicateur. Cela peut filtrer plus de bruit et améliorer le taux de réussite de la stratégie. Optimiser principalement la longueur de l’indicateur TMO, la longueur de l’indicateur AMA et les paramètres de multiplication.

  4. Essayez de faire des retours et des détours sur différentes variétés et périodes de temps pour trouver les variétés et les périodes de transactions qui correspondent le mieux à la logique de la stratégie.

Résumer

Cette stratégie utilise des signaux de négociation combinés de l’indicateur TMO et de l’indicateur AMA pour effectuer des manœuvres de scalping dans des conditions de choc. Elle a l’avantage d’une grande précision du signal, de la capture précoce de la tendance et de la maîtrise du risque. Après une optimisation supplémentaire des paramètres et des règles, la stratégie peut devenir une stratégie de scalping intra-journée avec une forte valeur de combat.

Code source de la stratégie
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 10m
basePeriod: 1m
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/
// © Kaspricci

//@version=5
strategy("TradeIQ - Crazy Scalping Trading Strategy [Kaspricci]", overlay=true, initial_capital = 1000, currency = currency.USD)

headlineTMO = "TMO Settings"

tmoLength   = input.int(7, "TMO Length", minval = 1, group = headlineTMO)
tmoSource   = input.source(close, "TMO Source", group = headlineTMO)

// calculate values
osc         = ta.mom(ta.sma(ta.sma(tmoSource, tmoLength), tmoLength), tmoLength)

// determine color of historgram
oscColor    = osc > osc[1] and osc > 0 ? #00c42b : osc < osc[1] and osc > 0 ? #4ee567 : osc < osc[1] and osc < 0 ? #ff441f : osc > osc[1] and osc < 0 ? #c03920 : na

// plot histogram
//plot(osc, "OSC", oscColor, linewidth = 3, style = plot.style_histogram)

// conditon to find highs and lows
up          = ta.highest(tmoSource, tmoLength)
dn          = ta.lowest(tmoSource, tmoLength)

// define conditions to be used for finding divergence
phosc = ta.crossunder(ta.change(osc), 0)
plosc = ta.crossover (ta.change(osc), 0)

// test for divergence
bear = osc > 0 and phosc and ta.valuewhen(phosc,osc,0) < ta.valuewhen(phosc,osc,1) and ta.valuewhen(phosc,up,0) > ta.valuewhen(phosc,up,1) ? 1 : 0
bull = osc < 0 and plosc and ta.valuewhen(plosc,osc,0) > ta.valuewhen(plosc,osc,1) and ta.valuewhen(plosc,dn,0) < ta.valuewhen(plosc,dn,1) ? 1 : 0

// -------------------------------------------------------------------------------------------------------------

headlineAMA = "AMA Settings"

amaSource   = input.source(defval = close, title = "AMA Source", group = headlineAMA)
amaLength   = input.int(defval = 50, title = "AMA Length", minval = 2, group = headlineAMA)


amaMulti    = input.float(defval = 2.0, title = "Factor", minval = 1)

amaShowCd   = input(defval = true , title = "As Smoothed Candles")
amaShowEx   = input(defval = true,   title = "Show Alternating Extremities")

amaAlpha    = input.float(1.0, "Lag",       minval=0, step=.1, tooltip='Control the lag of the moving average (higher = more lag)', group= 'AMA Kernel Parameters')
amaBeta     = input.float(0.5, "Overshoot", minval=0, step=.1, tooltip='Control the overshoot amplitude of the moving average (higher = overshoots with an higher amplitude)', group='AMA Kernel Parameters')

// -------------------------------------------------------------------------------------------------------------

headlineSL = "Stop Loss Settings"

slLength    = input.int(defval = 10, title = "SL Period", minval = 1, group = headlineSL, tooltip = "Number of bars for swing high / low")

// -------------------------------------------------------------------------------------------------------------

var b       = array.new_float(0)
var float x = na

if barstate.isfirst
    for i = 0 to amaLength - 1
        x := i / (amaLength - 1)
        w = math.sin(2 * 3.14159 * math.pow(x, amaAlpha)) * (1 - math.pow(x, amaBeta))
        array.push(b, w)

// local function to filter the source
filter(series float x) =>
    sum = 0.

    for i = 0 to amaLength - 1
        sum := sum + x[i] * array.get(b,i)
    
    sum / array.sum(b)

// apply filter function on source series

srcFiltered = filter(amaSource)

deviation   = ta.sma(math.abs(amaSource - srcFiltered), amaLength) * amaMulti

upper       = srcFiltered + deviation
lower       = srcFiltered - deviation

//----
crossHigh   = ta.cross(high, upper)
crossLow    = ta.cross(low, lower)

var os      = 0
os          := crossHigh ? 1 : crossLow ? 0 : os[1]

ext         = os * upper + (1 - os) * lower

//----
os_css = ta.rsi(srcFiltered, amaLength) / 100

extColor    = os == 1 ? #30FF85 : #ff1100

plot(srcFiltered, "MA", amaShowCd ? na : color.black, 2, editable = false)
plot(amaShowEx ? ext : na, "Extremities", ta.change(os) ? na : extColor, 2, editable=false)

// handle smoothed candles
var float h = na
var float l = na
var float c = na
var float body = na

if amaShowCd
    h := filter(high)
    l := filter(low)
    c := filter(amaSource)
    body := math.abs(math.avg(c[1], c[2]) - c)

ohlc_os = ta.rsi(c, amaLength) / 100

plotcandle(math.avg(c[1], c[2]), h, l, c, "Smooth Candles", #434651, bordercolor = na, editable = false, display = amaShowCd ? display.all : display.none)

// -------------------------------------------------------------------------------------------------------------

plotshape(bull ? ext : na, "Bullish Circle", shape.circle,    location.absolute, color = #00c42b, size=size.tiny)
plotshape(bear ? ext : na, "Bearish Circle", shape.circle,    location.absolute, color = #ff441f, size=size.tiny)
plotshape(bull ? ext : na, "Bullish Label",  shape.labeldown, location.absolute, color = #00c42b, text="Buy", textcolor=color.white, size=size.tiny)
plotshape(bear ? ext : na, "Bearish Label",  shape.labelup,   location.absolute, color = #ff441f, text="Sell", textcolor=color.white, size=size.tiny)

// -------------------------------------------------------------------------------------------------------------

candleSizeIncreasing = body[2] < body[1] and body[1] < body[0]

longEntryCond   = os == 1 and bull
shortEntryCond  = os == 0 and bear

longEntry       = strategy.opentrades == 0 and candleSizeIncreasing and not candleSizeIncreasing[1] and ta.barssince(longEntryCond)  < ta.barssince(os == 0) and ta.barssince(longEntryCond) < ta.barssince(bear)
shortEntry      = strategy.opentrades == 0 and candleSizeIncreasing and not candleSizeIncreasing[1] and ta.barssince(shortEntryCond) < ta.barssince(os == 1) and ta.barssince(shortEntryCond) < ta.barssince(bull)

longExit        = strategy.opentrades > 0 and strategy.position_size > 0 and (bear or os == 0)
shortExit       = strategy.opentrades > 0 and strategy.position_size < 0 and (bull or os == 1)

recentSwingHigh = ta.highest(high, slLength) // highest high of last candles
recentSwingLow  = ta.lowest(low,   slLength) // lowest low of recent candles

bgcolor(longEntry  ? color.rgb(76, 175, 79, 90) : na)
bgcolor(shortEntry ? color.rgb(255, 82, 82, 90) : na)

slLong          = (close - recentSwingLow) / syminfo.mintick  // stop loss in ticks
slShort         = (recentSwingHigh - close) / syminfo.mintick // stop loss in ticks

newOrderID         = str.tostring(strategy.closedtrades + strategy.opentrades + 1)
curOrderID         = str.tostring(strategy.closedtrades + strategy.opentrades)

alertMessageForEntry = "Trade {0} - New {1} Entry at price: {2} with stop loss at: {3}"

if (longEntry)
    alertMessage = str.format(alertMessageForEntry, newOrderID, "Long", close, recentSwingLow)
    
    strategy.entry(newOrderID, strategy.long, alert_message = alertMessage)
    strategy.exit("Stop Loss Long", newOrderID, loss = slLong, alert_message = "Stop Loss for Trade " + newOrderID)

if(longExit)
    strategy.close(curOrderID, alert_message = "Close Trade " + curOrderID)

if (shortEntry)
    alertMessage = str.format(alertMessageForEntry, newOrderID, "Short", close, recentSwingLow)

    strategy.entry(newOrderID, strategy.short, alert_message = alertMessage)
    strategy.exit("Stop Loss Short", newOrderID, loss = slShort, alert_message = "Stop Loss for Trade " + newOrderID)

if(shortExit)
    strategy.close(curOrderID, alert_message = "Close Trade " + curOrderID)