Stratégie des signaux de vente d' achat

Auteur:ChaoZhang est là., Date: 2024-03-08 17:06:50 Le président de la République
Les étiquettes:

img

Résumé

La stratégie des signaux d'achat et de vente est une stratégie de trading quantitative très pratique. Elle utilise la plage de fluctuation des prix pour filtrer les signaux d'achat et de vente, réduisant les faux signaux sur les marchés à faible volatilité et améliorant la qualité des signaux sur les marchés à forte volatilité.

La logique de la stratégie

La stratégie calcule d'abord la fourchette de fluctuation du prix de l'actif sur une certaine période. Plus précisément, elle calcule la différence entre le prix le plus élevé et le prix le plus bas dans la période spécifiée pour déterminer l'amplitude de la fluctuation des prix.

Après cela, il générera des signaux d'achat et de vente. Cependant, tous les signaux ne déclencheront pas l'entrée, mais doivent répondre aux conditions de filtrage de la plage de fluctuation des prix. Par exemple, un signal d'achat n'est émis que lorsque le prix franchit la plage de fluctuation.

De cette façon, la stratégie filtre la plupart des faux signaux dans les environnements de marché à faible volatilité, évitant l'entrée inutile.

Les avantages

Le plus grand avantage de cette stratégie est qu'elle peut ajuster dynamiquement la force de filtrage des signaux.

Comparée aux filtres à paramètres fixes, cette stratégie est plus intelligente et adaptative.

En outre, par rapport à une seule condition d'exploitation, cette stratégie intègre un jugement directionnel de tendance pour fournir des signaux de trading plus fiables.

Les risques

Le principal risque de la stratégie réside dans la définition de paramètres d'intervalle de volatilité: si l'intervalle fixé est trop grand ou trop petit, cela affectera négativement la qualité du signal et les opportunités de profit.

En outre, la stratégie présente relativement moins de possibilités de profit sur les marchés présentant de fortes tendances d'oscillation à court terme.

Directions d'optimisation

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

  1. Utiliser des algorithmes de paramètres adaptatifs pour optimiser automatiquement les paramètres de gamme de volatilité afin de les rendre plus intelligents et dynamiques.

  2. Renforcer les règles de filtrage basées sur les grandes tendances du cycle afin d'éviter les pièges de consolidation.

  3. Combiner les différents cycles de la stratégie pour former un système et améliorer la stabilité globale.

  4. Ajouter des algorithmes d'apprentissage automatique pour améliorer l'effet des paramètres et des règles de filtrage.

Conclusion

La stratégie des signaux d'achat et de vente de filtres de gamme est une stratégie de trading quantitative très pratique et efficace. Elle peut ajuster dynamiquement l'intensité de filtrage et fournir une récompense de risque supérieure dans différents environnements de marché.


/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
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/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=5
strategy(title='Range Filter - B&S Signals', shorttitle='[Doan]_RF-B&S Signals', overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
longLossPerc = input.float(title='Long Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01
shortLossPerc = input.float(title='Short Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01

longTakePerc = input.float(title='Long Take(%)', minval=0.0, step=0.1, defval=1) * 0.01
shortTakePerc = input.float(title='Short Take (%)', minval=0.0, step=0.1, defval=1) * 0.01

emaLength = input.int(200, title="EMA Length")

// Determine stop loss price

//Range Size Function
rng_size(x, qty, n) =>
    wper = n * 2 - 1
    avrng = ta.ema(math.abs(x - x[1]), n)
    AC = ta.ema(avrng, wper) * qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n) =>
    r = rng_
    var rfilt = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)

    hi_band = rng_filt1 + r
    lo_band = rng_filt1 - r
    rng_filt = rng_filt1
    [hi_band, lo_band, rng_filt]

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, title='Swing Source')

//Range Period
rng_per = input.int(defval=20, minval=1, title='Swing Period')

//Range Size Inputs
rng_qty = input.float(defval=3.5, minval=0.0000001, title='Swing Multiplier')

//Bar Colors
use_barcolor = input(defval=false, title='Bar Colors On/Off')

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward = fdir == 1 ? 1 : 0
downward = fdir == -1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color = upward and rng_src > filt ? rng_src > rng_src[1] ? #05ff9b : #00b36b : downward and rng_src < filt ? rng_src < rng_src[1] ? #ff0583 : #b8005d : #cccccc


ema = ta.ema(close, emaLength)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)

longTakePrice = strategy.position_avg_price * (1 + longTakePerc)
shortTakePrice = strategy.position_avg_price * (1 - shortTakePerc)

//Filter Plot
filt_plot = plot(filt, color=filt_color, linewidth=3, title='Filter', transp=67)

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title='High Band')
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title='Low Band')

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title='High Band Fill')
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title='Low Band Fill')

//Bar Color
barcolor(use_barcolor ? bar_color : na)
// Entry
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

plot(ema)

//Plot Buy and Sell Labels
plotshape(longCondition, title='Buy Signal', text='BUY', textcolor=color.white, style=shape.labelup, size=size.normal, location=location.belowbar, color=color.new(color.green, 0))
plotshape(shortCondition, title='Sell Signal', text='SELL', textcolor=color.white, style=shape.labeldown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title='Buy Alert', message='BUY')
alertcondition(shortCondition, title='Sell Alert', message='SELL')





Plus de