
La stratégie de reconnaissance de tendance MyQuant est une stratégie utilisée pour les transactions quotidiennes de Bitcoin. La stratégie identifie les tendances du marché en calculant la moyenne mobile du prix et ses derivateurs de première et de deuxième classe, et en base à cela, prend des décisions d’achat et de vente.
La stratégie commence par calculer la moyenne mobile adaptative des prix (ALMA) et ses derivateurs primaires et secondaires. Le premier reflète la vitesse de variation des prix et le second la courbe des prix. Selon les valeurs des derivateurs primaires et secondaires, il est actuellement en tendance à la hausse, à la baisse ou dans une période de choc.
Plus précisément, la stratégie a calculé les indicateurs suivants:
Lorsque les conditions d’achat sont remplies, le nombre d’actions achetées est calculé en fonction des signaux CAUSED.Accumulation/Distribution Bands et Caused Exposure Top and Bottom Finder. Lorsque les conditions de vente sont remplies, la position entière est vendue.
Cette stratégie, combinée à la tendance et à l’indicateur, permet d’identifier efficacement les points de basculement de la tendance du marché. L’utilisation de derivateurs de premier et deuxième degrés des prix permet de déterminer la tendance, d’éviter d’être affecté par les fluctuations des prix et de rendre le signal plus clair.
La stratégie est très sensible au choix de la période de négociation et à l’ajustement des paramètres. Une mauvaise sélection de la période de négociation, qui ne couvre pas les points de basculement importants, peut entraîner une mauvaise efficacité de la stratégie.
La stratégie peut être optimisée de la manière suivante:
La stratégie d’identification de tendances MyQuant identifie efficacement les tendances du marché du bitcoin et prend les décisions d’achat et de vente correspondantes en calculant des derivateurs de premier et deuxième degrés sur les moyennes mobiles adaptatives du prix. La stratégie est jugée en combinaison avec plusieurs indicateurs, évitant que le signal ne soit perturbé par un bruit excessif. L’efficacité de la stratégie peut être améliorée par une optimisation supplémentaire du temps et des paramètres.
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © spacekadet17
//
//@version=5
strategy(title="Trend Identifier Strategy", shorttitle="Trend Identifier Strategy", format=format.price, precision=4, overlay = false, initial_capital = 1000, pyramiding = 10, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.03)
//start-end time
startyear = input.int(2020,"start year")
startmonth = input.int(1,"start month")
startday = input.int(1,"start day")
endyear = input.int(2025,"end year")
endmonth = input.int(1,"end month")
endday = input.int(1,"end day")
timeEnd = time <= timestamp(syminfo.timezone,endyear,endmonth,endday,0,0)
timeStart = time >= timestamp(syminfo.timezone,startyear,startmonth,startday,0,0)
choosetime = input(false,"Choose Time Interval")
condTime = (choosetime ? (timeStart and timeEnd) : true)
// time frame?
tfc = 1
if timeframe.isdaily
tfc := 24
// indicators: price normalized alma, and its 1st and 2nd derivatives
ema = ta.alma(close,140,1.1,6)
dema = (ema-ema[1])/ema
stodema = ta.ema(ta.ema(ta.stoch(dema,dema,dema,100),3),3)
d2ema = ta.ema(dema-dema[1],5)
stod2ema = ta.ema(ta.ema(ta.stoch(d2ema,d2ema,d2ema,100),3),3)
ind = (close-ta.ema(close,120*24/tfc))/close
heat = ta.ema(ta.stoch(ind,ind,ind,120*24/tfc),3)
index = ta.ema(heat,7*24/tfc)
//plot graph
green = color.rgb(20,255,100)
yellow = color.yellow
red = color.red
blue = color.rgb(20,120,255)
tcolor = (dema>0) and (d2ema>0)? green : (dema>0) and (d2ema<0) ? yellow : (dema < 0) and (d2ema<0) ? red : (dema < 0) and (d2ema>0) ? blue : color.black
demaema = ta.ema(dema,21)
plot(demaema, color = tcolor)
//strategy buy-sell conditions
cond1a = strategy.position_size <= 0
cond1b = strategy.position_size > 0
if (condTime and cond1a and ( ( ((tcolor[1] == red and demaema<0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == yellow and demaema>-0.02) ) and tcolor == green) or (tcolor[1] == red and tcolor == blue and demaema < -0.01) ) and index<85 and ind<0.4)
strategy.entry("buy",strategy.long, (strategy.equity-strategy.position_size*close)/1/close)
if (condTime and cond1b and ( (((tcolor[1] == yellow and demaema > -0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == green and demaema < 0.02)) and tcolor == red) or (tcolor[1] == green and tcolor == yellow and demaema > 0.015) ) and index>15 and ind>-0.1)
strategy.order("sell",strategy.short, strategy.position_size)