//+------------------------------------------------------------------+ //| FA.mq4 | //| Copyright © 2009, al_su | //| al_su31@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, al_su" #property link "al_su31@mail.ru" #include #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=0;i--) { if(FA[i]!=EMPTY_VALUE) { for(j=i+1;j=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=0) {FileClose(h);return(true);} return(false); }