
La stratégie de suivi des inversions de la bi-médianité est une stratégie de trading quantitative qui utilise la croisée des moyennes mobiles comme signal de trading. Cette stratégie combine la différence de la moyenne lente et rapide de l’indicateur MACD et sa ligne de signal, ainsi que le jugement du pourcentage de la quantité de transactions, pour former un signal de trading afin de capturer les occasions de revirement du marché.
Cette stratégie consiste à déterminer la relation entre les lignes rapides et les lignes lentes, en générant des signaux de commutation lorsque la ligne rapide traverse la ligne lente, et des signaux de commutation lorsque la ligne lente traverse la ligne rapide. En outre, elle permet de déterminer l’état de commutation du marché en combinant l’état de commutation des valeurs MACD, la relation entre les valeurs de commutation et les lignes de commutation, l’état de commutation des volumes de transaction, etc.
Plus précisément, la stratégie détermine la taille et la direction de la différence MACD, la croisée de la différence et de la ligne de signal, la correspondance ou l’inverse de la différence et de la direction de la ligne de signal, etc. Ces situations reflètent les caractéristiques de rebond des subidabubbles du marché. En outre, la distribution plus volumineuse du volume de transaction peut également servir d’indicateur de jugement auxiliaire.
Une stratégie de négociation est générée lorsque l’on juge que la différence et la ligne de signal indiquent un renversement du marché et que le volume de transactions correspond à la confirmation du renversement du marché.
Le problème du whipsaw est causé par une intersection de deux lignes égales
Le nombre de transactions n’a pas complètement filtré la fausse percée
Impossible de juger de la profondeur et de l’intensité de la modification de la sous-section
Utiliser des modèles d’apprentissage automatique plutôt que des règles de jugement
Augmentation des techniques de prévention des dommages
Les résultats de l’analyse de l’humeur et de l’analyse de l’image
Transplantation vers d’autres variétés et marchés
Les stratégies de suivi du renversement de la double ligne de parité prennent en compte l’indicateur de la ligne de parité, l’indicateur MACD et l’indicateur de la quantité de transaction, en capturant leur signal de renversement et en choisissant le point de renversement approprié pour établir une position. Il y a encore beaucoup de place pour l’optimisation de la stratégie, qui peut être renforcée par la stabilité et le rendement de la stratégie grâce à l’apprentissage automatique et au contrôle du vent.
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)
signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.8)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=10)
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(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, title="Total Volume")
intrabarRange = high - low
getLookBackSlope(lookBack) => signal - signal[lookBack]
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
float s = 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 - signalBiasValue )
j += 1
j
getSignalNoBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0
bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0
bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0
bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )
bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0
bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 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 )
// 7.48 Profit 52.5%
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
strategy.entry("Short1", strategy.short)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)
// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
strategy.entry("Long1", strategy.long)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + 0.75, stop=strategy.position_avg_price - 0.5)