Author: Copyright � 2009, al_su
Miscellaneous
Implements a curve of type %1Uses files from the file systemIt reads information from a file
0 Views
0 Downloads
0 Favorites
FA
//+------------------------------------------------------------------+
//|                                                           FA.mq4 |
//|                                          Copyright © 2009, al_su |
//|                                                  al_su31@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, al_su"
#property link      "al_su31@mail.ru"
#include <stdlib.mqh>
#property indicator_separate_window
#property indicator_buffers 8
//---- input parameters
extern string    ôàéë_äàííûõ1=".csv";
extern string    ïîäïèñü1="";
extern color     öâåò1=Red;
extern string    ôàéë_äàííûõ2=".csv";
extern string    ïîäïèñü2="";
extern color     öâåò2=Orange;
extern string    ôàéë_äàííûõ3=".csv";
extern string    ïîäïèñü3="";
extern color     öâåò3=Yellow;
extern string    ôàéë_äàííûõ4=".csv";
extern string    ïîäïèñü4="";
extern color     öâåò4=Green;
extern string    ôàéë_äàííûõ5=".csv";
extern string    ïîäïèñü5="";
extern color     öâåò5=DeepSkyBlue;
extern string    ôàéë_äàííûõ6=".csv";
extern string    ïîäïèñü6="";
extern color     öâåò6=Blue;
extern string    ôàéë_äàííûõ7=".csv";
extern string    ïîäïèñü7="";
extern color     öâåò7=Navy;
extern string    ôàéë_äàííûõ8=".csv";
extern string    ïîäïèñü8="";
extern color     öâåò8=Magenta;
extern string    ôîðìàò_äàòû="dd.mm.yyyy";
extern string    ðàçäåëèòåëü_çàïèñåé=";";
extern string    ðàçäåëèòåëü_öåëîé_è_äðîáíîé=",";

//---- buffers
double FA1[];
double FA2[];
double FA3[];
double FA4[];
double FA5[];
double FA6[];
double FA7[];
double FA8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
string id;
int init()
  {
   MathSrand((int)TimeLocal());
   for(;;)
   {
      id=StringConcatenate("Fundamental data (id_",MathRand(),")");
      if(WindowFind(id)<0) break;
   }
   IndicatorShortName(id);
//---- indicators
   if(FileCanOpen(ôàéë_äàííûõ1))
   {
      if(StringTrimLeft(StringTrimRight(ïîäïèñü1))=="")
         ïîäïèñü1=StringSubstr(ôàéë_äàííûõ1,0,StringFind(ôàéë_äàííûõ1,"."));
   }
   else ïîäïèñü1="";      
   if(FileCanOpen(ôàéë_äàííûõ2))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü2))=="")
      ïîäïèñü2=StringSubstr(ôàéë_äàííûõ2,0,StringFind(ôàéë_äàííûõ2,"."));
   }
   else ïîäïèñü2="";      
   if(FileCanOpen(ôàéë_äàííûõ3))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü3))=="")
      ïîäïèñü3=StringSubstr(ôàéë_äàííûõ3,0,StringFind(ôàéë_äàííûõ3,"."));
   }
   else ïîäïèñü3="";      
   if(FileCanOpen(ôàéë_äàííûõ4))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü4))=="")
      ïîäïèñü4=StringSubstr(ôàéë_äàííûõ4,0,StringFind(ôàéë_äàííûõ4,"."));
   }
   else ïîäïèñü4="";      
   if(FileCanOpen(ôàéë_äàííûõ5))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü5))=="")
      ïîäïèñü5=StringSubstr(ôàéë_äàííûõ5,0,StringFind(ôàéë_äàííûõ5,"."));
   }
   else ïîäïèñü5="";      
   if(FileCanOpen(ôàéë_äàííûõ6))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü6))=="")
      ïîäïèñü6=StringSubstr(ôàéë_äàííûõ6,0,StringFind(ôàéë_äàííûõ6,"."));
   }
   else ïîäïèñü6="";      
   if(FileCanOpen(ôàéë_äàííûõ6))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü7))=="")
      ïîäïèñü7=StringSubstr(ôàéë_äàííûõ7,0,StringFind(ôàéë_äàííûõ7,"."));
   }
   else ïîäïèñü7="";      
   if(FileCanOpen(ôàéë_äàííûõ8))
   {
   if(StringTrimLeft(StringTrimRight(ïîäïèñü8))=="")
      ïîäïèñü8=StringSubstr(ôàéë_äàííûõ8,0,StringFind(ôàéë_äàííûõ8,"."));
   }
   else ïîäïèñü8="";      
      
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,öâåò1);
   SetIndexLabel(0,ïîäïèñü1);
   SetIndexBuffer(0,FA1);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,öâåò2);
   SetIndexLabel(1,ïîäïèñü2);
   SetIndexBuffer(1,FA2);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1,öâåò3);
   SetIndexLabel(2,ïîäïèñü3);
   SetIndexBuffer(2,FA3);
   SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1,öâåò4);
   SetIndexLabel(3,ïîäïèñü4);
   SetIndexBuffer(3,FA4);
   SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1,öâåò5);
   SetIndexLabel(4,ïîäïèñü5);
   SetIndexBuffer(4,FA5);
   SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1,öâåò6);
   SetIndexLabel(5,ïîäïèñü6);
   SetIndexBuffer(5,FA6);
   SetIndexStyle(6,DRAW_LINE,STYLE_SOLID,1,öâåò7);
   SetIndexLabel(6,ïîäïèñü7);
   SetIndexBuffer(6,FA7);
   SetIndexStyle(7,DRAW_LINE,STYLE_SOLID,1,öâåò8);
   SetIndexLabel(7,ïîäïèñü8);
   SetIndexBuffer(7,FA8);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   for(int i=ObjectsTotal()-1;i>=0;i--)
   {
      if(StringFind(ObjectName(i),id,0)==0)
         ObjectDelete(ObjectName(i));
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   DrawData(ôàéë_äàííûõ1,FA1,ïîäïèñü1,öâåò1);
   DrawData(ôàéë_äàííûõ2,FA2,ïîäïèñü2,öâåò2);
   DrawData(ôàéë_äàííûõ3,FA3,ïîäïèñü3,öâåò3);
   DrawData(ôàéë_äàííûõ4,FA4,ïîäïèñü4,öâåò4);
   DrawData(ôàéë_äàííûõ5,FA5,ïîäïèñü5,öâåò5);
   DrawData(ôàéë_äàííûõ6,FA6,ïîäïèñü6,öâåò6);
   DrawData(ôàéë_äàííûõ7,FA7,ïîäïèñü7,öâåò7);
   DrawData(ôàéë_äàííûõ8,FA8,ïîäïèñü8,öâåò8);
//----
   return(0);
  }
