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
Demo_FileReadDatetime - indicador para MetaTrader 5
- Visualizações:
- 1474
- 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 indicador lê sinais de compra e venda a partir do arquivo localizado no subdiretório da pasta local do terminal e então exibe esses sinais em forma de setas direcionadas para cima e para baixo. Para obter o arquivo com os sinais que você precisa deve-se preliminarmente executar o script Demo_FileWrite . A posição da pasta local do terminal pode ser obtida chamando a função TerminalInfoString().
PrintFormat("O caminho para a pasta local do terminal: %s\\Arquivos\\",TerminalInfoString(TERMINAL_DATA_PATH));Para obter dados em adição a função FileReadDatetime(), o indicador também usa as funções FileReadNumber() e FileReadBool().
Código:
#property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //---- plotar Label1 #property indicator_label1 "UpSignal" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 4 //---- plotar Label2 #property indicator_label2 "DownSignal" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 4 //--- parâmetros para leitura de dados input string InpFileName="MACD.csv"; // nome do arquivo input string InpDirectoryName="Dados"; // nome do diretório //--- globais variáveis int ind=0; // índice double upbuff[]; // buffer de indicator das setas para cima double downbuff[]; // buffer de indicator das setas para baixo bool sign_buff[]; // sinal array (verdeiro - buy, falso - sell) datetime time_buff[]; // array de sinais da entrada de tempo int size=0; // tamanho do sinal dos arrays //+------------------------------------------------------------------+ //| Função de inicialização do indicador personalizado | //+------------------------------------------------------------------+ int OnInit() { //--- abrir o arquivo ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV); if(file_handle!=INVALID_HANDLE) { PrintFormat(arquivo "%s está aberto para leitura",InpFileName); //--- Primeiramente, leitura do número de sinais size=(int)FileReadNumber(file_handle); //--- alocar memória para os arrays ArrayResize(sign_buff,size); ArrayResize(time_buff,size); //--- leitura de dados do arquivo for(int i=0;i<size;i++) { //--- tempo do sinal time_buff[i]=FileReadDatetime(file_handle); //--- valor do sinal sign_buff[i]=FileReadBool(file_handle); } //--- fechar o arquivo FileClose(file_handle); } else { PrintFormat("Falha para abrir o arquivo %s, Erro código = %d",InpFileName,GetLastError()); return(INIT_FAILED); } //--- vinculando os arrays SetIndexBuffer(0,upbuff,INDICATOR_DATA); SetIndexBuffer(1,downbuff,INDICATOR_DATA); //--- definir o código do símbolo para desenho em PLOT_ARROW PlotIndexSetInteger(0,PLOT_ARROW,241); PlotIndexSetInteger(1,PLOT_ARROW,242); //---- definir os valores dos indicadores que não serão vistos no gráfico PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|Função de interação do indicador personalizado | //+------------------------------------------------------------------+ 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[]) { ArraySetAsSeries(time,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); //--- o loop para as barras que ainda não foram manipuladas for(int i=prev_calculated;i<rates_total;i++) { //--- valor padrão é 0 upbuff[i]=0; downbuff[i]=0; //--- verificar se todos os dados ainda estão presentes if(ind<size) { for(int j=ind;j<size;j++) { //--- se as datas coincidirem, use o valor do arquivo if(time[i]==time_buff[j]) { //--- desenhar a seta de acordo com o sinal if(sign_buff[j]) upbuff[i]=high[i]; else downbuff[i]=low[i]; //--- aumentar o contador ind=j+1; break; } } } } //--- valor de retorno de prev_calculated para a próxima chamada return(rates_total); }
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1627
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_FileWriteDoubleO script demonstra o exemplo de como usar a funçãoFileWriteDouble().
LeManTrend determina a posição da tendência baseado no preço atual e nos preços máximo e mínimo para três períodos.
VininI WPR FOFaixa Percentual de Larry Williams suavizada utilizando a Transformada de Fischer.