Possivelmente um erro fora do alcance e o indicador está sendo removido
int limit=rates_total-prev_calculated;
for(int i=0; i<limit; i++)
iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1))
Você está possivelmente recebendo uma mensagem no registro sobre uma falha de inicialização global
Verifique seus logs
Obrigado por sua sugestão.
Eu verifico o log, não há nenhum erro ou aviso de aviso.
Não tenho certeza se o (i+1) causa problemas, uma vez que, estando sozinho (ou simplesmente apagando a segunda parte), este indicador funciona bem.
SCFX
Há erros que eu compilei seu código e o testei:
2014.05.22 22:39:43.936 Indicador personalizado Indicador de teste 3 XAUUSD,M1: removido
2014.05.22 22:39:43.905 Indicador de teste 3 XAUUSD,M1: a inicialização global falhou
2014.05.22 22 22:39:43.905 Indicador de teste 3 XAUUSD,M5: razão uninit 3 //----------------------- gráfico de mudança
2014.05.22 22:39:17.323matriz fora do alcance no 'Indicador de teste 3.mq4' (117,32)
2014.05.22 22:39:15.591 Indicador de teste 3 XAUUSD,M5: Inicializado
2014.05.22 22:39:09.570 Indicador personalizado Indicador de teste 3 XAUUSD,M5: carregado com sucesso
Obrigado por sua sugestão.
Eu verifico o log, não há nenhum erro ou aviso de aviso.
Não tenho certeza se o (i+1) causa problemas, uma vez que, estando sozinho (ou simplesmente apagando a segunda parte), este indicador funciona bem.
SCFX
Então é provavelmente este
roc_s[j]=Close[i+j]-Close[i+j+1];
Você está tentando chegar perto do preço dos bares que não existem
Você deve adicionar uma linha quando o indicador for iniciado primeiro : pré_calculado == 0,
algo parecido com isso :
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated;
nenhum erro no meu computador também ;-)
Oi ffoorr,
Sua solução é realmente boa.
Para dizer a verdade, eu contrato alguém para consertá-la ontem à noite. Sim, ele o fez, mas o código é ineficiente, veja abaixo, pois ele acrescenta mais um para(i).
Agradeço se você pudesse explicar o que significa com aquele pré-cálculo ==0. Não entendo.
//+------------------------------------------------------------------+ //| hf1.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| httakeprofit://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "httakeprofit://www.mql5.com" #property version "1.00" #property strict //--- indicator settings //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 5 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Orange #property indicator_color5 Orange //--- input parameter input int kperiod=30; input int dperiod=9; input int slow=9; input int sample_roc_quartile=100; //--- buffers double buy[]; double sell[]; double stoploss[]; double takeprofit1[]; double takeprofit2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) //*/*/*/*/*/ { //--- indicator buffers mapping //--- 1 additional buffer used for counting. //IndicatorBuffers(6); IndicatorDigits(Digits); //--- indicator line SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,buy); SetIndexArrow(0,241); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,sell); SetIndexArrow(1,242); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,stoploss); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,takeprofit2); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,takeprofit1); //--- name for DataWindow and indicator subwindow label //--- 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[]) { int limit=rates_total-prev_calculated; if(limit<=0)limit =2; double roc_s[]; ArrayResize(roc_s,sample_roc_quartile+1); //--- //------------------------------------------ for(int i=1; i<limit; i++) { //FIRST PSART if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { buy[i]=Close[i]; stoploss[i]=Low[i]-0.005; takeprofit1[i]=Close[i]+0.005; takeprofit2[i]=Close[i]+0.01; } if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { sell[i]=Close[i]; stoploss[i]=High[i]; takeprofit1[i]=Close[i]-0.0050; takeprofit2[i]=Close[i]-0.01; } } //SECOND PART //--------------------------------------- HERE IS THE WHAT HE DID int mid = (sample_roc_quartile +1)/2; for(int i=1; i<limit&&(i+1)<rates_total; i++) { //--------------------------------------------- for(int j=0;j<=sample_roc_quartile&&(i+j+1)<rates_total;j++) { roc_s[j]=Close[i+j]-Close[i+j+1]; ArraySort(roc_s); } if( (Close[i]-Close[i+1])<roc_s[mid] ) { buy[i]=0; stoploss[i]=0; takeprofit1[i]=0; takeprofit2[i]=0; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Olá a todos...
Estou tendo problemas para instalar o indicador tradicional IBFX MACD e outros modelos no meu MT4.
Na versão anterior, eu só precisaria copiar e colar meus arquivos na pasta "indicador" localizada na pasta "expert".
O atual possui apenas a pasta "MQL4" que consiste de uma pasta "expert" e "indicator" sapateada.
Tentei colar em ambas as pastas e reiniciar minha plataforma, mas ela simplesmente não funciona.
observação acontece.
Alguém lá fora pode me aconselhar sobre este assunto? ou talvez qualquer outra forma de eu obter o indicador MACD tradicional com 2 linhas EMA?
Obrigado
Douglasdouglas_heng: Estou tendo problemas para instalar o indicador tradicional IBFX MACD e outros modelos no meu MT4. | Não faça múltiplas (6) mensagens. Não se apropriar de outros postes. |
Oi ffoorr,
Sua solução é realmente boa.
Para dizer a verdade, eu contrato alguém para consertá-la ontem à noite. Sim, ele o fez, mas o código é ineficiente, veja abaixo, pois ele acrescenta mais um para(i).
Agradeço se você pudesse explicar o que significa com aquele pré-cálculo ==0. Não entendo.
bem scfx, não entendo a segunda parte do seu indicador, então não posso dizer.
Quando um indicador é iniciado na primeira vez, (colocado em um gráfico) o cálculo prévio é igual a Zero por construção, de modo que se pode fixar o ponto de partida a partir do qual o indicador começará a calcular .
if( pré_calculado == 0) limite = 100;
ou
if( prev_calculado < 50) limite = 500:
ou digamos
if( prev_calculado < 500) limite = 3000: (mesmo assim, o início do gráfico não é usado)
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated; at the first lauch of the indicator limit = 3000; for(int i=1; i<3000; i++) // draw 3000 bars at the second lauch limit = 0; // ( because rates_total-prev_calculated = 0) ; for(int i=1; i<0; i++) // draw the last bars only, faster
muito boa idéia esta indi ......
- 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
Olá,
Começo com um indicador (A PRIMEIRA PARTE). Funciona bem, quando se muda o cronograma.
Depois acrescento a Segunda Parte que é: Se Close[i]-Close[i+1] for menor que a mediana do valor da última diferença de 100 bar, atribuirei o valor 0 a todo o buffer.
Agora o indicador combinado funciona bem em 1 gráfico, mas quando eu mudo de intervalo de tempo, esse indicador desaparece. Eu tenho que recolocá-lo no gráfico.
Acho que o problema é causado pelo Array, mas não sei como resolvê-lo.
Alguém pode me ajudar com o erro?
Muito obrigado.
SCFX