Stratégie de négociation combinée basée sur l'inversion 123 et le MACD

Auteur:ChaoZhang est là., Date: le 19 septembre 2023 à 17h30
Les étiquettes:

Résumé

Cette stratégie combine 123 modèles d'inversion et les indicateurs MACD pour générer des signaux de trading plus forts grâce au filtrage.

La logique de la stratégie

  1. 123 stratégie d'inversion achète lorsque les deux derniers jours ont été des jours de baisse et que la clôture d'aujourd'hui est à la hausse, avec le Stochastique en dessous du seuil; vend lorsque les deux derniers jours ont été des jours de hausse et que l'aujourd'hui est à la baisse, avec le Stochastique au-dessus du seuil.

  2. La stratégie MACD est longue lorsque l'AM rapide est au-dessus de l'AM lent, et courte lorsque l'AM rapide est en dessous de l'AM lent.

  3. Les transactions ne sont effectuées que lorsque les deux stratégies sont d'accord, sinon aucune action n'est prise.

Analyse des avantages

Principaux avantages:

  1. Le signal combiné filtre efficacement les fausses fuites, améliorant le taux de victoire.

  2. Le MACD détermine la direction de la tendance à moyen et long terme.

  3. Stochastique avec 123 évite le sur-échange après l'inversion de tendance.

  4. Deux stratégies partagent des tâches différentes, se validant mutuellement, évitant une sur-optimisation.

  5. Il est facile de basculer entre long et court, et s'adapte à différents environnements de marché.

Analyse des risques

Principaux risques:

  1. Le signal combiné est peut-être trop conservateur, manquant de bonnes opportunités.

  2. Les retours en arrière sont sujets à des événements soudains, sujets à l'échec.

  3. L'absence de stop loss expose la stratégie à de grandes pertes.

  4. Le double filtrage peut entraîner des trades manquants.

  5. En l'absence d'optimisation des paramètres, les valeurs par défaut peuvent ne pas correspondre à tous les instruments.

Directions d'optimisation

Améliorations:

  1. Testez différentes combinaisons de paramètres pour trouver des valeurs optimales.

  2. Ajouter le stop loss à la perte de contrôle par transaction.

  3. Incorporer plus d'indicateurs de filtre pour améliorer la qualité du signal.

  4. Introduire des modèles d'apprentissage automatique pour l'optimisation automatique des paramètres.

  5. Test sur plus d'instruments de négociation pour évaluer la robustesse.

  6. Les paramètres de commutation sont définis en fonction des conditions du marché.

Résumé

Dans l'ensemble, la combinaison de signaux doubles évite une sur-optimisation par rapport aux stratégies individuelles.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-14 02:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 24/07/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This is one of the techniques described by William Blau in his book
// "Momentum, Direction and Divergence" (1995). If you like to learn more,
// we advise you to read this book. His book focuses on three key aspects
// of trading: momentum, direction and divergence. Blau, who was an electrical
// engineer before becoming a trader, thoroughly examines the relationship 
// between price and momentum in step-by-step examples. From this grounding,
// he then looks at the deficiencies in other oscillators and introduces some
// innovative techniques, including a fresh twist on Stochastics. On directional 
// issues, he analyzes the intricacies of ADX and offers a unique approach to help 
// define trending and non-trending periods.
// Blau`s indicator is like usual MACD, but it plots opposite of meaningof
// stndard MACD indicator.  
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

EMACD(r,SmthLen,LengthMACD) =>
    pos = 0
    source = close
    fastMA = ema(source, r)
    slowMA = ema(source, LengthMACD)
    xmacd = fastMA - slowMA
    xMA_MACD = ema(xmacd, SmthLen)
    pos := iff(xmacd < xMA_MACD, -1,
    	     iff(xmacd > xMA_MACD, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Ergodic MACD", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
r = input(14, minval=1)
LengthMACD = input(21, minval=1)
SmthLen = input(5, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEMACD = EMACD(r,SmthLen,LengthMACD)
pos = iff(posReversal123 == 1 and posEMACD == 1 , 1,
	   iff(posReversal123 == -1 and posEMACD == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Plus de