Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Scripts

Demo_FileWriteDouble - script para MetaTrader 5

Visualizações:
906
Avaliação:
(33)
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 Demo_FileReadDouble

O indicador demonstra um exemplo de como usar a função FileReadDouble().

Projeções Daily Range Projeções Daily Range

Previsão da próxima mudança de intervalo do candle em gráfico diário.

BrainTrend1 e BrainTrend2 BrainTrend1 e BrainTrend2

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 Demo_FileReadDatetime

O indicador demonstra o exemplo de como usar a função FileReadDatetime().