标签:
杂谈 |
分类: 外汇知识学习 |
查看原文:http://www.125808047.com/?p=101
MT4货币相对强弱指标可以实时监测各个货币相对其它货币对强弱情况,做超短选择货币对适用。
新建一个指标文件,路径保存在MT4自定义指标文件里。然后复制下面代码进去。编译后插入图表如下:
http://www.125808047.com/fgp/wp-content/uploads/2015/08/a11-300x156.jpg
MQL4源码如下
//--------------------- xdqr.mq4 //-------------------------------------------------- #property copyright "www.125808047.com" #property link"http://www.125808047.com/"
#property indicator_chart_window
extern bool CalcPannel_Enabled = TRUE; extern bool CandleTime_Enabled = TRUE; extern bool PriceMeter_Enabled = TRUE; extern bool Pannel_On_Right = TRUE; extern color Label_Color = SkyBlue; extern color Value_Color1 = Orange; extern color Value_Color2 = GreenYellow; extern color CandleTime_Color = DimGray; bool Gloi_108; int Gloia_112[18]; int Gloia_116[18]; int Gloia_120[18]; int Gloia_124[8]; int Gloia_128[8]; int Gloia_132[9] = {4, 10, 25, 40, 50, 60, 75, 90, 97}; string Glosa_136[8] = {"NZD", "CAD", "CHF", "AUD", "JPY", "USD", "GBP", "EUR"}; string Glosa_140[18] = {"EURUSD", "GBPUSD", "AUDUSD", "USDJPY", "USDCHF", "USDCAD", "EURJPY", "EURGBP", "EURCHF", "EURAUD", "GBPJPY", "GBPCHF", "CADJPY", "EURCAD", "AUDCAD", "AUDJPY", "AUDNZD","NZDUSD"}; int Gloia_144[10] = {10495, 20735, 30975, 41215, 48895, 46280, 51350, 56420, 61490, 65280};
int init() {Gloi_108 = TRUE; return (0); }
int deinit() {ObjectsDeleteAll(); return (0); }
int start() {CalcPannel(); PriceMeter(); if (Gloi_108) Gloi_108 = FALSE; return (0); }
void SideLabel(string Arg_name_0, int Arg_x_8, int Arg_y_12, int Arg_corner_16 = 0) {if (ObjectFind(Arg_name_0) != 0) { ObjectCreate(Arg_name_0, OBJ_LABEL, 0, 0, 0); if (Pannel_On_Right) Arg_corner_16++; ObjectSet(Arg_name_0, OBJPROP_CORNER, Arg_corner_16); ObjectSet(Arg_name_0, OBJPROP_XDISTANCE, Arg_x_8); ObjectSet(Arg_name_0, OBJPROP_YDISTANCE, Arg_y_12); } }
double DayRange(bool Argi_0 = TRUE) {double Locd_4 = iHigh(NULL, PERIOD_D1, 1) - iLow(NULL, PERIOD_D1, 1); double Locd_12 = Locd_4 + iHigh(NULL, PERIOD_D1, 2) - iLow(NULL, PERIOD_D1, 2); Locd_12 += iHigh(NULL, PERIOD_D1, 3) - iLow(NULL, PERIOD_D1, 3); Locd_12 += iHigh(NULL, PERIOD_D1, 4) - iLow(NULL, PERIOD_D1, 4); Locd_12 += iHigh(NULL, PERIOD_D1, 5) - iLow(NULL, PERIOD_D1, 5); double Locd_20 = Locd_12 + iHigh(NULL, PERIOD_D1, 6) - iLow(NULL, PERIOD_D1, 6); Locd_20 += iHigh(NULL, PERIOD_D1, 7) - iLow(NULL, PERIOD_D1, 7); Locd_20 += iHigh(NULL, PERIOD_D1, 8) - iLow(NULL, PERIOD_D1, 8); Locd_20 += iHigh(NULL, PERIOD_D1, 9) - iLow(NULL, PERIOD_D1, 9); Locd_20 += iHigh(NULL, PERIOD_D1, 10) - iLow(NULL, PERIOD_D1, 10); double Locd_28 = Locd_20 + iHigh(NULL, PERIOD_D1, 11) - iLow(NULL, PERIOD_D1, 11); Locd_28 += iHigh(NULL, PERIOD_D1, 12) - iLow(NULL, PERIOD_D1, 12); Locd_28 += iHigh(NULL, PERIOD_D1, 13) - iLow(NULL, PERIOD_D1, 13); Locd_28 += iHigh(NULL, PERIOD_D1, 14) - iLow(NULL, PERIOD_D1, 14); Locd_28 += iHigh(NULL, PERIOD_D1, 15) - iLow(NULL, PERIOD_D1, 15); Locd_28 += iHigh(NULL, PERIOD_D1, 16) - iLow(NULL, PERIOD_D1, 16); Locd_28 += iHigh(NULL, PERIOD_D1, 17) - iLow(NULL, PERIOD_D1, 17); Locd_28 += iHigh(NULL, PERIOD_D1, 18) - iLow(NULL, PERIOD_D1, 18); Locd_28 += iHigh(NULL, PERIOD_D1, 19) - iLow(NULL, PERIOD_D1, 19); Locd_28 += iHigh(NULL, PERIOD_D1, 20) - iLow(NULL, PERIOD_D1, 20); Locd_12 = 0.2 * Locd_12; Locd_20 /= 10.0; Locd_28 = 0.05 * Locd_28; if (Argi_0) return ((Locd_4 + Locd_12 + Locd_20 + Locd_28) / 4.0 / Point); return ((Locd_4 + Locd_12 + Locd_20 + Locd_28) / 8.0); }
void CalcPannel() {int Loci_0; int Loci_4; string Locs_8; if (CalcPannel_Enabled != FALSE) { if (Gloi_108) { SideLabel("labOpen", 73, 15); SideLabel("valOpen", 17, 15); SideLabel("labMaxP", 73, 30); SideLabel("valMaxP", 17, 30); SideLabel("labMinP", 73, 45); SideLabel("valMinP", 17, 45); SideLabel("labPoint", 73, 60); SideLabel("valPoint", 17, 60); SideLabel("labAV", 73, 75); SideLabel("valAV", 17, 75); SideLabel("labDV", 73, 90); SideLabel("valDV", 17, 90); SideLabel("labOffset", 73, 105); SideLabel("valOffset", 17, 105); SideLabel("valPrice", 17, 127); if (CandleTime_Enabled == TRUE) SideLabel("valCTime", 17, 147); ObjectSetText("labOpen", "开盘价", 9, "Arial", Label_Color); ObjectSetText("labMaxP", "最高价", 9, "Arial", Label_Color); ObjectSetText("labMinP", "最低价", 9, "Arial", Label_Color); ObjectSetText("labPoint", "交易点差", 9, "Arial", Label_Color); ObjectSetText("labAV", "日均波幅", 9, "Arial", Label_Color); ObjectSetText("labDV", "当日波幅", 9, "Arial", Label_Color); ObjectSetText("labOffset", "开盘涨跌", 9, "Arial", Label_Color); } ObjectSetText("valOpen", DoubleToStr(iOpen(NULL, PERIOD_D1, 0), Digits), 9, "Arial Black", Value_Color1); ObjectSetText("valMaxP", DoubleToStr(iHigh(NULL, PERIOD_D1, 0), Digits), 9, "Arial Black", Value_Color1); ObjectSetText("valMinP", DoubleToStr(iLow(NULL, PERIOD_D1, 0), Digits), 9, "Arial Black", Value_Color1); ObjectSetText("valPoint", DoubleToStr((Ask - Bid) / Point, 0), 9, "Arial Black", Value_Color2); ObjectSetText("valAV", DoubleToStr(DayRange(), 0), 9, "Arial Black", Value_Color2); ObjectSetText("valDV", DoubleToStr((iHigh(NULL, PERIOD_D1, 0) - iLow(NULL, PERIOD_D1, 0)) / Point, 0), 9, "Arial Black", Value_Color2); ObjectSetText("valOffset", DoubleToStr((iClose(NULL, PERIOD_D1, 0) - iOpen(NULL, PERIOD_D1, 0)) / Point, 0), 9, "Arial Black", Value_Color2); ObjectSetText("valPrice", DoubleToStr(Bid, Digits), 14, "Verdana", Value_Color1); if (CandleTime_Enabled == TRUE) { Loci_0 = Time[0] + 60 * Period() - TimeCurrent(); Loci_4 = Loci_0 % 60; Loci_0 = (Loci_0 - Loci_4) / 60; if (Loci_0 >= 0) { Locs_8 = Loci_4; if (StringLen(Locs_8) == 1) Locs_8 = "0" + Locs_8; ObjectSetText("valCTime", Loci_0 + ":" + Locs_8, 14, "Verdana", CandleTime_Color); } } } }
void PriceMeter() {int Loci_4; double point_8; double Locd_16; double Locd_24; double Locd_32; double low_40; string symbol_48; if (PriceMeter_Enabled != FALSE) { if (Gloi_108) { for (int index_0 = 0; index_0 < 18; index_0++) { symbol_48 = Glosa_140[index_0]; point_8 = MarketInfo(symbol_48, MODE_POINT); if (point_8 == 0.0) { Gloia_112[index_0] = 0; Gloia_116[index_0] = 0; Gloia_120[index_0] = 0; } else Gloia_120[index_0] = 1; } Gloia_124[7] = Gloia_120[0] + Gloia_120[6] + Gloia_120[7] + Gloia_120[8] + Gloia_120[9]; Gloia_124[6] = Gloia_120[1] + Gloia_120[10] + Gloia_120[11] + Gloia_120[7]; Gloia_124[5] = Gloia_120[3] + Gloia_120[4] + Gloia_120[5] + Gloia_120[0] + Gloia_120[1] + Gloia_120[2] + Gloia_120[17]; Gloia_124[4] = Gloia_120[3] + Gloia_120[6] + Gloia_120[10] + Gloia_120[12] + Gloia_120[15]; Gloia_124[3] = Gloia_120[2] + Gloia_120[9] + Gloia_120[14] + Gloia_120[15] + Gloia_120[16]; Gloia_124[2] = Gloia_120[4] + Gloia_120[8] + Gloia_120[11]; Gloia_124[1] = Gloia_120[5] + Gloia_120[14] + Gloia_120[13] + Gloia_120[12]; Gloia_124[0] = Gloia_120[16] + Gloia_120[17]; Loci_4 = 12; for (index_0 = 0; index_0 < 8; index_0++) { if (Gloia_124[index_0] > 0) { symbol_48 = "lab" + Glosa_136[index_0]; SideLabel(symbol_48, 73, Loci_4, 2); ObjectSetText(symbol_48, Glosa_136[index_0], 9, "Arial", Label_Color); Loci_4 += 15; } } } for (index_0 = 0; index_0 < 18; index_0++) { if (Gloia_120[index_0] != 0) { symbol_48 = Glosa_140[index_0]; point_8 = MarketInfo(symbol_48, MODE_POINT); Locd_32 = MarketInfo(symbol_48, MODE_HIGH); low_40 = MarketInfo(symbol_48, MODE_LOW); Locd_16 = MathMax((Locd_32 - low_40) / point_8, 1); Locd_32 = MarketInfo(symbol_48, MODE_BID); Locd_24 = (Locd_32 - low_40) / Locd_16 / point_8; Gloia_112[index_0] = iLookup(100.0 * Locd_24); Gloia_116[index_0] = 9 - Gloia_112[index_0]; } } Gloia_128[5] = Gloia_112[3] + Gloia_112[4] + Gloia_112[5] + Gloia_116[0] + Gloia_116[1] + Gloia_116[2] + Gloia_116[17]; Gloia_128[7] = Gloia_112[0] + Gloia_112[6] + Gloia_112[7] + Gloia_112[8] + Gloia_112[9]; Gloia_128[6] = Gloia_112[1] + Gloia_112[10] + Gloia_112[11] + Gloia_116[7]; Gloia_128[2] = Gloia_116[4] + Gloia_116[8] + Gloia_116[11]; Gloia_128[1] = Gloia_116[5] + Gloia_116[14] + Gloia_116[13] + Gloia_112[12]; Gloia_128[3] = Gloia_112[2] + Gloia_116[9] + Gloia_112[14] + Gloia_112[15] + Gloia_112[16]; Gloia_128[4] = Gloia_116[3] + Gloia_116[6] + Gloia_116[10] + Gloia_116[12] + Gloia_116[15]; Gloia_128[0] = Gloia_116[16] + Gloia_112[17]; Loci_4 = 12; for (index_0 = 0; index_0 < 8; index_0++) { if (Gloia_124[index_0] > 0) { Locd_32 = Gloia_128[index_0]; Locd_32 /= Gloia_124[index_0]; PairBlock(Glosa_136[index_0], Locd_32, Loci_4); Loci_4 += 15; } } } }
int iLookup(double Argd_0) {for (int index_8 = 0; index_8 < 9; index_8++) if (Argd_0 < Gloia_132[index_8]) break; return (index_8); }
void PairDelete(string Args_0) {string name_8; for (int Loci_16 = 1; Loci_16 <= 30; Loci_16++) { name_8 = Args_0 + Loci_16; if (ObjectFind(name_8) < 0) break; ObjectDelete(name_8); } }
void PairBlock(string Args_0, double Argd_8, int Argi_16) {int Loci_20; string name_32; PairDelete(Args_0); if (Argd_8 >= 9.0) Loci_20 = 9; else { if (Argd_8 >= 8.0) Loci_20 = 8; else { if (Argd_8 >= 7.0) Loci_20 = 7; else { if (Argd_8 >= 6.0) Loci_20 = 6; else { if (Argd_8 >= 5.0) Loci_20 = 5; else { if (Argd_8 >= 4.0) Loci_20 = 4; else { if (Argd_8 >= 3.0) Loci_20 = 3; else { if (Argd_8 >= 2.0) Loci_20 = 2; else { if (Argd_8 >= 1.0) Loci_20 = 1; else Loci_20 = 0; } } } } } } } } int Loci_24 = 58; Argi_16 += 3; for (int index_40 = 0; index_40 < Loci_20; index_40++) { name_32 = Args_0 + ((3 * index_40 + 1)); SideLabel(name_32, Loci_24, Argi_16, 2); ObjectSetText(name_32, "|", 6, "Arial Black", Gloia_144[index_40]); name_32 = Args_0 + ((3 * index_40 + 2)); SideLabel(name_32, Loci_24 - 1, Argi_16, 2); ObjectSetText(name_32, "|", 6, "Arial Black", Gloia_144[index_40]); name_32 = Args_0 + ((3 * index_40 + 3)); SideLabel(name_32, Loci_24 - 2, Argi_16, 2); ObjectSetText(name_32, "|", 6, "Arial Black", Gloia_144[index_40]); Loci_24 -= 5; } name_32 = Args_0 + ((3 * Loci_20 + 1)); SideLabel(name_32, Loci_24, Argi_16, 2); ObjectSetText(name_32, "|", 6, "Arial Black", Gloia_144[Loci_20]); name_32 = Args_0 + ((3 * Loci_20 + 2)); SideLabel(name_32, Loci_24 - 1, Argi_16, 2); ObjectSetText(name_32, "|", 6, "Arial Black", Gloia_144[Loci_20]); Argd_8 -= Loci_20; if (Argd_8 >= 0.5) { name_32 = Args_0 + ((3 * Loci_20 + 3)); SideLabel(name_32, Loci_24 - 2, Argi_16, 2); ObjectSetText(name_32, "|", 6, "Arial Black", Gloia_144[Loci_20]); } }