Cette stratégie utilise les principes de la croix d'or et de la croix de la mort des moyennes mobiles simples pour mettre en œuvre des positions longues et courtes pour les actions.
La stratégie définit d'abord le délai de backtesting, puis fixe les paramètres de calcul pour les deux moyennes mobiles, y compris le type de MA et la durée de la période.
La fonction getMAType () calcule les valeurs des deux MA. fastMA est la période de MA la plus courte, et slowMA est la période de MA la plus longue.
La logique de base:
Lorsque le fastMA dépasse le slowMA, un signal long est déclenché.
Lorsque le fastMA dépasse le slowMA, un signal court est déclenché.
Enfin, pendant le backtesting, prenez une position longue lorsque vous voyez un signal long, et prenez une position courte lorsque vous voyez un signal court.
Optimisations possibles par rapport aux risques:
Ajouter d'autres indicateurs techniques pour l'identification des tendances.
L'exposition au risque est calculée sur la base de l'exposition au risque.
Ajoutez des indicateurs de volume pour éviter les marchés de piqûres.
Construire des mécanismes d'optimisation des paramètres pour trouver automatiquement des ensembles de paramètres optimaux.
La stratégie peut être encore optimisée dans les aspects suivants:
Ajouter des stratégies de stop loss comme des points de stop loss fixes ou un stop loss de trailing pour contrôler les pertes.
Ajouter des stratégies de dimensionnement des positions comme la dimensionnement des positions fixes ou dynamiques pour contrôler les risques de négociation.
Ajoutez des filtres en les combinant avec d'autres indicateurs techniques pour identifier les tendances et améliorer le taux de réussite.
Optimiser les paramètres par des méthodes telles que la recherche de grille et la régression linéaire pour trouver des valeurs optimales.
Élargir les stratégies d'entrée comme le retrait de rupture, l'échelle dans les ordres pour enrichir les tactiques de trading.
Ajoutez des indicateurs de volume pour éviter les marchés de piqûres.
Élargir les produits aux indices boursiers, aux devises, aux crypto-monnaies, etc.
Cette stratégie met en œuvre la sélection d'actions longues / courtes basée sur les principes de croisement MA. L'idée de la stratégie est simple et claire, largement utilisée, très adaptable et pratiquement précieuse. Mais elle présente également des problèmes de filtrage en retard et de filtrage à la scie. Les optimisations futures peuvent se concentrer sur l'amélioration de l'arrêt des pertes, l'optimisation des paramètres, l'ajout de filtres, etc. pour le rendre plus avantageux.
/*backtest start: 2023-09-10 00:00:00 end: 2023-10-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// MA Params ///////////// source1 = input(title="MA Source 1", defval=close) maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"]) length1 = input(title="MA Length 1", defval=50) source2 = input(title="MA Source 2", defval=close) maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"]) length2 = input(title="MA Length 2", defval=200) ///////////// Get MA Function ///////////// getMAType(maType, sourceType, maLen) => res = sma(close, 1) if maType == "ema" res := ema(sourceType, maLen) if maType == "sma" res := sma(sourceType, maLen) if maType == "swma" res := swma(sourceType) if maType == "wma" res := wma(sourceType, maLen) res ///////////// MA ///////////// fastMA = getMAType(maType1, source1, length1) slowMA = getMAType(maType2, source2, length2) long = crossover(fastMA, slowMA) short = crossunder(fastMA, slowMA) /////////////// Plotting /////////////// checkColor() => fastMA > slowMA colCheck = checkColor() ? color.lime : color.red p1 = plot(fastMA, color = colCheck, linewidth=1) p2 = plot(slowMA, color = colCheck, linewidth=1) fill(p1, p2, color = checkColor() ? color.lime : color.red) bgcolor(long ? color.lime : short ? color.red : na, transp=20) /////////////// Execution /////////////// if testPeriod() strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short)