Price Data Components
0
Views
0
Downloads
0
Favorites
Currency heat map_002
//+------------------------------------------------------------------+
//| Currency heat map.mq4 |
//| mladen |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link "mladenfx@gmail.com"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 1
//
//
//
//
//
extern string Currencies = "USD;EUR;GBP;JPY;CHF;CAD;AUD;NZD";
extern string TimeFrames = "H4;D1";
extern color StrongUp = LimeGreen;
extern color WeakUp = Green;
extern color NoMove = DimGray;
extern color WeakDown = FireBrick;
extern color StrongDown = Red;
extern color DoesNotExist = Black;
extern bool UseMSLineDrawFont = false;
//
//
//
//
//
string shortName;
int shortLength;
int window;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
int cpairsLen;
int ctimesLen;
string cpairs[];
int aTimes[];
string addition = "";
string FontToUse = "Terminal";
//
//
//
//
//
int init()
{
if (UseMSLineDrawFont) FontToUse = "MS LIneDraw";
Currencies = StringUpperCase(StringTrimLeft(StringTrimRight(Currencies)));
if (StringSubstr(Currencies,StringLen(Currencies),1) != ";")
Currencies = StringConcatenate(Currencies,";");
//
//
//
//
//
int s = 0;
int i = StringFind(Currencies,";",s);
string current;
while (i > 0)
{
current = StringSubstr(Currencies,s,i-s);
ArrayResize(cpairs,ArraySize(cpairs)+1);
cpairs[ArraySize(cpairs)-1] = current;
s = i + 1;
i = StringFind(Currencies,";",s);
}
cpairsLen = ArraySize(cpairs);
//
//
//
//
//
TimeFrames = StringUpperCase(StringTrimLeft(StringTrimRight(TimeFrames)));
if (StringSubstr(TimeFrames,StringLen(TimeFrames),1) != ";")
TimeFrames = StringConcatenate(TimeFrames,";");
//
//
//
//
//
s = 0;
i = StringFind(TimeFrames,";",s);
int time;
while (i > 0)
{
current = StringSubstr(TimeFrames,s,i-s);
time = stringToTimeFrame(current);
if (time > 0) {
ArrayResize(aTimes,ArraySize(aTimes)+1);
aTimes[ArraySize(aTimes)-1] = time; }
s = i + 1;
i = StringFind(TimeFrames,";",s);
}
ctimesLen = ArraySize(aTimes);
//
//
//
//
//
if (IsMini()) addition="m";
shortName = MakeUniqueName("CHM ","");
shortLength = StringLen(shortName);
IndicatorShortName(shortName);
return(0);
}
//
//
//
//
//
int deinit()
{
clearObjects();
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
int start()
{
string name;
int gaph = (cpairsLen*66+10);
int gapv = (cpairsLen*15+20);
int i,k,t;
window = WindowFind(shortName);
//
//
//
//
//
for (t = 0; t < ctimesLen; t++ )
{
name = shortName+"t"+t+i;
if (ObjectFind(name) == -1)
ObjectCreate(name,OBJ_LABEL,window,0,0,0,0);
ObjectSet(name,OBJPROP_XDISTANCE,5 +(t%2)*30);
ObjectSet(name,OBJPROP_YDISTANCE,20+(t/2)*15);
ObjectSetText(name,TimeFrameToString(aTimes[t]),10,"Arial Bold");
//
//
//
//
//
for (i = 0; i < cpairsLen; i++)
{
name = shortName+"h"+t+i;
if (ObjectFind(name) == -1)
ObjectCreate(name,OBJ_LABEL,window,0,0,0,0);
ObjectSet(name,OBJPROP_XDISTANCE,i*66+120+gaph*(t%2));
ObjectSet(name,OBJPROP_YDISTANCE, 1+gapv*(t/2));
ObjectSetText(name,cpairs[i],10,"Arial Bold");
if ((t%2)>0) continue;
name = shortName+"v"+t+i;
if (ObjectFind(name) == -1)
ObjectCreate(name,OBJ_LABEL,window,0,0,0,0);
ObjectSet(name,OBJPROP_XDISTANCE, 65);
ObjectSet(name,OBJPROP_YDISTANCE,i*15+20+gapv*(t/2));
ObjectSetText(name,cpairs[i],10,"Arial Bold");
}
}
//
//
//
//
//
for (t = 0; t < ctimesLen; t++)
for (i = 0; i < cpairsLen; i++)
for (k = i+1; k < cpairsLen; k++)
{
string symbol = cpairs[i]+cpairs[k]+addition;
double price = iClose(symbol,aTimes[t],0);
bool normal = true;
bool exist = true;
if (price == 0)
{
symbol = cpairs[k]+cpairs[i]+addition;
price = iClose(symbol,aTimes[t],0);
normal = false;
}
if (price == 0) exist = false;
double close = iClose(symbol,aTimes[t],1);
double high = iHigh(symbol,aTimes[t],1);
double low = iLow(symbol,aTimes[t],1);
//
//
//
//
//
for (int l=0; l<2; l++)
{
color theColor = DoesNotExist;
if (exist)
{
if (!normal)
while (true)
{
if (price > high) { theColor = StrongUp; break; }
if (price > close) { theColor = WeakUp; break; }
if (price== close) { theColor = NoMove; break; }
if (price < low) { theColor = StrongDown; break; }
theColor = WeakDown; break;
}
else
while (true)
{
if (price > high) { theColor = StrongDown; break; }
if (price > close) { theColor = WeakDown; break; }
if (price== close) { theColor = NoMove; break; }
if (price < low) { theColor = StrongUp; break; }
theColor = WeakUp; break;
}
}
//
//
//
//
//
name = shortName+t+k+i;
if (ObjectFind(name) == -1)
ObjectCreate(name,OBJ_LABEL,window,0,0,0,0);
ObjectSet(name,OBJPROP_XDISTANCE,i*66+100+gaph*(t%2));
ObjectSet(name,OBJPROP_YDISTANCE,k*15+ 20+gapv*(t/2));
ObjectSetText(name,"ÛÛÛÛÛÛÛÛ",10,FontToUse,theColor);
int tmp = k; k = i; i = tmp;
normal = (!normal);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
bool IsMini() { return(StringFind(Symbol(),"m") > -1); }
string MakeUniqueName(string first, string rest)
{
string result = first+(MathRand()%1001)+rest;
while (WindowFind(result)> 0)
result = first+(MathRand()%1001)+rest;
return(result);
}
//
//
//
//
//
void clearObjects()
{
for (int i = ObjectsTotal(); i>=0; i--)
{
string name = ObjectName(i);
if (StringSubstr(name,0,shortLength) == shortName) ObjectDelete(name);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
int tf=0;
tfs = StringTrimLeft(StringTrimRight(StringUpperCase(tfs)));
if (tfs=="M1" || tfs=="1") tf=PERIOD_M1;
if (tfs=="M5" || tfs=="5") tf=PERIOD_M5;
if (tfs=="M15"|| tfs=="15") tf=PERIOD_M15;
if (tfs=="M30"|| tfs=="30") tf=PERIOD_M30;
if (tfs=="H1" || tfs=="60") tf=PERIOD_H1;
if (tfs=="H4" || tfs=="240") tf=PERIOD_H4;
if (tfs=="D1" || tfs=="1440") tf=PERIOD_D1;
if (tfs=="W1" || tfs=="10080") tf=PERIOD_W1;
if (tfs=="MN" || tfs=="43200") tf=PERIOD_MN1;
return(tf);
}
string TimeFrameToString(int tf)
{
string tfs;
switch(tf) {
case PERIOD_M1: tfs="M1" ; break;
case PERIOD_M5: tfs="M5" ; break;
case PERIOD_M15: tfs="M15" ; break;
case PERIOD_M30: tfs="M30" ; break;
case PERIOD_H1: tfs="H1" ; break;
case PERIOD_H4: tfs="H4" ; break;
case PERIOD_D1: tfs="D1" ; break;
case PERIOD_W1: tfs="W1" ; break;
case PERIOD_MN1: tfs="MN";
}
return(tfs);
}
//
//
//
//
//
string StringUpperCase(string str)
{
string s = str;
int lenght = StringLen(str) - 1;
int char;
while(lenght >= 0)
{
char = StringGetChar(s, lenght);
//
//
//
//
//
if((char > 96 && char < 123) || (char > 223 && char < 256))
s = StringSetChar(s, lenght, char - 32);
else
if(char > -33 && char < 0)
s = StringSetChar(s, lenght, char + 224);
lenght--;
}
return(s);
}
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
---