Bom dia Prezados,
Estou tentando criar esse indicador. Ele foi plotado no gráfico, porém ficou uma linha reta.
Acredito que ficou uma linha reta, pois estou conseguindo calcular apenas a o candle 1 e 2.
Pergunta: como eu faço para estender esse desconto de 3% para todo o gráfico considerando a mínima dos dois candles anteriores para ir acompanhando os sinais anteriores?
Post o codigo completo, nao da pra saber o que voce errou so com a funcao de inicializacao onde voce não populou o array de desenho... Além disso, esses erros de ficar uma linha aleatoria (pode ser reta horizontal, vertical pra baixo/cima, etc) costuma ser o array nao populado naquele lugar.
Post o codigo completo, nao da pra saber o que voce errou so com a funcao de inicializacao onde voce não populou o array de desenho... Além disso, esses erros de ficar uma linha aleatoria (pode ser reta horizontal, vertical pra baixo/cima, etc) costuma ser o array nao populado naquele lugar.
Segue o código completo:
#property indicator_chart_window //+------------------------------------------------------------------+ //| Propriedades | //+------------------------------------------------------------------+ #property indicator_buffers 1 #property indicator_plots 1 //PLOT LABEL #property indicator_label1 "Entrada" #property indicator_type1 DRAW_LINE #property indicator_color1 clrBlue #property indicator_width1 2 // #property indicator_style STYLE_DASHDOT = traços double indBuffer[]; double DiaMinima1, DiaMinima2; double valorMinimo; double valorDesc; double valorStop; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, indBuffer, INDICATOR_DATA); ArrayInitialize(indBuffer, EMPTY_VALUE); DiaMinima1 = iLow(_Symbol, PERIOD_D1, 1); // calcula a minima do dia anterior DiaMinima2 = iLow(_Symbol, PERIOD_D1, 2); // calcula a minima do penultimo dia Print("Minína1: " +(string)DiaMinima1); Print("Minína2: " +(string)DiaMinima2); valorMinimo = MathMin(DiaMinima1, DiaMinima2); Print("O valor minimo é: " +(string)valorMinimo); valorDesc = valorMinimo * 0.97; Print("O valor é: " +(string)valorDesc); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- if(prev_calculated == 00) { for(int i=0;i<rates_total;i++) { indBuffer[i] = valorMinimo * 0.97; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+além disso, no profit eu colocava só isso:
Plot(lowest(Close,1)[1]*0.975);
Ricardo, obrigado pela ajuda. Segue o código completo. Acho que essa questão de popular array nunca nem ouvir falar, pois sou iniciante dms.
Segue o código completo:
além disso, no profit eu colocava só isso:
tira o if do prev_calculated e deixa o for que esta dentro. Ele que popula o vetor de desenho.
O IF esta fazendo o for executar somente uma vez no primeiro calculo que ele faz quando o prev* tem valor de zero, na segunda interacao o valor vai ser diferente e seu codigo nao executa. O for passando de zero pra rates_total costuma ser ineficiente porque tu ja tem de conhecimento que prev_calculated foi calculado antes (ou se nao foi veio zero) e poderia evitar de fazer o calculo com i=0. Poderia por simplificacao, mudar o i=0 por i=prev_calculated e alterar o return para ser rates_total - 1. Isso forcaria o mt5 a na vela atual ficar sempre recalculando.
tira o if do prev_calculated e deixa o for que esta dentro. Ele que popula o vetor de desenho.
O IF esta fazendo o for executar somente uma vez no primeiro calculo que ele faz quando o prev* tem valor de zero, na segunda interacao o valor vai ser diferente e seu codigo nao executa. O for passando de zero pra rates_total costuma ser ineficiente porque tu ja tem de conhecimento que prev_calculated foi calculado antes (ou se nao foi veio zero) e poderia evitar de fazer o calculo com i=0. Poderia por simplificacao, mudar o i=0 por i=prev_calculated e alterar o return para ser rates_total - 1. Isso forcaria o mt5 a na vela atual ficar sempre recalculando.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Bom dia Prezados,
Estou tentando criar esse indicador. Ele foi plotado no gráfico, porém ficou uma linha reta.
Acredito que ficou uma linha reta, pois estou conseguindo calcular apenas a o candle 1 e 2.
Pergunta: como eu faço para estender esse desconto de 3% para todo o gráfico considerando a mínima dos dois candles anteriores para ir acompanhando os sinais anteriores?