Esta estratégia combina a média móvel, o indicador ATR e o indicador Williams para negociação diária de câmbio. Primeiro julga a tendência de preços e os pontos de reversão potenciais através da média móvel, em seguida, usa o indicador Williams para confirmar ainda mais os sinais de negociação e alavanca o indicador ATR para calcular o stop loss e o dimensionamento da posição.
Métodos como o ajustamento do período da média móvel, a combinação de mais indicadores, a intervenção manual, etc., podem ajudar a otimizar e melhorar ainda mais a estratégia.
Esta estratégia combina o julgamento da tendência e o filtro de indicadores para a negociação diária.
/*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)