错误、漏洞、问题 - 页 444

 
Interesting:
交易和报价会对解决问题没有帮助?

不幸的是,没有。根据合同规范,报价环节从周一的00:00:00开始。
实际上,在这里Rosh 给出的答案是,一个报价时段的开始并不能保证 其中有报价。这在原则上是可以理解的。

到目前为止,我正在使用一个 "拐杖",其形式为以下检查。

input int TTL = 10; // Время "жизни" котировки
...
void Trade() {
  ...
  if (TimeCurrent() - SymbolInfoInteger(Instrumet, SYMBOL_TIME) > TTL) return;
  ...
  // Далее отправка торгового приказа на сервер.
}

如果有人能分享一个更优雅的解决方案,我将不胜感激(所有多币种用户一定都遇到过这种情况)。

P.S.
Konstantin Gruzdev 在他的文章《在MetaTrader 5中实现多货币模式》中提供了一个优雅的变体。
但这种变体将不符合锦标赛的要求。

 
voix_kas:

呀...这触动了我的神经。:))最后一行是在一个论坛帖子中手工更正的,所以请原谅我。=)
顺便说一下,你的代码也没有编译(我忘了在最后一行加一个结尾括号)。:-Р
此外,它的速度要慢2-3倍(现在我已经用脚本检查过了),但检查的质量是一样的。:-Р

总之,只要没有合适的代码来确定重要的整数,我就接受Composter的建议:将体积归一到小数点后8位。
希望不会有什么隐患。

:)
 
voix_kas:
OrderCheck 没有帮助?


 

参考资料。

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить.

这真的是不可能的吗?或者如果你真的想,你可以,但要小心?:)


从指标访问另一个符号的数据的问题。

如果没有虱子)

 
Swan:
OrderCheck没有帮助?

不,我在交易前写了一句话。

if (!OrderCheck(TradeRequest, TradeCheckResult) || (TradeCheckResult.retcode != TRADE_RETCODE_DONE)) return;

日志中仍有一个错误。:(

 

那么地段正常化呢?

伙计们,为什么要理论呢?

地段增量将大于最小地段的情况是荒谬的。好吧,想象一下:min = 0.1,step = 1.0。那么,只有1.1、2.1、3.1、......地段才允许?这是无稽之谈。

如果你在行使算术和编程,那么你的选择会赢。但如果我们谈论的是应用(交易意义上的)编程,那么在lot_step > lot_min时,我们必须以严重的错误 终止程序,并紧急更换经纪人,因为它没有足够的钱,甚至连通常配置服务器的人的工资都没有)。

一切都要适可而止。我的变体已经在实数上工作了5年多,使用不同的经纪人、账户类型、工具--从未出现过错误。
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 

小册子
为什么说它是荒谬的呢?让我们举一个简单的例子:min_lot = 1.0, min_step = 0.3。这些要求满足 "不胡闹 "的原则(min_lot >= lot_step)。:)
你把1.3手的体积传给归一化函数。你从它那里返回1.2手。
升级后的版本将返回1.3。它的步骤是 "正确的":从最小批量开始,而不是从零开始。

另一个问题是除了"1.0、0.1、0.01 等 "之外,还存在 "生活中 "的步骤。
在这里,在我看来,与解决一个可能的假想错误相比,问题的代价(性能的损失)是可以忽略不计的。IMHO。
毕竟,这样计算更正确:从最小的地段开始计算,而不是从零开始。

 
是否有任何现成的代码,可以在某一特定金额(如1234.56美元是唯一的输入参数)下,以当前的符号和价格买入最大可能的手数。里面应该有各种最大、最小数量、正常化、杠杆会计、资金充足等方面的检查。最主要的是,代码必须进行买入,而不要因为我没有钱(有多少就买多少)、某些检查失败(让它成功)、下了订单但没有买入(死了,但不买就不回来)等而打扰我。 我知道在像CTALT这样的类中的某个地方,这是。但要从那里复制一些东西并不那么容易。我想处理我自己的算法,而不是MQL5的语言。
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
voix_kas:

不,我在交易前会写下一行字。

日志中仍有一个错误。:(

看,在冠军账户上,所有的工具都在同一时间进行交易。注册)。


TradeCheckResult.retcode != TRADE_RETCODE_DONE

我不太确定这种情况...


我不知道这个条件是否正确。

if(current price== 0.0) return;

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
voix_kas:

小册子
为什么说它是荒谬的呢?让我们举一个简单的例子:最小手数=1.0,最小步数=0.3。这些要求满足 "不胡闹 "的原则(min_lot >= lot_step)。:)
你把1.3手的体积传给归一化函数。从中有1.2手被退回给你。
升级后的版本将返回1.3。它的步骤是 "正确的":从最小批量开始,而不是从零开始。

另一个问题是除了"1.0、0.1、0.01 等 "之外,还存在 "生活中 "的步骤。
在这里,在我看来,与解决可能的假想错误相比,问题的代价(性能损失)是可以忽略不计的。IMHO。
毕竟,这样计算更正确:从最小手数开始计算,而不是从零开始。

"最小手数=1.0,最小步数=0.3 "也是很荒谬的。台阶应该是最小地段的倍数。

我已经表达了我的观点--在数学和编程比赛中,min_lot减法变体将获胜,真正的交易不需要它。

我不认为有进一步讨论的主题,每个人都有自己的方式;)