//+------------------------------------------------------------------+
void DrawData(string file, double &FA[], string label, color C)
{
   int i,j,h;
   string date,val;
   h=FileOpen(file,FILE_READ|FILE_CSV,ðàçäåëèòåëü_çàïèñåé);
   if(h>=0)
   {
      ArrayInitialize(FA,EMPTY_VALUE);
      FileSeek(h,0,SEEK_SET);
      while(!FileIsEnding(h))
      {
         date=FileReadString(h);
         val=FileReadString(h);
         if(ðàçäåëèòåëü_öåëîé_è_äðîáíîé!=".") _StringReplace(val,ðàçäåëèòåëü_öåëîé_è_äðîáíîé,".");
         FA[iBarShift(NULL,0,StrToDate(date,ôîðìàò_äàòû))]=StrToDouble(val);
      }
      FileClose(h);
      int max=0;
      for(i=0;i<Bars-1;i++)
         if(FA[i]!=EMPTY_VALUE) max=i;
      for(i=max-1;i>=0;i--)
      {
         if(FA[i]!=EMPTY_VALUE)
         {
            for(j=i+1;j<max;j++) FA[j]=FA[i]+((FA[max]-FA[i])/(max-i))*(j-i);
            max=i;
         }   
      }
      ObjectDelete(id+"_"+label); 
      ObjectCreate(id+"_"+label,OBJ_TEXT,WindowFind(id),Time[max],FA[max]);
      ObjectSetText(id+"_"+label,label,8,"",C);   
//      Alert(ErrorDescription(GetLastError()));
   }
}

void _StringReplace(string &src, string old, string new_string)
{
   src=StringTrimLeft(StringTrimRight(src));
   old=StringTrimLeft(StringTrimRight(old));
   new_string=StringTrimLeft(StringTrimRight(new_string));
   int p;
   while(true)
   {
      p=StringFind(src,old);
      if(p==-1) break;
      src=StringConcatenate(StringSubstr(src,0,p),new_string,StringSubstr(src,p+StringLen(old)));
   }
}

bool IsNumeric(string c)
{
   int i=StringGetChar(c,0);
   return(i>=48&&i<=57);
}

datetime StrToDate(string src, string format)
{
   src=StringTrimLeft(StringTrimRight(src));
   format=StringTrimLeft(StringTrimRight(format));
   
   string sy="",sm="",sd="",sh="",si="";
   int pos=0;
   string c,p;
   while(pos<StringLen(src))
   {
      c=StringSubstr(src,pos,1);
      p=StringSubstr(format,pos,1);
      
      if(p=="y")
      {
        if(IsNumeric(c)) sy=sy+c;
        else return(0);
      }
      else
      if(p=="m")
      {
        if(IsNumeric(c)) sm=sm+c;
        else return(0);
      }
      else
      if(p=="d")
      {
        if(IsNumeric(c)) sd=sd+c;
        else return(0);
      }  
      else
      if(p=="h")
      {
        if(IsNumeric(c)) sh=sh+c;
        else return(0);
      }
      else
      if(p=="i")
      {
        if(IsNumeric(c)) si=si+c;
        else return(0);
      }
      else 
      if(p!=c) return(0);
      pos++;
   }   
   string result;
   if(sy!=""&&sm!=""&&sd!="") result=StringConcatenate(sy,".",sm,".",sd);
   if(sh!=""&&si!="") result=StringConcatenate(result," ",sh,":",si);
   return(StrToTime(result));
}

bool FileCanOpen(string file)
{
   int h=FileOpen(file,FILE_READ|FILE_CSV,ðàçäåëèòåëü_çàïèñåé);
   if(h>=0) {FileClose(h);return(true);}
   return(false);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---