标签:
杂谈 |
查看原文:http://www.125808047.com/?p=1894
相对强弱指数指标的另类扩展(可以画线),MQL4源码如下:
//+------------------------------------------------------------------+
//| 新相对强弱指标.mq4 |
//| Copyright 2014, QQ:125808047 |
//+------------------------------------------------------------------+
#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 gi_108;
int gia_112[18];
int gia_116[18];
int gia_120[18];
int gia_124[8];
int gia_128[8];
int gia_132[9] = {4, 10, 25, 40, 50, 60, 75, 90, 97};
string gsa_136[8] = {"NZD", "CAD", "CHF", "AUD", "JPY", "USD", "GBP", "EUR"};
string gsa_140[18] = {"EURUSD", "GBPUSD", "AUDUSD", "USDJPY", "USDCHF", "USDCAD", "EURJPY",
"EURGBP", "EURCHF", "EURAUD", "GBPJPY", "GBPCHF", "CADJPY", "EURCAD", "AUDCAD", "AUDJPY", "AUDNZD", "NZDUSD"};
int gia_144[10] = {10495, 20735, 30975, 41215, 48895, 46280, 51350, 56420, 61490, 65280};
int init() {
gi_108 = TRUE;
return (0);
}
int deinit() {
//ObjectsDeleteAll();
return (0);
}
int start() {
CalcPannel();
PriceMeter();
if (gi_108) gi_108 = FALSE;
return (0);
}
void SideLabel(string a_name_0, int a_x_8, int a_y_12, int a_corner_16 = 0) {
if (ObjectFind(a_name_0) != 0) {
ObjectCreate(a_name_0, OBJ_LABEL, 0, 0, 0);
if (Pannel_On_Right) a_corner_16++;
ObjectSet(a_name_0, OBJPROP_CORNER, a_corner_16);
ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_8);
ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_12);
}
}
double DayRange(bool ai_0 = TRUE) {
double ld_4 = iHigh(NULL, PERIOD_D1, 1) - iLow(NULL, PERIOD_D1, 1);
double ld_12 = ld_4 + iHigh(NULL, PERIOD_D1, 2) - iLow(NULL, PERIOD_D1, 2);
ld_12 += iHigh(NULL, PERIOD_D1, 3) - iLow(NULL, PERIOD_D1, 3);
ld_12 += iHigh(NULL, PERIOD_D1, 4) - iLow(NULL, PERIOD_D1, 4);
ld_12 += iHigh(NULL, PERIOD_D1, 5) - iLow(NULL, PERIOD_D1, 5);
double ld_20 = ld_12 + iHigh(NULL, PERIOD_D1, 6) - iLow(NULL, PERIOD_D1, 6);
ld_20 += iHigh(NULL, PERIOD_D1, 7) - iLow(NULL, PERIOD_D1, 7);
ld_20 += iHigh(NULL, PERIOD_D1, 8) - iLow(NULL, PERIOD_D1, 8);
ld_20 += iHigh(NULL, PERIOD_D1, 9) - iLow(NULL, PERIOD_D1, 9);
ld_20 += iHigh(NULL, PERIOD_D1, 10) - iLow(NULL, PERIOD_D1, 10);
double ld_28 = ld_20 + iHigh(NULL, PERIOD_D1, 11) - iLow(NULL, PERIOD_D1, 11);
ld_28 += iHigh(NULL, PERIOD_D1, 12) - iLow(NULL, PERIOD_D1, 12);
ld_28 += iHigh(NULL, PERIOD_D1, 13) - iLow(NULL, PERIOD_D1, 13);
ld_28 += iHigh(NULL, PERIOD_D1, 14) - iLow(NULL, PERIOD_D1, 14);
ld_28 += iHigh(NULL, PERIOD_D1, 15) - iLow(NULL, PERIOD_D1, 15);
ld_28 += iHigh(NULL, PERIOD_D1, 16) - iLow(NULL, PERIOD_D1, 16);
ld_28 += iHigh(NULL, PERIOD_D1, 17) - iLow(NULL, PERIOD_D1, 17);
ld_28 += iHigh(NULL, PERIOD_D1, 18) - iLow(NULL, PERIOD_D1, 18);
ld_28 += iHigh(NULL, PERIOD_D1, 19) - iLow(NULL, PERIOD_D1, 19);
ld_28 += iHigh(NULL, PERIOD_D1, 20) - iLow(NULL, PERIOD_D1, 20);
ld_12 = 0.2 * ld_12;
ld_20 /= 10.0;
ld_28 = 0.05 * ld_28;
if (ai_0) return ((ld_4 + ld_12 + ld_20 + ld_28) / 4.0 / Point);
return ((ld_4 + ld_12 + ld_20 + ld_28) / 8.0);
}
void CalcPannel() {
int li_0;
int li_4;
string ls_8;
if (CalcPannel_Enabled != FALSE) {
if (gi_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) {
li_0 = Time[0] + 60 * Period() - TimeCurrent();
li_4 = li_0 % 60;
li_0 = (li_0 - li_4) / 60;
if (li_0 >= 0) {
ls_8 = li_4;
if (StringLen(ls_8) == 1) ls_8 = "0" + ls_8;
ObjectSetText("valCTime", li_0 + ":" + ls_8, 14, "Verdana", CandleTime_Color);
}
}
}
}
void PriceMeter() {
int li_4;
double l_point_8;
double ld_16;
double ld_24;
double ld_32;
double l_low_40;
string l_symbol_48;
if (PriceMeter_Enabled != FALSE) {
if (gi_108) {
for (int l_index_0 = 0; l_index_0 < 18; l_index_0++) {
l_symbol_48 = gsa_140[l_index_0];
l_point_8 = MarketInfo(l_symbol_48, MODE_POINT);
if (l_point_8 == 0.0) {
gia_112[l_index_0] = 0;
gia_116[l_index_0] = 0;
gia_120[l_index_0] = 0;
} else gia_120[l_index_0] = 1;
}
gia_124[7] = gia_120[0] + gia_120[6] + gia_120[7] + gia_120[8] + gia_120[9];
gia_124[6] = gia_120[1] + gia_120[10] + gia_120[11] + gia_120[7];
gia_124[5] = gia_120[3] + gia_120[4] + gia_120[5] + gia_120[0] + gia_120[1] + gia_120[2] + gia_120[17];
gia_124[4] = gia_120[3] + gia_120[6] + gia_120[10] + gia_120[12] + gia_120[15];
gia_124[3] = gia_120[2] + gia_120[9] + gia_120[14] + gia_120[15] + gia_120[16];
gia_124[2] = gia_120[4] + gia_120[8] + gia_120[11];
gia_124[1] = gia_120[5] + gia_120[14] + gia_120[13] + gia_120[12];
gia_124[0] = gia_120[16] + gia_120[17];
li_4 = 12;
for (l_index_0 = 0; l_index_0 < 8; l_index_0++) { if (gia_124[l_index_0] > 0) {
l_symbol_48 = "lab" + gsa_136[l_index_0];
SideLabel(l_symbol_48, 73, li_4, 2);
ObjectSetText(l_symbol_48, gsa_136[l_index_0], 9, "Arial", Label_Color);
li_4 += 15;
}
}
}
for (l_index_0 = 0; l_index_0 < 18; l_index_0++) {
if (gia_120[l_index_0] != 0) {
l_symbol_48 = gsa_140[l_index_0];
l_point_8 = MarketInfo(l_symbol_48, MODE_POINT);
ld_32 = MarketInfo(l_symbol_48, MODE_HIGH);
l_low_40 = MarketInfo(l_symbol_48, MODE_LOW);
ld_16 = MathMax((ld_32 - l_low_40) / l_point_8, 1);
ld_32 = MarketInfo(l_symbol_48, MODE_BID);
ld_24 = (ld_32 - l_low_40) / ld_16 / l_point_8;
gia_112[l_index_0] = iLookup(100.0 * ld_24);
gia_116[l_index_0] = 9 - gia_112[l_index_0];
}
}
gia_128[5] = gia_112[3] + gia_112[4] + gia_112[5] + gia_116[0] + gia_116[1] + gia_116[2] + gia_116[17];
gia_128[7] = gia_112[0] + gia_112[6] + gia_112[7] + gia_112[8] + gia_112[9];
gia_128[6] = gia_112[1] + gia_112[10] + gia_112[11] + gia_116[7];
gia_128[2] = gia_116[4] + gia_116[8] + gia_116[11];
gia_128[1] = gia_116[5] + gia_116[14] + gia_116[13] + gia_112[12];
gia_128[3] = gia_112[2] + gia_116[9] + gia_112[14] + gia_112[15] + gia_112[16];
gia_128[4] = gia_116[3] + gia_116[6] + gia_116[10] + gia_116[12] + gia_116[15];
gia_128[0] = gia_116[16] + gia_112[17];
li_4 = 12;
for (l_index_0 = 0; l_index_0 < 8; l_index_0++) { if (gia_124[l_index_0] > 0) {
ld_32 = gia_128[l_index_0];
ld_32 /= gia_124[l_index_0];
PairBlock(gsa_136[l_index_0], ld_32, li_4);
li_4 += 15;
}
}
}
}
int iLookup(double ad_0) {
for (int l_index_8 = 0; l_index_8 < 9; l_index_8++)
if (ad_0 < gia_132[l_index_8]) break;
return (l_index_8);
}
void PairDelete(string as_0) {
string l_name_8;
for (int li_16 = 1; li_16 <= 30; li_16++) {
l_name_8 = as_0 + li_16;
if (ObjectFind(l_name_8) < 0) break; ObjectDelete(l_name_8); } } void PairBlock(string as_0, double ad_8,
int ai_16) { int li_20; string l_name_32; PairDelete(as_0); if (ad_8 >= 9.0) li_20 = 9;
else {
if (ad_8 >= 8.0) li_20 = 8;
else {
if (ad_8 >= 7.0) li_20 = 7;
else {
if (ad_8 >= 6.0) li_20 = 6;
else {
if (ad_8 >= 5.0) li_20 = 5;
else {
if (ad_8 >= 4.0) li_20 = 4;
else {
if (ad_8 >= 3.0) li_20 = 3;
else {
if (ad_8 >= 2.0) li_20 = 2;
else {
if (ad_8 >= 1.0) li_20 = 1;
else li_20 = 0;
}
}
}
}
}
}
}
}
int li_24 = 58;
ai_16 += 3;
for (int l_index_40 = 0; l_index_40 < li_20; l_index_40++) { l_name_32 = as_0 + ((3 * l_index_40 + 1));
SideLabel(l_name_32, li_24, ai_16, 2); ObjectSetText(l_name_32, "|", 6, "Arial Black", gia_144[l_index_40]);
l_name_32 = as_0 + ((3 * l_index_40 + 2)); SideLabel(l_name_32, li_24 - 1, ai_16, 2); ObjectSetText(l_name_32,
"|", 6, "Arial Black", gia_144[l_index_40]); l_name_32 = as_0 + ((3 * l_index_40 + 3)); SideLabel(l_name_32,
li_24 - 2, ai_16, 2); ObjectSetText(l_name_32, "|", 6, "Arial Black",
gia_144[l_index_40]); li_24 -= 5; } l_name_32 = as_0 + ((3 * li_20 + 1)); SideLabel(l_name_32,
li_24, ai_16, 2); ObjectSetText(l_name_32, "|", 6, "Arial Black", gia_144[li_20]);
l_name_32 = as_0 + ((3 * li_20 + 2)); SideLabel(l_name_32, li_24 - 1, ai_16, 2);
ObjectSetText(l_name_32, "|", 6, "Arial Black", gia_144[li_20]); ad_8 -= li_20; if (ad_8 >= 0.5) {
l_name_32 = as_0 + ((3 * li_20 + 3));
SideLabel(l_name_32, li_24 - 2, ai_16, 2);
ObjectSetText(l_name_32, "|", 6, "Arial Black", gia_144[li_20]);
}
}
前一篇:MT4自定义指标彩色CCI
后一篇:双线MACD指标的一种优化

加载中…