帮我修改一个EA,使它能在实盘使用 新评论 johnsun888 2011.09.29 05:45 这个EA是读取 .hst 文件的数据,不能使用实盘数据。我想请那位好心的朋友帮我修改成在实盘使用的。谢谢! #property copyright "Copyright ?2009,Sedofx" #property link "http://www.sedofx.com/" extern int Pips = 15; extern double Lots = 0.1; int g_file_88; bool gi_92=true; bool gi_96 = FALSE; int gi_100 = 999999; int gi_104 = 0; int gi_108; int gi_112 = 0; int gi_116 = 0; double gd_120; int GetTime(int ai_0) { FileSeek(g_file_88, ai_0 + 148, SEEK_SET); int li_4 = FileReadInteger(g_file_88); return (li_4); } int FindTimePlace(int ai_0) { int li_4; int li_8; int li_12 = 0; int li_16 = FileSize(g_file_88) - 148 - 44; int li_20 = GetTime(li_12); int li_24 = GetTime(li_16); while (li_20 < ai_0 && ai_0 < li_24) { li_8 = (li_12 + li_16) / 2; li_8 -= li_8 % 44; if (li_8 == li_12) break; li_4 = GetTime(li_8); if (ai_0 >= li_4) { li_12 = li_8; li_20 = GetTime(li_12); } else { li_16 = li_8; li_24 = GetTime(li_16); } } if (ai_0 <= li_24) { FileSeek(g_file_88, li_12 + 148, SEEK_SET); return (1); } return (0); } void init() { g_file_88 = FileOpenHistory(Symbol() + Period() + ".hst", FILE_BIN|FILE_READ); if (g_file_88 > 0) gi_92 = TRUE; else { gi_92 = FALSE; return; } gi_92 = FindTimePlace(Time[0]); if (!gi_92) FileClose(g_file_88); } void deinit() { if (gi_92) FileClose(g_file_88); } int GetPrices(int &ai_0, int &ai_4, int &ai_8) { ai_0 = FileReadInteger(g_file_88); FileSeek(g_file_88, 8, SEEK_CUR); ai_4 = FileReadDouble(g_file_88) / Point + 0.1; ai_8 = FileReadDouble(g_file_88) / Point + 0.1; FileSeek(g_file_88, 16, SEEK_CUR); if (FileTell(g_file_88) + 44 <= FileSize(g_file_88)) return (1); return (0); } int GetTimeTrade(double &ad_0) { int li_8; int li_12; int li_16; while (true) { if (!GetPrices(li_8, li_12, li_16)) return (-1); if (gi_96) { if (li_16 > gi_104) { gi_104 = li_16; gi_108 = li_8; continue; } if (gi_104 - li_12 < Pips) continue; gi_96 = FALSE; gi_100 = li_12; ad_0 = gi_104 * Point; break; } if (li_12 < gi_100) { gi_100 = li_12; gi_108 = li_8; continue; } if (li_16 - gi_100 < Pips) continue; gi_96 = TRUE; gi_104 = li_16; ad_0 = gi_100 * Point; break; } int li_ret_20 = gi_108; gi_108 = li_8; return (li_ret_20); } void CloseOrder(int a_ticket_0) { OrderSelect(a_ticket_0, SELECT_BY_TICKET); if (OrderType() == OP_BUY) { OrderClose(a_ticket_0, OrderLots(), Bid, 0); return; } OrderClose(a_ticket_0, OrderLots(), Ask, 0); } int ReverseOrder(int a_ticket_0) { if (a_ticket_0 == 0) a_ticket_0 = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0); else { OrderSelect(a_ticket_0, SELECT_BY_TICKET); if (OrderType() == OP_BUY) { OrderClose(a_ticket_0, OrderLots(), Bid, 0); a_ticket_0 = OrderSend(Symbol(), OP_SELL, Lots, Bid, 0, 0, 0); } else { OrderClose(a_ticket_0, OrderLots(), Ask, 0); a_ticket_0 = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0); } } return (a_ticket_0); } void System() { if (gi_116 == 0) gi_116 = GetTimeTrade(gd_120); else if (gi_116 < 0) return; if (Time[0] == gi_116) { if (NormalizeDouble(Bid - gd_120, Digits) == 0.0) { gi_116 = GetTimeTrade(gd_120); if (gi_116 < 0) { CloseOrder(gi_112); return; } gi_112 = ReverseOrder(gi_112); } } } void start() { if (gi_92) { System(); return; } } 这个EA无法工作,请帮忙 我的挂单EA,测试没结果,请教高手修正 EA不会在多对上运行,需要帮助 168856243 2011.10.02 03:30 #1 这种根本算不上ea,纯粹的骗子代码。 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个EA是读取 .hst 文件的数据,不能使用实盘数据。我想请那位好心的朋友帮我修改成在实盘使用的。谢谢!
#property copyright "Copyright ?2009,Sedofx"
#property link "http://www.sedofx.com/"
extern int Pips = 15;
extern double Lots = 0.1;
int g_file_88;
bool gi_92=true;
bool gi_96 = FALSE;
int gi_100 = 999999;
int gi_104 = 0;
int gi_108;
int gi_112 = 0;
int gi_116 = 0;
double gd_120;
int GetTime(int ai_0) {
FileSeek(g_file_88, ai_0 + 148, SEEK_SET);
int li_4 = FileReadInteger(g_file_88);
return (li_4);
}
int FindTimePlace(int ai_0) {
int li_4;
int li_8;
int li_12 = 0;
int li_16 = FileSize(g_file_88) - 148 - 44;
int li_20 = GetTime(li_12);
int li_24 = GetTime(li_16);
while (li_20 < ai_0 && ai_0 < li_24) {
li_8 = (li_12 + li_16) / 2;
li_8 -= li_8 % 44;
if (li_8 == li_12) break;
li_4 = GetTime(li_8);
if (ai_0 >= li_4) {
li_12 = li_8;
li_20 = GetTime(li_12);
} else {
li_16 = li_8;
li_24 = GetTime(li_16);
}
}
if (ai_0 <= li_24) {
FileSeek(g_file_88, li_12 + 148, SEEK_SET);
return (1);
}
return (0);
}
void init() {
g_file_88 = FileOpenHistory(Symbol() + Period() + ".hst", FILE_BIN|FILE_READ);
if (g_file_88 > 0) gi_92 = TRUE;
else {
gi_92 = FALSE;
return;
}
gi_92 = FindTimePlace(Time[0]);
if (!gi_92) FileClose(g_file_88);
}
void deinit() {
if (gi_92) FileClose(g_file_88);
}
int GetPrices(int &ai_0, int &ai_4, int &ai_8) {
ai_0 = FileReadInteger(g_file_88);
FileSeek(g_file_88, 8, SEEK_CUR);
ai_4 = FileReadDouble(g_file_88) / Point + 0.1;
ai_8 = FileReadDouble(g_file_88) / Point + 0.1;
FileSeek(g_file_88, 16, SEEK_CUR);
if (FileTell(g_file_88) + 44 <= FileSize(g_file_88)) return (1);
return (0);
}
int GetTimeTrade(double &ad_0) {
int li_8;
int li_12;
int li_16;
while (true) {
if (!GetPrices(li_8, li_12, li_16)) return (-1);
if (gi_96) {
if (li_16 > gi_104) {
gi_104 = li_16;
gi_108 = li_8;
continue;
}
if (gi_104 - li_12 < Pips) continue;
gi_96 = FALSE;
gi_100 = li_12;
ad_0 = gi_104 * Point;
break;
}
if (li_12 < gi_100) {
gi_100 = li_12;
gi_108 = li_8;
continue;
}
if (li_16 - gi_100 < Pips) continue;
gi_96 = TRUE;
gi_104 = li_16;
ad_0 = gi_100 * Point;
break;
}
int li_ret_20 = gi_108;
gi_108 = li_8;
return (li_ret_20);
}
void CloseOrder(int a_ticket_0) {
OrderSelect(a_ticket_0, SELECT_BY_TICKET);
if (OrderType() == OP_BUY) {
OrderClose(a_ticket_0, OrderLots(), Bid, 0);
return;
}
OrderClose(a_ticket_0, OrderLots(), Ask, 0);
}
int ReverseOrder(int a_ticket_0) {
if (a_ticket_0 == 0) a_ticket_0 = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0);
else {
OrderSelect(a_ticket_0, SELECT_BY_TICKET);
if (OrderType() == OP_BUY) {
OrderClose(a_ticket_0, OrderLots(), Bid, 0);
a_ticket_0 = OrderSend(Symbol(), OP_SELL, Lots, Bid, 0, 0, 0);
} else {
OrderClose(a_ticket_0, OrderLots(), Ask, 0);
a_ticket_0 = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0);
}
}
return (a_ticket_0);
}
void System() {
if (gi_116 == 0) gi_116 = GetTimeTrade(gd_120);
else
if (gi_116 < 0) return;
if (Time[0] == gi_116) {
if (NormalizeDouble(Bid - gd_120, Digits) == 0.0) {
gi_116 = GetTimeTrade(gd_120);
if (gi_116 < 0) {
CloseOrder(gi_112);
return;
}
gi_112 = ReverseOrder(gi_112);
}
}
}
void start() {
if (gi_92) {
System();
return;
}
}