Miscellaneous
0
Views
0
Downloads
0
Favorites
i-spread
//+------------------------------------------------------------------+
//| i-Spread.mq5 |
//| Copyright © 2013, Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//--- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//--- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//--- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ
#property indicator_buffers 3
//--- èñïîëüçîâàíî òðè ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 3
//+-----------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+-----------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type1 DRAW_LINE
//--- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí Red öâåò
#property indicator_color1 clrRed
//--- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//--- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width1 2
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "Max"
//--- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type2 DRAW_LINE
//--- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí Gold öâåò
#property indicator_color2 clrGold
//--- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style2 STYLE_SOLID
//--- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width2 2
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label2 "Current"
//--- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type3 DRAW_LINE
//--- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí Blue öâåò
#property indicator_color3 clrBlue
//--- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style3 STYLE_SOLID
//--- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width3 2
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label3 "Min"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input bool WriteInFile = false; // Çàïèñûâàòü â ôàéë
input string FileName = ""; // Èìÿ ôàéëà
input int Shift=0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//--- èíäèêàòîðíûå áóôåðû
double buf0[],buf1[],buf2[];
//--- îáúÿâëåíèå ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
string FileName_;
int min_rates_total;
datetime prevH1,prevH4,prevD1;
double maxH1,maxH4,maxD1,prevSpread,minH1,minH4,minD1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- èíèöèàëèçàöèÿ êîíñòàíò
min_rates_total=3;
FileName_=FileName;
if(StringLen(FileName_)==0) FileName_="spr_"+StringLower(Symbol())+"_"+GetStringTimeframe(Period())+".csv";
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,buf0,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà AroonShift
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,buf1,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,buf2,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 3
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,"i-Spread");
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- çàâåðøåíèå èíèöèàëèçàöèè
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Comment("");
//---
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
//--- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(rates_total<min_rates_total) return(0);
//---
int bar0=rates_total-1;
//--- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
for(int bar=0; bar<=bar0 && !IsStopped(); bar++)
{
buf0[bar]=EMPTY_VALUE;
buf1[bar]=EMPTY_VALUE;
buf2[bar]=EMPTY_VALUE;
}
}
//---
if(prev_calculated!=rates_total)
{
buf0[bar0]=0;
buf2[bar0]=99999999;
}
//---
double sp=spread[bar0];
string st="";
datetime iTimeH1[1],iTimeH4[1],iTimeD1[1];
//---
if(CopyTime(Symbol(),PERIOD_H1,time[bar0],1,iTimeH1)<=0) return(0);
if(CopyTime(Symbol(),PERIOD_H4,time[bar0],1,iTimeH4)<=0) return(0);
if(CopyTime(Symbol(),PERIOD_D1,time[bar0],1,iTimeD1)<=0) return(0);
//---
buf1[bar0]=sp;
if(buf0[bar0]==EMPTY_VALUE) buf0[bar0]=sp;
if(sp>buf0[bar0]) buf0[bar0]=sp;
if(sp<buf2[bar0] && sp) buf2[bar0]=sp;
//---
if(prevH1<iTimeH1[0])
{
maxH1=sp;
minH1=sp;
}
prevH1=iTimeH1[0];
if(maxH1<sp) maxH1=sp;
if(minH1>sp) minH1=sp;
//---
if(prevH4<iTimeH4[0])
{
maxH4=sp;
minH4=sp;
}
prevH4=iTimeH4[0];
if(maxH4<sp) maxH4=sp;
if(minH4>sp) minH4=sp;
//---
if(prevD1<iTimeD1[0])
{
maxD1=sp;
minD1=sp;
}
prevD1=iTimeD1[0];
if(maxD1<sp) maxD1=sp;
if(minD1>sp) minD1=sp;
//---
StringConcatenate(st,"Maximum on H1 = ",DoubleToString(maxH1,2),"\n"
,"Maximum on H4 = ",DoubleToString(maxH4,2),"\n"
,"Maximum on D1 = ",DoubleToString(maxD1,2),"\n"
,"Current spread = ",DoubleToString(sp,2),"\n"
,"Minimum on D1 = ",DoubleToString(minD1,2),"\n"
,"Minimum on H4 = ",DoubleToString(minH4,2),"\n"
,"Minimum on H1 = ",DoubleToString(minH1,2),"\n"
);
Comment(st);
//---
if(WriteInFile)
{
if(prevSpread!=sp)
{
StringConcatenate(st,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS),";",DoubleToString(sp,2));
WritingLineInFile(FileName_,st);
}
}
prevSpread=sp;
//---
return(rates_total);
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Ïîëó÷åíèå òàéìôðåéìà â âèäå ñòðîêè |
//+----------------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
{return(StringSubstr(EnumToString(timeframe),7,-1));}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò ñòðîêó â íèæíåì ðåãèñòðå |
//+----------------------------------------------------------------------------+
string StringLower(string s)
{
//---
int c,i,k=StringLen(s),n;
for(i=0; i<k; i++)
{
n=0;
c=StringGetCharacter(s, i);
if(c>64 && c<91) n=c+32; // A-Z -> a-z
if(c>191 && c<224) n=c+32; // À-ß -> à-ÿ
if(c==168) n=184; // å -> å
if(n>0) StringSetCharacter(s,i,ushort(n));
}
//---
return(s);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : Çàïèñü ñòðîêè â ôàéë |
//| Ïàðàìåòðû: |
//| FileName - èìÿ ôàéëà |
//| text - ñòðîêà |
//+----------------------------------------------------------------------------+
void WritingLineInFile(string File_Name,string text)
{
//---
int file_handle=FileOpen(File_Name,FILE_READ|FILE_WRITE," ");
if(file_handle>0)
{
FileSeek(file_handle,0,SEEK_END);
FileWrite(file_handle,text);
FileClose(file_handle);
}
//---
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---