
Cette stratégie permet de réaliser des transactions bidirectionnelles sur des marchandises en calculant l’indice de mouvement des marchandises ((DI) et en combinant les paramètres de restriction. Faites plus lorsque DI+ est supérieur à DI- un paramètre de restriction et faites moins lorsque DI- est supérieur à DI+ un paramètre de restriction.
L’indicateur central de la stratégie est l’indicateur dynamique ((DI)). Le DI est calculé par la formule suivante:
DI+ = (DM+ / vrai rayon) * 100 DI- est égal à (DM- / vraie portée) x 100
La gamme réelle représente la volatilité récente en calculant la valeur maximale pour les trois jours de hauts, de bas et de fermetures d’hier.
Selon la définition de DI, lorsque DI+ > DI- indique que la force aérienne est supérieure à la force aérienne, elle appartient au marché aérien. Lorsque DI- > DI+ indique que la force aérienne est supérieure à la force aérienne, elle appartient au marché aérien.
La stratégie utilise cette caractéristique pour définir un paramètre de limitation. Lorsque DI + est supérieur à DI - un paramètre de limitation, jugez que le marché est actuellement en tête, faites plus; lorsque DI - est supérieur à DI + un paramètre de limitation, jugez que le marché est actuellement vide, faites vide.
Par exemple, si le paramètre de restriction est défini sur 3, la règle de transaction spécifique est:
Étant donné qu’il y a souvent une plus petite fluctuation de la différence entre DI+ et DI- , la mise en place de paramètres de restriction permet de filtrer certains signaux de transaction sans orientation évidente, réduisant ainsi les transactions inutiles, ce qui est un avantage de la stratégie.
Les principaux avantages de cette stratégie sont les suivants:
DI juge directement le mouvement des marchés en calculant le rapport de force entre les deux parties polyvalentes, sans algorithmes complexes tels que la correspondance de courbe, la théorie est simple et fiable.
En limitant les paramètres de filtrage, il n’y a pas de fluctuation de petite taille apparemment directionnelle, choisissez uniquement les segments de marché clairement orientés vers la direction la plus forte pour négocier, éviter d’être piégé.
Les positions libres peuvent être automatiquement basées sur les indicateurs DI, sans jugement manuel, ce qui réduit la difficulté de la transaction.
Prise en charge des paramètres permettant de négocier uniquement dans une plage de dates personnalisée, de liquider automatiquement la position à la fin, de la flexibilité et de la commodité.
Le commutateur multifonction permet de choisir un signal unidirectionnel et d’adapter le système à différents environnements de marché.
Cette stratégie comporte aussi des risques:
Lorsqu’il y a une forte volatilité sur le marché, le DI peut émettre un faux signal à court terme, entraînant l’échec de la transaction. Il est nécessaire de combiner d’autres indicateurs pour vérifier.
Les paramètres de restriction trop grands ou trop petits peuvent entraîner une surabondance ou une surabondance de signaux de trading et doivent être ajustés en fonction du marché.
Le DI ne peut juger que la direction de la tendance actuelle, il ne peut pas juger si la tendance est terminée ou inversée et nécessite une combinaison d’autres indicateurs.
Les solutions pour faire face aux risques sont:
Filtrage des signaux DI avec des indicateurs tels que les moyennes mobiles
Adaptation des paramètres de restriction en fonction des résultats des retours
Les données de Volumes, MACD et autres ont été utilisées pour déterminer si la tendance est en train de s’inverser.
Cette stratégie peut être optimisée de la manière suivante:
Les indicateurs plus intuitifs de jugement de la force aérienne, tels que les diagrammes de pluie et d’opinion publique, peuvent être combinés avec le DI pour améliorer la précision de jugement.
Les points d’arrêt mobiles, les points d’arrêt temporels ou les points d’arrêt de taux permettent de bloquer les bénéfices et de réduire les pertes.
L’ajustement des paramètres de restriction et du temps de négociation en fonction des caractéristiques de négociation des différentes variétés peut améliorer l’efficacité de la stratégie.
Appliquer des techniques telles que l’apprentissage par renforcement et l’optimisation des paramètres du signal sur disque dur.
La stratégie est simple et pratique dans l’ensemble. Elle utilise les méthodes de calcul de DI pour déterminer la direction des tendances; elle limite les paramètres de filtrage des signaux; elle permet des transactions bidirectionnelles, mais aussi en plus ou en moins; elle prend en charge la définition des périodes de négociation. Les principaux avantages sont une grande fiabilité et un filtre efficace.
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Noro's DI Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
len = input(title="Length", defval=14)
limit = input(3, title = "limit, %")
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")
//DI
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementMinus = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
//Trend
trend = 0
trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1]
//Background
col = trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Lines
plot(DIPlus, color=lime, title="DI+", linewidth = 3)
plot(DIMinus, color=red, title="DI-", linewidth = 3)
//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if trend == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if trend == -1
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()