我如何正确地开立市场订单? - 页 7 123456789 新评论 [删除] 2017.02.04 12:09 #61 prostotrader:顺便说一下,你从一个指标中调用Sleep() 很奇怪,因为这是禁止的。Sleep()函数不能从自定义指标中调用,因为指标是在界面线程中执行的,不能拖累它。该功能有内置的检查专家的停止标志的状态,每0.1秒。 prostotrader 2017.02.04 12:10 #62 Alexey Kozitsyn:顺便说一下,你从指标中调用Sleep() 是很奇怪的,因为它是被禁止的。 我根本不知道Sleep()是什么意思 Gennady Mazur 2017.02.04 12:12 #63 prostotrader:阿列克谢!相当于一个流动的仪器 :)2016.12.14 22:01:41.431 Trades 'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms这不是关于工具(流动性),而是关于延迟,这可能发生在任何工具上。我一直积极使用EA进行交易,至今已有近4年。我的任何EA都没有任何停顿(除了在INDICATORS中暂停等待从服务器下载数据)。如果你确实暂停了,那肯定是你的EA的算法没有正常工作 :( 我已经做了很长时间的交易了,我只使用EA。但主要是在MT4上。我一直在MT5上只用专家顾问使用Limits进行交易,没有任何问题。我也反对在EA中增加停顿,特别是如果是黄牛党或者pipsitter,很容易错过入场机会。 [删除] 2017.02.04 12:12 #64 prostotrader: 我根本不知道Sleep()是什么意思 那么你和我现在讨论停顿就很奇怪了......。 prostotrader 2017.02.04 12:18 #65 Alexey Kozitsyn: 那么你和我现在讨论停顿就很奇怪了......。 不是指Sleep() 的作用,而是指它在我代码中的应用。 [删除] 2017.02.04 12:22 #66 prostotrader: 不是指Sleep()的作用,而是指在我的代码中使用它的意义。 你如何在你的指标中实施停顿? prostotrader 2017.02.04 12:27 #67 Alexey Kozitsyn: 你如何在你的指标中实施停顿?//+------------------------------------------------------------------+// Custom indicator Check timer function |//+------------------------------------------------------------------+bool CheckTimer(const uint start_value, const uint per_value){ uint end_value = GetTickCount(); if(end_value < start_value) { if((start_value - end_value) >= per_value) return(true); } else { if((end_value - start_value) >= per_value) return(true); } return(false);}//+------------------------------------------------------------------+//| Custom indicator Get server data function |//+------------------------------------------------------------------+int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period){ int fail_cnt = 0;//--- while((fail_cnt < 5) && !IsStopped()) { long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));//--- if(first_date > 0) { if(SymbolIsSynchronized(a_symbol)) { // Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." ); return(GetLocalData(a_symbol, period)); } } else { uint start_tick = GetTickCount();//--- while(!CheckTimer(start_tick, 10)) { fail_cnt--; fail_cnt++; } } fail_cnt++; } // Print( "LoadServerData: Первой даты на сервере нет!" ); return(0); }这是一个老例子。由于GetTickCount错误相当高(高达16ms),现在我使用GetMicrosecondCount()。 How do I open 错误、漏洞、问题 Errors, bugs, questions Dmitry Fedoseev 2017.02.04 13:12 #68 Gennady Mazur: 原则上我是这样做的,但在Forts中,订单往往被成功接受......但在下一个tick上,还没有位置...... 这就是额外的开口可能滑落的地方....,这样部分地解决了问题,如果订单被接受,我就增加Int变量,增加之后,开口的条件略有不同,所以没有新的开口,但是....,如果订单不被接受,变量不会增加,但是这里有一个技巧...我误判了状态,额外的订单开始出现。 你已经回答了你自己的问题。我们需要遵守秩序。 Dmitry Fedoseev 2017.02.04 13:14 #69 prostotrader:阿列克谢!相当于一个流动的仪器 :)2016.12.14 22:01:41.431 Trades 'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms这不是关于工具(流动性),而是关于延迟,这可能发生在任何工具上。我一直积极使用EA进行交易,至今已有近4年。我的任何EA都没有任何停顿(除了在INDICATORS中暂停等待从服务器下载数据)。如果你确实暂停了,那肯定是你的EA的算法没有正常工作 :( 如果你没有,那又如何?也许那里的算法是这样的,不需要它。 Dmitry Fedoseev 2017.02.04 13:16 #70 Gennady Mazur: 我也已经做了很长时间的交易,而且只是在EA的帮助下。但主要是在MT4上。我一直在MT5上只用专家顾问使用Limits进行交易,没有任何问题。如果我是一个剥头皮的人或一个点头的人,我不喜欢专家顾问的停顿,而且我只是错过了一个入口。 当你需要暂停的时候,情况就不是这样了。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
顺便说一下,你从一个指标中调用Sleep() 很奇怪,因为这是禁止的。
Sleep()函数不能从自定义指标中调用,因为指标是在界面线程中执行的,不能拖累它。该功能有内置的检查专家的停止标志的状态,每0.1秒。
顺便说一下,你从指标中调用Sleep() 是很奇怪的,因为它是被禁止的。
阿列克谢!
相当于一个流动的仪器 :)
这不是关于工具(流动性),而是关于延迟,这可能发生在任何工具上。
我一直积极使用EA进行交易,至今已有近4年。
我的任何EA都没有任何停顿(除了在INDICATORS中暂停等待从服务器下载数据)。
如果你确实暂停了,那肯定是你的EA的算法没有正常工作 :(
我根本不知道Sleep()是什么意思
那么你和我现在讨论停顿就很奇怪了......。
不是指Sleep()的作用,而是指在我的代码中使用它的意义。
你如何在你的指标中实施停顿?
// Custom indicator Check timer function |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
uint end_value = GetTickCount();
if(end_value < start_value)
{
if((start_value - end_value) >= per_value) return(true);
}
else
{
if((end_value - start_value) >= per_value) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
int fail_cnt = 0;
//---
while((fail_cnt < 5) && !IsStopped())
{
long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
if(first_date > 0)
{
if(SymbolIsSynchronized(a_symbol))
{
// Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
return(GetLocalData(a_symbol, period));
}
}
else
{
uint start_tick = GetTickCount();
//---
while(!CheckTimer(start_tick, 10))
{
fail_cnt--;
fail_cnt++;
}
}
fail_cnt++;
}
// Print( "LoadServerData: Первой даты на сервере нет!" );
return(0);
}
这是一个老例子。
由于GetTickCount错误相当高(高达16ms),现在我使用GetMicrosecondCount()。
原则上我是这样做的,但在Forts中,订单往往被成功接受......但在下一个tick上,还没有位置......
这就是额外的开口可能滑落的地方....,这样部分地解决了问题,如果订单被接受,我就增加Int变量,增加之后,开口的条件略有不同,所以没有新的开口,但是....,如果订单不被接受,变量不会增加,但是这里有一个技巧...我误判了状态,额外的订单开始出现。
阿列克谢!
相当于一个流动的仪器 :)
这不是关于工具(流动性),而是关于延迟,这可能发生在任何工具上。
我一直积极使用EA进行交易,至今已有近4年。
我的任何EA都没有任何停顿(除了在INDICATORS中暂停等待从服务器下载数据)。
如果你确实暂停了,那肯定是你的EA的算法没有正常工作 :(
我也已经做了很长时间的交易,而且只是在EA的帮助下。但主要是在MT4上。我一直在MT5上只用专家顾问使用Limits进行交易,没有任何问题。如果我是一个剥头皮的人或一个点头的人,我不喜欢专家顾问的停顿,而且我只是错过了一个入口。