O MQL4 como uma ferramenta do trader, ou a análise técnica avançada
Andrey Opeyda | 18 fevereiro, 2016
Introdução
As transações comerciais são, antes de tudo, um cálculo de probabilidades. O proverbio que diz que o ócio é um motivador do progresso revela a razão pela qual todos aqueles indicadores e sistemas de transações foram desenvolvidos. O fato é que a maioria dos novatos no mundo das transações estuda teorias "prontas" de transação. Mas, por sorte, há ainda mais segredos de mercado a serem descobertos, e as ferramentas usadas na análise de movimentos de preços existem, basicamente, sob a forma de indicadores técnicos e conjuntos matemáticos ou estatísticos não realizados. Devemos agradecer a Bill Williams por sua contribuição à teoria dos movimentos de mercado. Mas talvez ainda seja cedo para descansar.
Registro de estatísticas
Nós podemos nos perguntar: "Que cor de candlestick (candelabro) é prevalente no gráfico de uma hora do EURUSD?" Nós poderíamos começar a contar os pretos, contando as suas centenas no bloco, e então contar os brancos. Mas nós também poderíamos escrever cerca de uma dúzia de linhas de códigos, que cumpririam a tarefa automaticamente. Basicamente, tudo é lógico, e não há nada de extraordinário aqui. Contudo, vamos encontrar a resposta para a pergunta acima. Primeiramente, vamos simplificar a identificação das cores de candlestick:
bool isBlack(int shift) { if(Open[shift] > Close[shift]) return (true); return (false); } //+------------------------------------------------------------------+ bool isWhite(int shift) { if(Open[shift] < Close[shift]) return (true); return (false); } //+------------------------------------------------------------------+
Usando o código já escrito, vamos continuar o experimento.
//EXAMPLE 1 //Calculate black and white candles double BlackCandlesCount = 0; double WhiteCandlesCount = 0; double BProbability = 0; for(int i = 0; i < Bars - 1; i++) { if(isBlack(i) == true) BlackCandlesCount++; if(isWhite(i) == true) WhiteCandlesCount++; } BProbability = BlackCandlesCount / Bars;
O resultado é interessante é bastante previsível: 52.5426% das 16000 candles (velas) são brancas. Usando o compilador MQL4, nós também podemos resolver um problema relativo à ciclicidade das candles. Por exemplo, caso uma candle preta tiver sido fechada, qual é a probabilidade de uma branca ser formada? Isso, é claro, depende de uma grande variedade de fatores, mas vamos consultar as estatísticas.
//EXAMPLE 2 //Calculate seqences of 1st order //BW means after black going white candle double BW = 0; double WB = 0; double BB = 0; double WW = 0; for(i = Bars; i > 0; i--) { if(isBlack(i) && isWhite(i-1)) BW++; if(isWhite(i) && isBlack(i-1)) WB++; if(isBlack(i) && isBlack(i-1)) BB++; if(isWhite(i) && isWhite(i-1)) WW++; }
Os resultados obtidos:
- Brancas seguidas de pretas - 23,64 %
- Pretas seguidas de brancas - 23,67 %
- brancas seguidas de brancas - 21,14 %
- Pretas seguidas de pretas - 20,85 %
Como podemos observar, a probabilidade de uma candle ser seguida por outra da mesma cor é um pouco menor do que ela ser seguida por uma candle de cor oposta.
Usando o MQL4 e possuindo os dados históricos, um trader pode realizar pesquisas de mercado mais profundas. O terminal permite o desenho de histogramas. Nós usaremos esta função para desenhar a distribuição de cor de candles de acordo com os valores dos indicadores WPR e RSI.
//EXAMPLE 3.1 //Build histogram by RSI //RSI min/max - 0/100 double RSIHistogramBlack[100]; double RSIHistogramWhite[100]; for(i = Bars; i > 0; i--) { int rsi_val = iRSI(NULL,0,12,PRICE_CLOSE,i); if(isWhite(i)) RSIHistogramWhite[rsi_val]++; if(isBlack(i)) RSIHistogramBlack[rsi_val]++; } for(i = 0; i < 100; i++) { ExtMapBuffer1[i] = RSIHistogramBlack[i]; ExtMapBuffer2[i] = -RSIHistogramWhite[i]; } //EXAMPLE 3.2 //Build histogram by %R //%R min/max - 0/-100 double WPRHistogramBlack[100]; double WPRHistogramWhite[100]; for(i = Bars; i > 0; i--) { int wpr_val = iWPR(NULL,0,12,i); int idx = MathAbs(wpr_val); if (isWhite(i)) WPRHistogramWhite[idx]++; if (isBlack(i)) WPRHistogramBlack[idx]++; }
De todo modo, seria mais objetivo, ao invés de contar candlesticks pretos e brancos, registrar estatísticas a respeito de transações lucrativas e desvantajosas com diferentes valores de StopLoss e TakeProfit. O procedimento abaixo irá nos auxiliar nessa tarefa:
int TestOrder(int shift, int barscount, int spread, int tp, int sl, int operation) { double open_price = Close[shift]; if (operation == OP_BUY) open_price = open_price + (Point * spread); if (operation == OP_SELL) open_price = open_price - (Point * spread); for (int i = 0; i<barscount; i++) { if (operation == OP_BUY) { //sl if (Low[shift-i] <= open_price - (Point * sl) ) return (MODE_STOPLOSS); //tp if (High[shift-i] >= open_price + (Point * tp) ) return (MODE_TAKEPROFIT); } if (operation == OP_SELL) { //sl if (High[shift-i] >= open_price + (Point * sl) ) return (MODE_STOPLOSS); //tp if (Low[shift-i] <= open_price - (Point * tp) ) return (MODE_TAKEPROFIT); } } return (MODE_EXPIRATION); }
Estou certo de que os resultados irão lhe surpreender. Os mapas de Kohonen, a distribuição gaussiana e o coeficiente de Hurst irão lhe surpreender ainda mais. Basicamente, há muitas coisas surpreendentes. O principal é não nos esquecermos da essência e do sentido das transações comerciais.