[MT4指标]Currency heat map指标
附图指标,在附图上显示出货币的强弱情况,以整体判断汇市的可操作货币
mt4指标类型:趋势指标
是否能用在mt4手机版上:否
是否含有未来函数:无
//+------------------------------------------------------------------+
//| Currency heat map.mq4 |
//| mladen |
//+------------------------------------------------------------------+
#property copyright \"mladen\"
#property link \"[email protected]\"
#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,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,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+cpairs[k]+addition;
double price = iClose(symbol,aTimes[t],0);
bool normal = true;
bool exist = true;
if (price == 0)
{
symbol = cpairs[k]+cpairs+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);
}
发表于:2017-08-09 23:44只看该作者
2楼
韬客交易社区-国内最大的外汇交易社区
韬客社区www.talkfx.co