Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
OrderSelect()是在终端内执行的,没有向服务器发出请求。因此,在每一次打勾时访问订单列表并没有什么问题。大多数专家顾问都会这样做。
而你关于阵列的问题与程序的架构有关。如果是操作大量订单的复杂EA,这绝对是必要的。如果专家顾问用简单的逻辑操作单一的订单,那么阵列就是一种冗余。
只值得一提的是,即使我们有一个订单数组,我们仍然要考虑OrderSelect()。毕竟,我们必须在每次打钩时检查订单是否仍然存在。另外,它的参数也可能被改变。
伙计们,告诉我如何处理,从哪里开始?
例如:我有15个0.01手的订单,我需要在某个时候关闭一些0.07手的交易。
我的问题是,我怎么能在一个OrderClose(...)中关闭7个订单或0.07个订单?
如果我一次投入0.07,它不会看到成交量为0.01的交易。
我是编程新手。
我收到了一个关于如何以countS 的形式制作计数器的提示。
它应该每分钟完成三笔0.01手的交易。现在,我们有一个问题,如何转换它,使所有的订单都按顺序计算。
如果我们设置for(int i=OrdersTotal()-1; i>=0; i--){最后的订单将被依次计算。
如果for(int p=0; p<OrdersTotal(); p++){ 则从第一个订单到一个订单。
计数器工作,但当手数为0.15时,它没有关闭0.03手,而是每分钟关闭0.01手。
您建议添加什么?
我如何使其能够关闭总手数的一部分,而不考虑订单的数量和手数?一个关于如何制作countS 计数器的提示。
每分钟应该有三笔0.01手的交易成交。现在我有一个问题,如何转换它,使所有的订单都按顺序计算。
如果我们设置for(int i=OrdersTotal()-1; i>=0; i--){最后的订单将被依次计算。
如果for(int p=0; p<OrdersTotal(); p++){ 则从第一个订单到一个订单。
计数器可以工作,但是当手数为0.15时,例如,它不关闭0.03手,每分钟关闭0.01手。
您建议添加什么?
我如何使其能够关闭总手数的一部分,而不考虑订单的数量和手数?当设置这个问题时(顺便说一下,非常奇怪),你需要与 "账户历史 "的列表一起工作。在每个新的迭代中,我们应该通过这个列表,找到在当前分钟内被关闭的订单,并将其数量加总。如果数量不够,那就根据需要进行分类(所以不要问怎么分类,这取决于你),然后接单。在下一次迭代时,重新开始。
当设置这样的任务时(顺便说一下,这是一个非常奇怪的任务),你必须与 "账户历史 "列表一起工作。在每一个新的迭代中,通过这个列表,找到在当前分钟内已经关闭的订单,将其数量相加。如果数量不够,那就根据需要进行分类(所以不要问怎么分类,这取决于你),然后接单。将其关闭在0.01。 在下一次迭代时,全部重新进行。
我会努力的!谢谢你
不能从终端配置邮件发送
我不能让它在myl.ru上工作,但现在我以同样的方式配置了它,它不会发送测试信息。
有人处理了吗?
如果是为了自己(不是为了出售),那么对邮件问题的正确处理是:
1)在localhost上找一个邮件程序来处理转发,保证投递,不要乱用授权和反垃圾邮件保护。否则,EA将很快被列入各种黑名单。
这并不难--有一个内置的win smtp和免费的简单设置,至少你可以自己编写脚本 :-)
2) 使用SendMail()的替代品。控制整个过程,发送更智能的报告,有标签、标志,可选择html格式和图片。
当你把1+2结合起来时,你会得到3的总数:-)所以这是一个合理和稳定的解决方案。
更多关于发送邮件 :https://www.mql5.com/ru/blogs/post/718364
-----
如果你需要关于SendMail和MT设置的帮助,那么请附上屏幕截图、源代码摘录、错误诊断......。
所以它不仅仅是一个 "地下的敲门声"
我是否正确理解 "TimeCurrent() "在被用户函数调用时将返回最后一次打勾的时间?
是
问候!
一个订单可以通过其编号使用OrderSelect 命令进行访问。
问题是,是否有可能提前知道现有订单的数量,从而不至于把它们都过一遍?例如,我们可以在开立新订单时记住这个数字。
我知道这个号码是按顺序从1开始分配的。可能的细微差别是什么?
非常感谢你。
问候!
一个订单可以通过其编号使用OrderSelect命令进行访问。
问题是,是否有可能提前知道现有订单的数量,从而不至于把它们都过一遍?例如,我们可以在开立新订单时记住这个数字。
我知道这个号码是按顺序从1开始分配的。可能的细微差别是什么?
非常感谢你。
订单发送
顺序选择
打破了我的大脑,请帮助我!
我已经写了一个相关的计算单元。但OANDA和investing.com给出的结果完全不同!这很有趣--它们也不相配啊!。
我哪里错了?
当前的货币对--欧元兑美元,我检查与英镑兑美元的相关性。
外部字符串SubSymbol = "GBPUSD"。
extern int correlation_time = 24; // 检查所选货币对的相关性的时间是多少?
.....
// ------------------------ 相关性计算块 --------------------------------------
int period = 15;
int bars_number = MathRound(correlation_time*60/period)。
double symbol_avg = 0;
double symbol_avg = 0;
double symbol_price[], double subsymbol_price[]。
双倍x,y。
int j;
int shift = 0。
ArrayResize(symbol_price, bars_number)。
ArrayResize(subsymbol_price, bars_number)。
for (j=0; j < bars_number; j++)
{
symbol_price[j] = (iHigh(NULL,period,j+shift) - iLow(NULL,period,j+shift))/2。
subsymbol_price[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2。
symbol_avg = symbol_avg + symbol_price[j];
subsymbol_avg = subsymbol_avg + subsymbol_price[j];
}
symbol_avg = symbol_avg/bars_number;
subsymbol_avg = subsymbol_avg/bars_number;
double ss_xx = 0;
double ss_xy = 0;
double ss_yy = 0;
for (j=0; j < bars_number; j++)
{
x = symbol_price[j] - symbol_avg;
y = subsymbol_price[j] - subsymbol_avg;
ss_xy = ss_xy + x*y。
ss_xx = ss_xx + x*x;
ss_yyy = ss_yy + y*y。
}
double correlation = ss_xy/MathSqrt(ss_xx*ss_yy)。
Alert(correlation, " ", bars_number)。
ArrayFree(symbol_price)。
ArrayFree(subsymbol_price)。
// ------------------------ 相关计算块的结束 ---------------------------------