Trading quantitatif : stratégie axée sur le volume


Date de création: 2024-01-04 15:38:54 Dernière modification: 2024-01-04 15:38:54
Copier: 1 Nombre de clics: 612
1
Suivre
1621
Abonnés

Trading quantitatif : stratégie axée sur le volume

Aperçu

La stratégie de dynamisme quantitatif analyse les variations du volume des transactions pour juger de la volatilité de l’humeur des acteurs du marché. Elle divise le volume des transactions en volumes de transactions multiples et volumes de transactions vides et calcule leur moyenne mobile pondérée. Elle génère des signaux multiples lorsque le volume des transactions multiples est positif et des signaux vides lorsque le volume des transactions vides est positif.

Principe de stratégie

La stratégie consiste d’abord à diviser le volume de transactions de chaque ligne K en volumes de transactions multiples et vides, en fonction de la relation entre le prix de clôture et le prix d’ouverture. Si le prix de clôture est supérieur au prix d’ouverture, le volume de transactions de la ligne K est le volume de transactions multiples; si le prix de clôture est inférieur au prix d’ouverture, le volume de transactions multiples de la ligne K est calculé selon le rapport ((le prix le plus élevé - le prix d’ouverture) / ((le prix le plus élevé - le prix le plus bas)), le reste étant le volume de transactions à vide.

On calcule ensuite la moyenne mobile pondérée du volume de transactions multiples et du volume de transactions vides pour la dernière ligne n-racine K. Si la moyenne mobile du volume de transactions multiples est supérieure à la moyenne mobile du volume de transactions vides, et que la différence entre les deux représente une proportion du volume de transactions multiples supérieure au seuil prédéfini, alors le signal multiples est généré. Les règles de génération du signal vide sont similaires.

La valeur moyenne du volume des transactions est également définie pour identifier les zones de consolidation. Si le volume des transactions en surplus n’est pas différent, il indique qu’il est actuellement en consolidation.

Analyse des avantages

  • Utilisez des informations sur le volume des transactions pour juger de l’humeur des acteurs du marché et générer des signaux avec une base théorique
  • Identifier automatiquement la zone de réglage pour éviter de manquer des signaux importants
  • Paramètres personnalisables pour différents types de transactions et périodes de temps
  • Les signaux à tête multiple et à tête vide peuvent être jugés séparément, ou les signaux à tête simple peuvent être suivis.

Analyse des risques

  • Les données sur le volume des transactions peuvent être manipulées
  • Les paramètres par défaut peuvent ne pas être adaptés à toutes les variétés et doivent être optimisés
  • Une mauvaise configuration des paramètres d’identification de la compilation peut manquer le signal
  • Il peut y avoir des signaux erronés à court terme.

Le risque peut être réduit par l’optimisation des paramètres et la combinaison d’autres indicateurs.

Direction d’optimisation

  • Tester différentes méthodes pour calculer le volume des transactions
  • Essayez différents types de moyennes mobiles, comme les EMA, les SMMA, etc.
  • Optimisation des paramètres de cycle pour calculer la moyenne
  • Optimiser l’identification des paramètres de différence de volumes de transactions à compiler
  • Filtrage des signaux en combinaison avec d’autres indicateurs techniques

Résumer

Les stratégies quantitatives peuvent être utilisées seules ou combinées avec d’autres stratégies. L’optimisation des paramètres et la combinaison des indicateurs peuvent améliorer encore la stabilité et la rentabilité des stratégies.

Code source de la stratégie
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © Shuttle_Club
//@version=5

strategy('Volume fight strategy', default_qty_type=strategy.cash, default_qty_value=10000, currency='USD', commission_value=0.04, calc_on_order_fills=false, calc_on_every_tick=false, initial_capital=10000)

direction = input.string('ANY', 'Direction', options=['LONG', 'SHORT', 'ANY'], tooltip='Select the direction of trade.\n\nВыберите направление торговли.')
ma = input.int(11, 'Search_range', minval=1, tooltip='The range of estimation of the predominance of bullish or bearish volume (quantity bars). The smaller the TF, the higher the range value should be used to filter out false signals.\n\nДиапазон оценки преобладания бычьего или медвежьего объема (количество баров). Чем меньше ТФ, тем выше следует использовать значение диапазона, чтобы отфильтровать ложные сигналы.')
delta = input.float(15, 'Smoothing_for_flat,%', step=0.5, minval=0, tooltip='Smoothing to reduce false signals and highlight the flat zone. If you set the percentage to zero, the flat zones will not be highlighted, but there will be much more false signals, since the indicator becomes very sensitive when the smoothing percentage decreases.\n\nСглаживание для уменьшения ложных сигналов и выделения зоны флета. Если выставить процент равным нулю, то зоны флета выделяться не будут, но будет гораздо больше ложных сигналов, так как индикатор становится очень чувствительным при снижении процента сглаживания')
bgshow = input.bool(true, 'Show background zones', tooltip='Show the color background of the current trading zone.\n\nПоказывать цветовой фон текущей торговой зоны.')
all_signal_show = input.bool(false, 'Show each setup in zone', tooltip='Show every signals into trading zone.\n\nПоказывать каждый сигнал внутри торговой зоны.')

/////   CALCULATION
bull_vol = open < close ? volume : volume * (high - open) / (high - low)  //determine the share of bullish volume
bear_vol = open > close ? volume : volume * (open - low) / (high - low)  //determine the share of bearish volume
avg_bull_vol = ta.vwma(bull_vol, ma)  //determine vwma
avg_bear_vol = ta.vwma(bear_vol, ma)
diff_vol = ta.sma(avg_bull_vol / volume - 1 - (avg_bear_vol / volume - 1), ma)  //normalize and smooth the values
vol_flat = math.abs(avg_bull_vol + avg_bear_vol) / 2  //determine average value for calculation flat-filter

/////   SIGNALS
up = int(na), up := nz(up[1])
dn = int(na), dn := nz(dn[1])
bull = avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100  //determine up zones
bear = avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100  //determine dn zones

if bull
    up += 1, dn := 0
    dn
if bear
    dn += 1, up := 0
    up
if not bull and not bear and all_signal_show
    up := 0, dn := 0
    dn

/////   PLOTTING
plotshape(bull and up == 1, 'UP', location=location.bottom, style=shape.triangleup, color=color.new(color.green, 0), size=size.tiny)
plotshape(bear and dn == 1, 'DN', location=location.top, style=shape.triangledown, color=color.new(color.red, 0), size=size.tiny)
bgcolor(title='Trading zones', color=bgshow and avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 85) : bgshow and avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 85) : na)
plot(diff_vol, 'Volume difference', style=plot.style_area, color=avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 0) : avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 0) : color.new(color.gray, 50))

strategy.close('Short', comment='close', when=bull and up == 1)
strategy.close('Long', comment='close', when=bear and dn == 1)
strategy.entry('Long', strategy.long, when=direction != 'SHORT' and bull and up == 1)
strategy.entry('Short', strategy.short, when=direction != 'LONG' and bear and dn == 1)

if bull and up==1
    alert('Bullish movement! LONG trading zone', alert.freq_once_per_bar_close)
if bear and dn==1
    alert('Bearish movement! SHORT trading zone', alert.freq_once_per_bar_close)