
La stratégie de croisement triangulaire de l’or est une stratégie d’analyse technique typique. Elle utilise trois moyennes mobiles de différentes longueurs de temps pour capturer la tendance et réaliser des transactions à faible risque. Elle génère un signal d’achat lorsque la moyenne mobile à court terme est traversée par la moyenne mobile à moyen terme et que la moyenne mobile à moyen terme est supérieure à la moyenne mobile à long terme.
La stratégie de croisement triangulaire en or s’appuie principalement sur trois moyennes mobiles pour déterminer la direction de la tendance. Les moyennes mobiles à court terme sont sensibles aux variations de prix; les moyennes mobiles à moyen terme offrent une meilleure clarté de jugement de la tendance; les moyennes mobiles à long terme filtrent le bruit du marché et déterminent la direction de la tendance à long terme.
Lorsque la moyenne mobile à court terme traverse la moyenne mobile à moyen terme, cela indique que le prix commence à rebondir vers le haut; si la moyenne mobile à moyen terme est supérieure à la moyenne mobile à long terme, cela indique qu’elle est actuellement en hausse et génère donc un signal d’achat.
En revanche, lorsque la moyenne mobile à court terme passe sous la moyenne mobile à moyen terme, cela signifie que le prix a commencé à faire une percée vers le bas; à ce moment-là, si la moyenne mobile à moyen terme est inférieure à la moyenne mobile à long terme, cela indique qu’elle est actuellement en baisse, donc un signal de vente est généré.
La stratégie définit simultanément un stop loss et un stop stop. Après la transaction, le stop loss et le stop price sont calculés en fonction du ratio de stop loss et de stop stop que vous avez défini. Si le prix atteint le stop loss ou le stop stop, vous quittez la position.
Solution: Ajustez les paramètres de la moyenne mobile pour éviter de générer des signaux erronés
Solution: Ajustez correctement le ratio de stop-loss, pas trop grand ni trop petit
La solution: tester différents paramètres pour trouver la combinaison optimale
Les stratégies d’intersection triangulaire en or peuvent être optimisées dans les domaines suivants:
Des combinaisons de moyennes mobiles de différentes longueurs ou de différents types peuvent être testées pour obtenir les meilleures performances commerciales
D’autres indicateurs peuvent être ajoutés à la stratégie, tels que KDJ, MACD, etc., pour effectuer une vérification multifactorielle, filtrer les signaux erronés
On peut raccourcir le cycle des moyennes mobiles pour les variétés à forte oscillation; augmenter le cycle des moyennes mobiles pour les variétés à faible oscillation
L’algorithme parcourt automatiquement l’espace des paramètres pour localiser rapidement les paramètres optimaux
La stratégie de la croix d’or triangulaire est une stratégie de suivi de tendance plus simple et pratique dans l’ensemble. Elle utilise simultanément trois moyennes mobiles pour capturer la direction de la tendance, définir le risque de contrôle de stop-loss et obtenir des rendements stables. L’optimisation des paramètres et l’ajout d’autres indicateurs techniques peuvent améliorer encore l’efficacité de la stratégie.
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)
//
// author: Kozlod
// date: 2018-03-25
//
////////////
// INPUTS //
////////////
ma_type = input(title = "MA Type", defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
short_ma_len = input(title = "Short MA Length", defval = 5, minval = 1)
short_ma_src = input(title = "Short MA Source", defval = close)
medium_ma_len = input(title = "Medium MA Length", defval = 20, minval = 2)
medium_ma_src = input(title = "Medium MA Source", defval = close)
long_ma_len = input(title = "Long MA Length", defval = 100, minval = 3)
long_ma_src = input(title = "Long MA Source", defval = close)
sl_lev_perc = input(title = "SL Level % (0 - Off)", type = float, defval = 0, minval = 0, step = 0.01)
pt_lev_perc = input(title = "PT Level % (0 - Off)", type = float, defval = 0, minval = 0, step = 0.01)
// Set initial values to 0
short_ma = 0.0
long_ma = 0.0
medium_ma = 0.0
// Simple Moving Average (SMA)
if ma_type == 'SMA'
short_ma := sma(short_ma_src, short_ma_len)
medium_ma := sma(medium_ma_src, medium_ma_len)
long_ma := sma(long_ma_src, long_ma_len)
// Exponential Moving Average (EMA)
if ma_type == 'EMA'
short_ma := ema(short_ma_src, short_ma_len)
medium_ma := ema(medium_ma_src, medium_ma_len)
long_ma := ema(long_ma_src, long_ma_len)
// Weighted Moving Average (WMA)
if ma_type == 'WMA'
short_ma := wma(short_ma_src, short_ma_len)
medium_ma := wma(medium_ma_src, medium_ma_len)
long_ma := wma(long_ma_src, long_ma_len)
// Hull Moving Average (HMA)
if ma_type == 'HMA'
short_ma := wma(2*wma(short_ma_src, short_ma_len / 2) - wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_ma_len)))
long_ma := wma(2*wma(long_ma_src, long_ma_len / 2) - wma(long_ma_src, long_ma_len), round(sqrt(long_ma_len)))
// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
short_ma := vwma(short_ma_src, short_ma_len)
medium_ma := vwma(medium_ma_src, medium_ma_len)
long_ma := vwma(long_ma_src, long_ma_len)
// Smoothed Moving Average (SMMA)
if ma_type == 'SMMA'
short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_ma_len
long_ma := na(long_ma[1]) ? sma(long_ma_src, long_ma_len) : (long_ma[1] * (long_ma_len - 1) + long_ma_src) / long_ma_len
// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
e1_short = ema(short_ma_src , short_ma_len)
e1_medium = ema(medium_ma_src, medium_ma_len)
e1_long = ema(long_ma_src, long_ma_len)
short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len)
long_ma := 2 * e1_long - ema(e1_long, long_ma_len)
/////////////
// SIGNALS //
/////////////
long_signal = crossover( short_ma, medium_ma) and medium_ma > long_ma
short_signal = crossunder(short_ma, medium_ma) and medium_ma < long_ma
// Calculate PT/SL levels
// Initial values
last_signal = 0
prev_tr_price = 0.0
pt_level = 0.0
sl_level = 0.0
// Calculate previous trade price
prev_tr_price := (long_signal[1] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -1) ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na
// Calculate SL/PT levels
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100) : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100) : na
// Calculate if price hit sl/pt
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) == 1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) == 1 and close <= sl_level
short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) == -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) == -1 and close >= sl_level
// What is last active trade?
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])
//////////////
// PLOTTING //
//////////////
// Plot MAs
plot(short_ma, color = red, linewidth = 2)
plot(medium_ma, color = green, linewidth = 2)
plot(long_ma, color = yellow, linewidth = 2)
// Plot Levels
plotshape(prev_tr_price, style = shape.cross, color = gray, location = location.absolute, size = size.small)
plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red, location = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location = location.absolute, size = size.small)
//////////////
// STRATEGY //
//////////////
strategy.entry("long", true, when = long_signal)
strategy.entry("short", false, when = short_signal)
strategy.close("long", when = long_hit_pt or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)