La stratégie utilise les moyennes mobiles rapides de 3 jours, les moyennes mobiles lentes de 10 jours et les moyennes mobiles lisses de 16 jours pour construire l’indicateur MACD, en plus de l’indicateur RSI et de la caractéristique de la quantité de transaction, pour définir la caractéristique de la ligne K multidimensionnelle, pour juger que les conditions sont trop serrées et forment une tendance oscillante intermédiaire pour inverser les entrées.
Le code utilise principalement la moyenne mobile rapide de 3 jours moins la moyenne mobile lente de 10 jours pour former l’indicateur MACD, le traitement de la ligne de signal de 16 jours pour former la stratégie MACD standard. En même temps, l’analyse de la synthèse de la quantité d’achat et de vente est combinée pour déterminer le caractère de la force.
Plus précisément, en observant la relation entre la ligne MACD et la ligne de signal, les changements de la pente, pour juger de la dégradation de la force de la courbe, pour rechercher des opportunités de renversement. En même temps, les changements de volume d’achat et de vente reflètent également la dégradation de la force de la courbe.
Cette stratégie a été mise en place pour trois signaux d’entrée:
Faire plus lorsque le volume de transaction n’a pas d’avantage sur le volume d’achat, que le RSI est inférieur à 41 et qu’il est en hausse, et que le signal MACD n’est pas clairement dévié;
Lorsque le volume de transaction a un avantage sur le volume d’achat, le RSI est dans la zone 45-55 et monte, le MACD et la ligne de signal sont à la même hauteur, faites plus;
Lorsque le MACD est supérieur au seuil de réglage et en hausse, laissez-le en place.
Ces trois phénomènes reflètent des chocs régionaux à court terme et une expansion excessive dans une direction, et sont donc considérés comme de bons moments pour inverser la tendance et prendre des mesures inverses.
Exit est configuré pour arrêter les pertes et les arrêts, reprendre le contrôle et réaliser des bénéfices.
Cette stratégie est basée sur une combinaison d’indicateurs permettant de déterminer la zone de choc et de dépasser le phénomène de sur-achat et de sur-vente. L’analyse de la quantité de transactions est plus approfondie, ce qui augmente la base d’opération.
Les avantages sont les suivants:
Le MACD est utilisé comme un test quantitatif des prix pour juger de la relation entre les prix et la quantité de transaction, en évitant la subjectivité d’une seule analyse technique.
Le nombre de passagers aériens aériens a été évalué en fonction de l’état de la livraison et de l’augmentation de la confirmation des entrées.
Le RSI détermine le surachat et le survendre, ce qui aide à rechercher un revirement.
Le paramètre Stop Loss Stopper empêche les pertes excessives et bloque une partie des bénéfices.
Bien que l’utilisation combinée de plusieurs indicateurs augmente le taux de réussite, toute stratégie comporte inévitablement des risques, principalement:
la probabilité que l’indicateur émet un faux signal, comme une reprise de la tendance après un renversement;
Le stop-loss est mal placé, il y a un risque que le retrait soit trop important et que les bénéfices ne soient pas très bien bloqués.
Les paramètres peuvent nécessiter d’autres tests d’optimisation, tels que la combinaison de paramètres de la moyenne, le cycle RSI, le multiplicateur de stop loss.
Ces risques peuvent être atténués par des optimisations supplémentaires. Les méthodes spécifiques seront décrites dans la section suivante.
La stratégie a encore de la marge d’optimisation et se concentre principalement sur les aspects suivants:
tester différents réglages de paramètres réguliers pour trouver la combinaison optimale;
tester les paramètres du RSI afin de déterminer un cycle plus approprié pour juger de la survente ou de la survente;
Optimiser le multiplicateur de stop-loss pour trouver un équilibre entre le maximum de retrait et le blocage des bénéfices;
L’introduction de modèles d’apprentissage automatique, qui permettent une formation à partir de données plus volumineuses, réduit la probabilité d’erreurs et améliore les taux de réussite.
Ces méthodes d’optimisation peuvent être réalisées par un retour d’expérience plus systématique. Avec l’expansion des tests spatiaux paramétraux et l’augmentation du nombre d’échantillons, le taux de réussite des stratégies et les indicateurs de rentabilité augmentent également.
Cette stratégie utilise l’ensemble des trois principaux indicateurs MACD, RSI et volume de transaction pour juger des caractéristiques de la volatilité entre les zones de marché. Elle établit des entrées au point de basculement pour tirer parti de l’augmentation du rebond. L’idée de la stratégie est claire, prend en compte les tendances et les retournements, et a une bonne marge de profit après optimisation.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false)
signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)
fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)
buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")
getRSISlopeChange(lookBack) =>
j = 0
for i = 0 to lookBack
if ( rsi[i] - rsi[ i + 1 ] ) > -5
j += 1
j
getBuyerVolBias(lookBack) =>
j = 0
for i = 1 to lookBack
if buyVolume[i] > sellVolume[i]
j += 1
j
getSellerVolBias(lookBack) =>
j = 0
for i = 1 to lookBack
if sellVolume[i] > buyVolume[i]
j += 1
j
getVolBias(lookBack) =>
float b = 0.0
float s = 0.0
for i = 1 to lookBack
b += buyVolume[i]
s += sellVolume[i]
b > s
getSignalBuyerBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] > signalBiasValue
j += 1
j
getSignalSellerBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < ( 0.0 - signalBiasValue )
j += 1
j
getSignalNoBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
j += 1
j
getPriceRising(lookBack) =>
j = 0
for i = 1 to lookBack
if close[i] > close[i + 1]
j += 1
j
getPriceFalling(lookBack) =>
j = 0
for i = 1 to lookBack
if close[i] < close[i + 1]
j += 1
j
getRangeNarrowing(lookBack) =>
j = 0
for i = 1 to lookBack
if intrabarRange[i] < intrabarRange[i + 1]
j+= 1
j
getRangeBroadening(lookBack) =>
j = 0
for i = 1 to lookBack
if intrabarRange[i] > intrabarRange[i + 1]
j+= 1
j
bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0
bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0
bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0
bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )
bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0
bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )
bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)
bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )
// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)
// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)
// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)