Stratégie de l' iceberg

Auteur:ChaoZhang est là., Date: le 26 septembre 2023 21:02:21
Les étiquettes:

Résumé

Cette stratégie est basée sur la négociation de moyennes mobiles. Elle met en place trois niveaux de lignes d'entrée longues et courtes pour mettre en œuvre des positions d'ouverture bidirectionnelles, appartenant à la stratégie de suivi de tendance. Lorsque le prix franchit la moyenne mobile, la stratégie ouvre des positions longues et courtes en lots en plaçant des ordres en attente.

La logique de la stratégie

La stratégie utilise principalement la percée de la moyenne mobile pour déterminer la direction de la tendance. Plus précisément, elle calcule la moyenne arithmétique du prix d'ouverture, du prix de clôture, du prix le plus élevé, du prix le plus bas et ainsi de suite pour obtenir un indicateur de moyenne mobile.

Le nombre d'ordres longs et courts augmente progressivement. En établissant des ordres en attente, il implémente des positions d'ouverture de lot. Par exemple, la ligne d'entrée 1 déclenche l'ouverture d'un contrat long/short, la ligne d'entrée 2 déclenche l'ajout d'un contrat et la ligne d'entrée 3 ajoute un autre contrat. Cela aide à diversifier le coût d'entrée et à réduire le risque d'un seul ordre.

La stratégie comporte également un mécanisme de couverture. Lorsque la taille de la position n'est pas égale à 0, elle définit un ordre de stop-loss basé sur le prix moyen mobile. Si le prix franchit à nouveau la moyenne mobile, elle ferme la position pour verrouiller un profit partiel et protéger le capital.

En résumé, cette stratégie utilise pleinement l'indicateur de moyenne mobile pour déterminer la direction de la tendance, maximise la fourchette de profit à travers plusieurs lignes d'entrée et contrôle les risques avec des ordres de stop-loss.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'utilisation de moyennes mobiles pour déterminer la direction de la tendance est claire et réalisable.

  2. Les lignes d'entrée multiples maximisent l'utilisation des tendances.

  3. L'ouverture de positions par lots réduit le risque d'un seul ordre, l'entrée sur le marché par lots diversifie les risques des ordres et réduit le coût moyen de détention.

  4. Le mécanisme de stop loss de couverture contrôle efficacement les risques. L'ordre de stop loss de couverture réalise un stop loss rapide lorsque le prix dépasse à nouveau la moyenne mobile, évitant ainsi d'énormes pertes.

  5. La logique de la stratégie est claire et facile à comprendre, avec des paramètres flexibles qui peuvent être optimisés pour différents marchés.

Analyse des risques

Cette stratégie comporte certains risques:

  1. La probabilité de signaux erronés de la moyenne mobile Les moyennes mobiles ont un décalage et peuvent donner de mauvais signaux.

  2. Le risque d'inversion de tendance entraînant des pertes. La stratégie suppose une tendance, donc les inversions de tendance peuvent entraîner d'énormes pertes.

  3. Les lignes d'entrée trop fréquentes augmentent la fréquence des transactions et les coûts de glissement.

  4. Les positions d'ouverture de lots augmentent le risque de concentration lorsque la taille de la position est trop grande.

  5. Les paramètres incorrects du point d'arrêt de perte peuvent entraîner un arrêt de perte prématuré ou un point d'arrêt de perte trop faible.

Mesures de gestion des risques correspondantes:

  1. Optimiser les paramètres de la moyenne mobile et sélectionner les périodes appropriées.

  2. Faites attention aux principaux indicateurs techniques pour détecter les signaux d'inversion de tendance et arrêter les pertes à temps.

  3. Ajustez la distance entre les lignes d'entrée pour diminuer la fréquence des transactions.

  4. Optimiser la dimension et la proportion des positions pour contrôler le risque de concentration.

  5. Tester et optimiser les points de stop loss pour réduire le risque de stop loss.

Directions d'optimisation

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

  1. Testez différents paramètres de moyenne mobile et sources de données pour trouver l'indicateur de moyenne mobile le mieux performant pour déterminer les tendances.

  2. Optimiser la distance d'intervalle et la proportion de taille de position des lignes d'entrée longues et courtes pour trouver les paramètres optimaux.

  3. Ajouter d'autres indicateurs comme conditions de filtrage pour éviter les signaux erronés de la moyenne mobile, tels que le MACD, le RSI, etc.

  4. Optimiser la position de la ligne d'arrêt des pertes ou définir des points d'arrêt des pertes dynamiquement en fonction de l'ATR.

  5. Ajouter le jugement de l'inversion de tendance pour définir toutes les conditions de clôture des positions.

  6. Optimiser les paramètres pour différentes périodes de marché.

  7. Ajouter un ajustement dynamique de la taille de la position en fonction du pourcentage d'utilisation du compte.

Résumé

Cette stratégie juge la direction de la tendance principalement sur la base des moyennes mobiles et profite des tendances courantes comme source de profit. En utilisant plusieurs lignes d'entrée et en ouvrant des positions en lots, elle peut capturer efficacement les tendances et élargir les zones de profit. Dans le même temps, des mécanismes de stop loss sont utilisés pour contrôler les risques.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("L1")
    strategy.cancel("L2")
    strategy.cancel("L3")
    strategy.cancel("S1")
    strategy.cancel("S2")
    strategy.cancel("S3")
    strategy.cancel("TPL")
    strategy.cancel("TPS")

Plus de