新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 191 1...184185186187188189190191192193194195196197198...1953 新评论 Rustam Bikbulatov 2017.05.01 20:31 #1901 Vitaly Muzichenko:试着注释这一行,使一个函数发挥作用 有趣的是,如果你知道如何)。 Vitaly Muzichenko 2017.05.01 21:19 #1902 Rustam Bikbulatov: 有趣的是,如果你知道如何)。 你不需要知道什么,我在代码中显示了它 // Maxim Kuznetsov 2017.05.01 22:27 #1903 Rustam Bikbulatov:又见面了。你能告诉我如何改变一个已知程序员的代码吗?目前,这只猫头鹰每秒钟完成大约一笔交易。我想改变它,当它越过一定的利润时,不管是正的还是负的交易,都能立即关闭交易。是否有任何错误信息被写入日志?你能不能把ClosePosBySelect里面的延迟减少到更合理的数值。对于每一个订单,都有几次尝试关闭它,每次都是在失败的情况下得到睡眠。顺便说一下,从错误中恢复可以以更好的方式进行(自从创建这些函数的那一刻起,MT已经学会了生成一个与ERR_CONTEXT_BUSY不同的代码)。 Vitaly Muzichenko 2017.05.01 22:40 #1904 Rustam Bikbulatov: 如果你知道怎么做的话,这很有趣) 你可以用这个 代替这两个,对我来说效果很好,但很多时候取决于你的DC执行订单的速度。 Rustam Bikbulatov 2017.05.02 06:00 #1905 Maxim Kuznetsov:是否有任何错误信息被记录下来?你可以把ClosePosBySelect里面的延迟减少到更合理的数值。每个订单都有几次尝试关闭的机会,每次如果不成功,就会显示睡眠。顺便说一下,从错误中恢复可以以更好的方式进行(自从创建这些函数的那一刻起,MT已经学会了生成一个与ERR_CONTEXT_BUSY不同的代码)。 我试图完全删除 "睡眠",但它是不同的。 Rustam Bikbulatov 2017.05.02 06:05 #1906 Vitaly Muzichenko: 你可以用这个 代替这两个,对我来说效果很好,但很多时候取决于你的经纪公司执行订单的速度。 这是一只完整的猫头鹰还是什么东西的部分代码? ero1173 2017.05.03 04:19 #1907 我已经为这个问题工作了三天。我在我的专家顾问中使用了标准功能(我到处都看到了),使用wininet.dll从互联网上读取一个文件进行进一步分析。string ReadHTML(){if(!IsDllsAllowed()){Alert("你需要在设置中允许DLLs;)return(")。}int rv = InternetAttemptConnect(0);如果(RV != 0){Alert("调用InternetAttemptConnect()时出错")。return(")。}int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);如果(hInternetSession <= 0){Alert("Error calling InternetOpenW()")。return(")。}int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0);如果(hURL <= 0){Alert("Error calling InternetOpenUrlW();InternetCloseHandle(hInternetSession)。return("")。}int cBuffer[256];int dwBytesRead[1];string TXT = ""。while(!IsStopped()){bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead)。如果(dwBytesRead[0] == 0)突破。string text = ""。string text0= ""。for(int i = 0; i < 256; i++){text0= CharToStr((char)(cBuffer[i] & 0x000000FF))。if (text0!="\r") text = text + text0;否则dwBytesRead[0]--。if(StringLen(text) == dwBytesRead[0]) break;text0= CharToStr((char)(cBuffer[i]>>(8 & 0x000000FF))。if (text0!="\r") text = text + text0;否则dwBytesRead[0]--。if(StringLen(text) == dwBytesRead[0]) break;text0= CharToStr((char)(cBuffer[i]>>(16 & 0x000000FF))。if (text0!="\r") text = text + text0;否则dwBytesRead[0]--。if(StringLen(text) == dwBytesRead[0]) break;text0= CharToStr((char)(cBuffer[i]>>(24 & 0x000000FF))。if (text0!="\r") text = text + text0;否则dwBytesRead[0]--。if(StringLen(text) == dwBytesRead[0]) break;}TXT = TXT + 文本。睡眠(1)。}InternetCloseHandle(hURL)。InternetCloseHandle(hInternetSession)。return(TXT)。}一切正常,只读过一次网站,随后被更新,在随后调用这个函数时(周期为1分钟或更短,尽管网站更新更频繁),给出的是同一个网站,没有变化(就像第一次读取的那样)。重新启动Expert Advisor并没有帮助,因为文件是在启动终端后第一次读取的,所以看起来是这样。更新的唯一方法是用所需的网站手动打开IE浏览器(分别是更新的信息),该功能开始读取更新的信息,然后冻结该网站的配置,或者在重启终端MT4时(也可以在重启终端后首次读取,所以一直在输出)。我怀疑它与参数InternetOpenW或InternetOpenUrlW有关,我在默认情况下到处都是零,但我找不到任何明确的描述,而且它不知为何与其他EA一起工作(我从向终端转发网站新闻的专家顾问那里得到的)。是的,在终端设置 中,为所需的网站 "允许WebRequest for..."。 Any questions from newcomers 更新MQL4和旧代码(分享解决问题的经验) Updated MQL4 and old d1w4m3 2017.05.04 04:35 #1908 下午好。我的内存已经在发火了:EA出现了一个问题,在拿下TP或SL后,它又打开了一个订单!这让我很不舒服。我想不出在什么情况下EA会只绑定在指标信号后的第2个条形上。或如果TP或SL触发了,它将等待新的信号,但只有当指标信号改变时才会出现。空白的OnTick(){uptr =NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4);如果(DN_Trend()==true){如果(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr){ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);如果 (ticket > 0){SL = NormalizeDouble(Bid + StopLoss*Point, Digits)。TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)。如果(OrderSelect(ticket, SELECT_BY_TICKET))if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))Print("Sales error");}} Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader 错误、漏洞、问题 Artyom Trishkin 2017.05.04 07:18 #1909 d1w4m3:下午好。我的内存已经在发火了:EA出现了一个问题,在拿下TP或SL后,它又打开了一个订单!这让我很不舒服。我想不出在什么情况下EA会只绑定在指标信号后的第2个条形上。或者,如果TP或SL触发了,专家顾问会等待新的信号,但只有在指标信号改变时才会出现。 如果最后关闭的头寸 与信号的类型相同,并且该头寸是在其中一个止损单上关闭的,那么就不要开仓。 d1w4m3 2017.05.04 07:50 #1910 Artyom Trishkin: 如果最后关闭的头寸 与信号进来时的类型相同,并且如果这个头寸是在其中一个止损单上关闭的,那么就不要开仓。 谢谢你的回答,但我才刚开始学了几个星期,如何在代码中实现这个问题,或者请告诉我在哪里可以读到。还是根据伊戈尔-金的说法?而它却会开出一个位置,不按照系统的要求,在刚开始工作的时候,你的条件并不能避免这个问题。 1...184185186187188189190191192193194195196197198...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
试着注释这一行,使一个函数发挥作用
有趣的是,如果你知道如何)。
有趣的是,如果你知道如何)。
又见面了。你能告诉我如何改变一个已知程序员的代码吗?目前,这只猫头鹰每秒钟完成大约一笔交易。我想改变它,当它越过一定的利润时,不管是正的还是负的交易,都能立即关闭交易。
是否有任何错误信息被写入日志?
你能不能把ClosePosBySelect里面的延迟减少到更合理的数值。对于每一个订单,都有几次尝试关闭它,每次都是在失败的情况下得到睡眠。
顺便说一下,从错误中恢复可以以更好的方式进行(自从创建这些函数的那一刻起,MT已经学会了生成一个与ERR_CONTEXT_BUSY不同的代码)。
如果你知道怎么做的话,这很有趣)
是否有任何错误信息被记录下来?
你可以把ClosePosBySelect里面的延迟减少到更合理的数值。每个订单都有几次尝试关闭的机会,每次如果不成功,就会显示睡眠。
顺便说一下,从错误中恢复可以以更好的方式进行(自从创建这些函数的那一刻起,MT已经学会了生成一个与ERR_CONTEXT_BUSY不同的代码)。
你可以用这个 代替这两个,对我来说效果很好,但很多时候取决于你的经纪公司执行订单的速度。
这是一只完整的猫头鹰还是什么东西的部分代码?
我已经为这个问题工作了三天。我在我的专家顾问中使用了标准功能(我到处都看到了),使用wininet.dll从互联网上读取一个文件进行进一步分析。
string ReadHTML()
{
if(!IsDllsAllowed())
{
Alert("你需要在设置中允许DLLs;)
return(")。
}
int rv = InternetAttemptConnect(0);
如果(RV != 0)
{
Alert("调用InternetAttemptConnect()时出错")。
return(")。
}
int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
如果(hInternetSession <= 0)
{
Alert("Error calling InternetOpenW()")。
return(")。
}
int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0);
如果(hURL <= 0)
{
Alert("Error calling InternetOpenUrlW();
InternetCloseHandle(hInternetSession)。
return("")。
}
int cBuffer[256];
int dwBytesRead[1];
string TXT = ""。
while(!IsStopped())
{
bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead)。
如果(dwBytesRead[0] == 0)
突破。
string text = ""。
string text0= ""。
for(int i = 0; i < 256; i++)
{
text0= CharToStr((char)(cBuffer[i] & 0x000000FF))。
if (text0!="\r") text = text + text0;
否则dwBytesRead[0]--。
if(StringLen(text) == dwBytesRead[0]) break;
text0= CharToStr((char)(cBuffer[i]>>(8 & 0x000000FF))。
if (text0!="\r") text = text + text0;
否则dwBytesRead[0]--。
if(StringLen(text) == dwBytesRead[0]) break;
text0= CharToStr((char)(cBuffer[i]>>(16 & 0x000000FF))。
if (text0!="\r") text = text + text0;
否则dwBytesRead[0]--。
if(StringLen(text) == dwBytesRead[0]) break;
text0= CharToStr((char)(cBuffer[i]>>(24 & 0x000000FF))。
if (text0!="\r") text = text + text0;
否则dwBytesRead[0]--。
if(StringLen(text) == dwBytesRead[0]) break;
}
TXT = TXT + 文本。
睡眠(1)。
}
InternetCloseHandle(hURL)。
InternetCloseHandle(hInternetSession)。
return(TXT)。
}
一切正常,只读过一次网站,随后被更新,在随后调用这个函数时(周期为1分钟或更短,尽管网站更新更频繁),给出的是同一个网站,没有变化(就像第一次读取的那样)。重新启动Expert Advisor并没有帮助,因为文件是在启动终端后第一次读取的,所以看起来是这样。更新的唯一方法是用所需的网站手动打开IE浏览器(分别是更新的信息),该功能开始读取更新的信息,然后冻结该网站的配置,或者在重启终端MT4时(也可以在重启终端后首次读取,所以一直在输出)。我怀疑它与参数InternetOpenW或InternetOpenUrlW有关,我在默认情况下到处都是零,但我找不到任何明确的描述,而且它不知为何与其他EA一起工作(我从向终端转发网站新闻的专家顾问那里得到的)。是的,在终端设置 中,为所需的网站 "允许WebRequest for..."。
下午好。
我的内存已经在发火了:EA出现了一个问题,在拿下TP或SL后,它又打开了一个订单!这让我很不舒服。
我想不出在什么情况下EA会只绑定在指标信号后的第2个条形上。
或如果TP或SL触发了,它将等待新的信号,但只有当指标信号改变时才会出现。
空白的OnTick()
{
uptr =NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。
dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4);
如果(DN_Trend()==true)
{
如果(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
如果 (ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits)。
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)。
如果(OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Sales error");
}
}
下午好。
我的内存已经在发火了:EA出现了一个问题,在拿下TP或SL后,它又打开了一个订单!这让我很不舒服。
我想不出在什么情况下EA会只绑定在指标信号后的第2个条形上。
或者,如果TP或SL触发了,专家顾问会等待新的信号,但只有在指标信号改变时才会出现。
如果最后关闭的头寸 与信号进来时的类型相同,并且如果这个头寸是在其中一个止损单上关闭的,那么就不要开仓。
谢谢你的回答,但我才刚开始学了几个星期,如何在代码中实现这个问题,或者请告诉我在哪里可以读到。还是根据伊戈尔-金的说法?
而它却会开出一个位置,不按照系统的要求,在刚开始工作的时候,你的条件并不能避免这个问题。