Estratégia diária baseada na média móvel e no indicador Williams


Data de criação: 2024-01-29 14:35:48 última modificação: 2024-01-29 14:35:48
cópia: 1 Cliques: 639
1
focar em
1617
Seguidores

Estratégia diária baseada na média móvel e no indicador Williams

Visão geral

Esta estratégia combina o uso da linha média, o indicador ATR e o indicador William para a negociação do nível da linha diária para a variedade de divisas GBP / JPY. A estratégia determina a tendência do preço e os possíveis pontos de reversão através da linha média, e depois usa o indicador William para confirmar ainda mais os sinais de negociação, ao mesmo tempo em que calcula o ponto de parada e o volume de negociação com o indicador ATR.

Princípio da estratégia

  1. Usando a linha média de 20 dias (a linha de base) para determinar a tendência geral do preço, o preço é varrido abaixo da linha média como um sinal de compra e abaixo da linha média como um sinal de venda
  2. O indicador William é usado para confirmar a inversão de preços. O indicador é usado para confirmar a compra quando ele passa por 35 e para confirmar a venda quando ele passa por 70
  3. O indicador ATR calcula o intervalo médio de oscilação dos últimos 2 dias. Este valor é definido como a distância de parada após multiplicar por um fator
  4. Controle de risco de acordo com o 50% do equity da conta. O volume de transação é calculado de acordo com a distância de parada e a proporção de risco
  5. Depois de entrar em uma posição longa, o ponto de parada é o ponto de baixa do preço menos a distância de parada. O ponto de parada é o ponto de entrada mais 100 pontos. A lógica de saída é usada para confirmar ainda mais o sinal de saída.
  6. A lógica de saída é usada para confirmar mais uma vez o sinal de saída

Análise de vantagens

  1. O uso integrado da linha média para determinar a tendência e os indicadores de confirmação de entrada, pode filtrar efetivamente os danos causados por brechas falsas
  2. O ATR Dynamic Stop Loss pode ser ajustado para uma distância razoável de stop loss com base na amplitude de flutuação do mercado.
  3. Controle de risco e cálculo de volume de transação dinâmico para controlar o máximo de perdas individuais
  4. A lógica de saída combinada com a linha de equilíbrio pode confirmar ainda mais o momento da saída e evitar a paralisação prematura

Análise de Riscos

  1. A medianidade tem uma maior probabilidade de produzir um sinal errado e requer uma confirmação adicional do indicador.
  2. Os indicadores em si podem gerar sinais errados e não evitar completamente perdas.
  3. A estratégia é mais adequada para variedades de tendência e pode ser menos eficaz para variedades de variação de alcance.
  4. A configuração incorreta da proporção de controle de risco também pode afetar a receita estratégica

Pode ser melhorado e melhorado por meio de ajustes no ciclo de equilíbrio, combinação de mais indicadores ou negociação de intervenção artificial.

Resumir

A estratégia combina o julgamento de tendências e filtragem de indicadores para o design de métodos para negociações no nível da linha de solta GBP / JPY. Ao mesmo tempo, o uso de meios como stop loss dinâmico e controle de risco para controlar o risco de negociação. Há muito espaço para otimização, e o efeito da estratégia pode ser melhorado ainda mais através de ajustes de parâmetros e combinações de métodos.

Código-fonte da estratégia
/*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)