Stratégie quotidienne basée sur la moyenne mobile et l'indicateur Williams


Date de création: 2024-01-29 14:35:48 Dernière modification: 2024-01-29 14:35:48
Copier: 1 Nombre de clics: 639
1
Suivre
1617
Abonnés

Stratégie quotidienne basée sur la moyenne mobile et l’indicateur Williams

Aperçu

Cette stratégie utilise la courbe des cours, l’indicateur ATR et l’indicateur William pour effectuer des transactions au niveau de la courbe du jour pour la variété GBP/JPY. La stratégie détermine la tendance des prix et les points de revers possibles à l’aide de la courbe des cours, puis utilise l’indicateur William pour confirmer davantage les signaux de transaction, tout en calculant le point d’arrêt et le volume des transactions avec l’indicateur ATR.

Principe de stratégie

  1. La moyenne (la ligne de base) utilisée pour déterminer la tendance globale des prix, le prix est balayé en dessous de la moyenne comme un signal d’achat, et en dessous de la moyenne comme un signal de vente
  2. L’indicateur William est utilisé pour confirmer le renversement des prix. L’indicateur est utilisé pour confirmer l’achat à la hausse de 35 et pour confirmer la vente à la baisse de 70
  3. L’indicateur ATR calcule la gamme moyenne des fluctuations des 2 derniers jours. Cette valeur est multipliée par le coefficient et définie comme la distance d’arrêt
  4. Contrôle des risques en fonction de 50% des intérêts du compte. Le volume des transactions est calculé en fonction de la distance d’arrêt et du ratio de risque.
  5. Après avoir entré dans une position longue, le point d’arrêt est le point bas du prix moins la distance d’arrêt. Le point d’arrêt est le point d’entrée plus 100 points. La logique de sortie est utilisée pour confirmer davantage le signal de sortie.
  6. La logique de sortie est utilisée pour confirmer davantage le signal de sortie.

Analyse des avantages

  1. L’utilisation intégrée de la courbe moyenne pour juger les tendances et les indicateurs de confirmation d’entrée de jeu permet de filtrer efficacement les pertes causées par les fausses percées
  2. Le stop ATR dynamique peut être réglé à une distance de stop raisonnable en fonction de la volatilité du marché
  3. Le contrôle des risques et le calcul du volume des transactions dynamiques permettent de contrôler au maximum les pertes individuelles
  4. La logique d’exit combinée à la ligne de parité permet de confirmer davantage le moment de la sortie et d’éviter un arrêt prématuré.

Analyse des risques

  1. Le jugement de la moyenne est plus susceptible de produire de faux signaux et nécessite une confirmation supplémentaire de l’indicateur
  2. L’indicateur lui-même génère des signaux erronés et ne peut pas éviter complètement les pertes.
  3. Cette stratégie est plus adaptée aux variétés tendances, mais peut être moins efficace pour les variétés en mouvement.
  4. Un mauvais réglage des ratios de contrôle des risques peut également affecter les gains stratégiques.

Il est possible d’optimiser et d’améliorer encore la méthode en ajustant la périodicité de la moyenne, en combinant plus d’indicateurs ou en intervenant artificiellement dans les transactions.

Résumer

La stratégie combine le jugement de la tendance et le filtrage des indicateurs pour concevoir une méthode de négociation au niveau de la ligne solaire GBP/JPY. Le risque de négociation est contrôlé par des moyens tels que l’arrêt dynamique et la gestion des risques. Il y a encore beaucoup de possibilités d’optimisation, et l’efficacité de la stratégie peut être encore améliorée par l’ajustement des paramètres et la combinaison des méthodes.

Code source de la stratégie
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("GBPJPY DAILY FX",initial_capital = 1000,currency="USD", overlay=true)

UseHAcandles    = input(false, title="Use Heikin Ashi Candles in Algo Calculations")
//
// === /INPUTS ===

// === BASE FUNCTIONS ===

haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow   = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low

//INDICATOR---------------------------------------------------------------------    
    //Average True Range (1. RISK)
atr_period = 2
atr = atr(atr_period)



    //Ichimoku Cloud - Kijun Sen (2. BASELINE)
ks_period = 20
kijun_sen = (highest(haHigh,ks_period) + lowest(haLow,ks_period))/2
base_long = haOpen < kijun_sen and haClose > kijun_sen
base_short = haOpen > kijun_sen and haClose < kijun_sen

    //Williams Percent Range (3. Confirmation#1)
use_wpr = true
wpr_len = 4
wpr = -100*(highest(haHigh,wpr_len) - haClose)/(highest(haHigh,wpr_len) - lowest(haLow,wpr_len))
wpr_up = -35
wpr_low = -70
conf1_long = wpr >= wpr_up
conf1_short = wpr <= wpr_low
if(use_wpr == false)
    conf1_long := true
    conf1_short := true
//TRADE LOGIC-------------------------------------------------------------------
    //Long Entry
    //if -> WPR crosses below -39 AND MACD line is less than signal line
l_en = base_long and conf1_long
    //Long Exit
    //if -> WPR crosses above -14
l_ex = haClose < kijun_sen
    //Short Entry
    //if -> WPR crosses above -39 AND MACD line is greater than signal line
s_en = base_short and conf1_short
    //Short Exit
    //if -> WPR crosses under -14
s_ex = haClose > kijun_sen
    
strategy.initial_capital = 50000
//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
isTwoDigit = input(true,"Is this a 2 digit pair? (JPY, XAU, XPD...")
risk = input(50,"Risk %")/100           //risk % per trade
equity_protector = input(30,"Equity Protection %")/100  //equity protection %
stop = atr*100000*input(1,"Average True Range multiplier")    //Stop level
if(isTwoDigit)
    stop := stop/100
target = input(100, "Target TP in Points")  //TP level
    //Calculate current DD and determine if stopout is necessary
equity_stopout = false
if(floating<0 and abs(floating/balance)>equity_protector)
    equity_stopout := true
    
    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/stop        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1)
    size := 1            //Set min. lot size

//TRADE EXECUTION---------------------------------------------------------------
strategy.close_all(equity_stopout)      //Close all trades w/equity protector
is_open = strategy.opentrades > 0

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

if(time_cond)
    strategy.entry("l_en",true,1,oca_name="a",when=l_en and not is_open)  //Long entry
    strategy.entry("s_en",false,1,oca_name="a",when=s_en and not is_open) //Short entry
    
    strategy.exit("S/L","l_en",loss=stop, profit=target)      //Long exit (stop loss)
    strategy.close("l_en",when=l_ex)            //Long exit (exit condition)
    strategy.exit("S/L","s_en",loss=stop, profit=target)      //Short exit (stop loss)
    strategy.close("s_en",when=s_ex)            //Short exit (exit condition)