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:
- 930
- Avaliação:
- Publicado:
- 2014.01.14 13:58
- 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 recebe os valores do indicador Média Móvel e escreve no arquivo binário do subdiretório "Dados" da pasta local do terminal. Nos parâmetros de entrada do script podem ser especificados os parâmetros para o cálculo do indicador MA, o nome do par de moedas e prazos, bem como a data a partir da qual vamos calcular os valores do indicador.
Além dos valores do indicador MA, os valores preliminares correspondentes de tempo são do tipo double sendo também gravados no arquivo.
Código:
//--- mostra a janela dos parâmetros de entrada ao lançar o script #property script_show_inputs //--- parâmetros para a entrada de dados a partir do terminal input string InpSymbolName="EURJPY"; // par de moedas input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_M15; // periodicidade input int InpMAPeriod=10; // período suavizado input int InpMAShift=0; // deslocamento do indicador input ENUM_MA_METHOD InpMAMethod=MODE_SMA; // tipo suavizado input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // tipo de preço input datetime InpDateStart=D'2013.01.01 00:00'; // cópia de dados da data de início //--- parâmetros para a gravação de dados ao arquivo input string InpFileName="MA.csv"; // nome do arquivo input string InpDirectoryName="Dados"; // nome do diretório //+------------------------------------------------------------------+ //|Função iniciar do Script de programa | //+------------------------------------------------------------------+ void OnStart() { datetime date_finish=TimeCurrent(); double ma_buff[]; datetime time_buff[]; int size; //--- obter o handle do indicador MA ResetLastError(); int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPrice); if(ma_handle==INVALID_HANDLE) { //--- falha para obter o handle de indicador PrintFormat("Erro ao receber o handle de indicador. Erro código = %d",GetLastError()); return; } //--- permanece no loop até o indicador calcular todos os seus valores while(BarsCalculated(ma_handle)==-1) Sleep(20); // uma pausa para permitir que o indicador calcule os respectivos valores PrintFormat("Valores do indicador a partir de %s será gravado no arquivo",TimeToString(InpDateStart)); //--- copiar os valores do indicador ResetLastError(); if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1) { PrintFormat("Falha ao copiar os valores do indicador. Erro código = %d",GetLastError()); return; } //--- copiar o tempo de chegada das barras apropriados ResetLastError(); if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1) { PrintFormat("Falha ao copiar os valores de tempo. Erro código = %d",GetLastError()); return; } //--- receber o tamanho do buffer size=ArraySize(ma_buff); //--- liberar a memória ocupada pelo indicador IndicatorRelease(ma_handle); //--- 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_BIN); if(file_handle!=INVALID_HANDLE) { PrintFormat("arquivo %s está disponível para ser escrito",InpFileName); PrintFormat("Caminho do arquivo: %s\\Arquivo\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- primeiro, escreva o tamanho da amostra de dados FileWriteDouble(file_handle,(double)size); //--- escrever o tempo do indicador e o valor para o arquivo for(int i=0;i<size;i++) { FileWriteDouble(file_handle,(double)time_buff[i]); FileWriteDouble(file_handle,ma_buff[i]); } //--- fechar o arquivo FileClose(file_handle); PrintFormat("Os dados foram gravados, o arquivo %s está fechado",InpFileName); } else PrintFormat("Falha ao abrir o arquivo %s, Erro código = %d",InpFileName,GetLastError()); }
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1629
![Demo_FileReadDouble](https://c.mql5.com/i/code/indicator.png)
O indicador demonstra um exemplo de como usar a função FileReadDouble().
![Projeções Daily Range](https://c.mql5.com/i/code/indicator.png)
Previsão da próxima mudança de intervalo do candle em gráfico diário.
![BrainTrend1 e BrainTrend2](https://c.mql5.com/i/code/indicator.png)
BrainTrend1 e BrainTrend2 são colocados em janela minimizada para remover elementos excessivos do trabalho gráfico. BrainTrend1 (pontos quadrados superiores) é um indicador básico tendência, enquanto BrainTrend2 (pontos menores redondos) é um indicador de confirmação.
![Demo_FileReadDatetime](https://c.mql5.com/i/code/indicator.png)
O indicador demonstra o exemplo de como usar a função FileReadDatetime().