Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1114
- Avaliação:
- Publicado:
- 2014.01.14 13:59
- Atualizado:
- 2016.11.22 07:33
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
O script define os sinais formados pelo indicador MACD e salva-os no arquivo. Nos parâmetros de entrada do script podem ser especificados os parâmetros para o cálculo do indicador MACD, o nome do par de moedas e os prazos, bem como a data a partir da qual iremos analisar os dados. O arquivo com os sinais de indicador estará localizado no subdiretório "Dados" da pasta local do terminal .
Código:
Primeiramente temos o array de valores do indicador e o array de tempo para o período especificado:
//--- o tempo final é a hora atual date_finish=TimeCurrent(); //--- receber o handle do indicador MACD ResetLastError(); int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice); if(macd_handle==INVALID_HANDLE) { //--- falha ao receber o handle do indicador MACD PrintFormat("Erro quando recebe o handle do indicador. Erro código = %d",GetLastError()); return; } //--- fica em loop até o indicador calcular todos os seus valores while(BarsCalculated(macd_handle)==-1) Sleep(10); // pausa para permitir que o indicador cálcule os respectivos valores //--- copiar os valores do indicador para um determinado período de tempo ResetLastError(); if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1) { PrintFormat("Falha ao copiar valores dos indicadores. Erro código = %d",GetLastError()); return; } //--- copiar o tempo apropriado para os valores do indicador ResetLastError(); if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1) { PrintFormat("Falha ao copiar valores de tempo. Erro código = %d",GetLastError()); return; }
Em seguida, definir os sinais de indicadores e o tempo da sua formação:
//--- receber o tamanho do buffer macd_size=ArraySize(macd_buff); //--- analisar os dados e salvar os sinais dos indicadores para os arrays ArrayResize(sign_buff,macd_size-1); ArrayResize(time_buff,macd_size-1); for(int i=1;i<macd_size;i++) { //--- sinal Compra if(macd_buff[i-1]<0 && macd_buff[i]>=0) { sign_buff[sign_size]=true; time_buff[sign_size]=date_buff[i]; sign_size++; } //--- sinal Venda if(macd_buff[i-1]>0 && macd_buff[i]<=0) { sign_buff[sign_size]=false; time_buff[sign_size]=date_buff[i]; sign_size++; } }
Finalmente, podemos escrever os valores de sinais obtidos para o arquivo usando a função FileWrite() :
//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele será criado automaticamente) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV); if(file_handle!=INVALID_HANDLE) { PrintFormat("%s do arquivo está disponível para a escrita",InpFileName); PrintFormat("Caminho do arquivo: %s\\Arquivos\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- primeiro, escreva o número de sinais FileWrite(file_handle,sign_size); //--- escrever o tempo e os valores dos sinais para o arquivo for(int i=0;i<sign_size;i++) FileWrite(file_handle,time_buff[i],sign_buff[i]); //--- fechar o arquivo FileClose(file_handle); PrintFormat("Os dados são gravados, o arquivo %s está fechado",InpFileName); } else PrintFormat("falha para abrir o arquivo %s file, Erro código = %d",InpFileName,GetLastError());
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1626

O indicador mostra os momentos de aceleração mercado. Ele também indica o momento para compra, venda e saída do mercado.

O indicador de Fisher calcula os níveis do preço máximo e mínimo nos dados históricos, determinando a direção da tendência e a previsão de uma reversão.

StepMA é executado como uma média móvel.

Indicador de tendência alternativa com base no padrão de rompimento do fechamento das barras extremas dos preços anteriores.