Stratégie de négociation de moyennes mobiles à plusieurs niveaux

Auteur:ChaoZhang est là., Date: 23 février 2023
Les étiquettes:

Résumé

La stratégie multi-niveaux de négociation des moyennes mobiles entre et arrête la perte à plusieurs niveaux en définissant plusieurs lignes moyennes mobiles avec des paramètres différents. La stratégie calcule d'abord 3 lignes longues et 3 lignes courtes. Elle va long lorsque les lignes longues sont en dessous des lignes courtes, et va court lorsque les lignes courtes sont en dessous des lignes longues. La stratégie permet la personnalisation de paramètres tels que la période moyenne mobile, le ratio de changement, la plage de temps négociable, etc. Elle convient au trading de tendance à moyen et long terme.

La logique de la stratégie

  1. Calculer la moyenne mobile simple du cours de l'acr comme ligne de base.

  2. Définir le nombre de lignes longues et courtes en fonction des paramètres longues et courtes.

  3. Les longlines1 etc. sont définies en déplaçant la ligne de base selon les ratios longlevel1 etc. Les shortlines sont définies de la même manière.

  4. Entrer dans des transactions à plusieurs niveaux lorsque le prix franchit les lignes dans les délais négociables.

  5. Arrêtez la perte lorsque le prix touche la ligne de base.

  6. Forcez les positions à la fin du temps.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. L'entrée à plusieurs niveaux permet de réaliser des bénéfices à différents stades de la tendance.

  2. Très personnalisable avec des paramètres pour différents produits et styles de trading.

  3. Système fiable basé sur les moyennes mobiles.

  4. Évitez les événements majeurs en définissant une plage de temps négociable.

  5. L'établissement doit déclarer les pertes contenues par le biais d'un stop loss.

Analyse des risques

Quelques risques de cette stratégie:

  1. Risque élevé des positions pyramidales, capital suffisant nécessaire.

  2. Des paramètres inappropriés peuvent conduire à une survente.

  3. Une date de sortie fixe peut manquer le profit de la tendance tardive.

  4. Aucune considération pour les positions au jour le jour et le coût de porte.

  5. Aucun contrôle sur la taille de la position.

Directions d'optimisation

La stratégie peut être améliorée dans les domaines suivants:

  1. Ajoutez un stop loss à la place de l'heure de sortie fixe.

  2. Considérez le coût de portefeuille pour les positions à un jour.

  3. Ajoutez un stop-loss pour capturer les profits tardifs.

  4. Les positions de taille dynamique basées sur l'exposition actuelle.

  5. Test de paramètres sur différents produits et méthodes d'optimisation des constructions.

  6. Optimiser les niveaux de stop loss pour éviter les arrêts inutiles.

Résumé

La stratégie de moyenne mobile à plusieurs niveaux profite des tendances grâce à une entrée à plusieurs niveaux basée sur des moyennes mobiles. Les temps négociables et les contrôles de stop loss risquent bien. D'autres améliorations du contrôle des coûts de transport, de l'optimisation des paramètres, de l'optimisation des stop loss, etc. peuvent améliorer la stratégie et méritent d'être étudiées.


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

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
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
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

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

Plus de