mql5语言的特点、微妙之处以及技巧 - 页 173 1...166167168169170171172173174175176177178179180...247 新评论 Alexey Viktorov 2020.04.09 11:59 #1721 fxsaber: 以上更新。 关于交易、自动交易系统和交易策略测试的论坛 mql5的特殊性,技巧和窍门 fxsaber, 2020.04.09 13:13 看起来你根本就没有遇到过这种情况。请看一下文件。每个订单有两卷。 这些是活的限制器。第一个数字是原始体积,第二个数字是倒出的体积。一旦他们变得平等或被删除,它就会进入历史。 这不是一个命令分两部分执行吗?看起来很奇怪,未执行的卷是一样的。 fxsaber 2020.04.09 12:04 #1722 Alexey Viktorov: 这不是一个命令分两部分执行吗?似乎很奇怪,未执行的卷是一样的。 一个巧合。他们甚至有不同的弹夹。 fxsaber 2020.04.09 12:05 #1723 fxsaber: 在秩序模式中,当它是活的时,不可能有秩序。死了之后--会有一个第一次执行的时间,正如最初所说的那样。 在历史上发现。 fxsaber 2020.04.10 12:13 #1724 fxsaber: 当你通过CloseBy倒闭时,似乎失去了主要的东西。需要去看看。 这似乎是下面第一个代码不能工作的原因。 关于交易、自动交易系统和测试交易策略的论坛 MQL5中的历史利润? fxsaber, 2017.08.26 19:16 MQL5 double Profit( void ) { double Res = 0; if (HistorySelect(0, INT_MAX)) for (int i = HistoryDealsTotal() - 1; i >= 0; i--) { const ulong Ticket = HistoryDealGetTicket(i); if((HistoryDealGetInteger(Ticket, DEAL_MAGIC) == MagicNumber) && (HistoryDealGetString(Ticket, DEAL_SYMBOL) == Symbol())) Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT); } return(Res); } MQL5 + MQL4 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 double Profit( void ) { double Res = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == MagicNumber) && (OrderSymbol() == Symbol())) Res += OrderProfit(); return(Res); } 计算魔术中的利润似乎是一个问题。 fxsaber 2020.04.21 20:04 #1725 订单价格是正常化的,交易则不是。脚本找到了这样的交易。void OnStart() { if (HistorySelect(0, INT_MAX)) for (int i = HistoryDealsTotal() - 1; i >= 0; i--) // Перебираем все сделки { const ulong Ticket = HistoryDealGetTicket(i); // Тикет сделки const double Price = HistoryDealGetDouble(Ticket, DEAL_PRICE); // Цена сделки if (NormalizeDouble(Price, 5) != Price) // Если цена сделки не нормализована, Print(Ticket); // печатаем тикет сделки. } } fxsaber 2020.04.23 17:51 #1726 MT5实时自动放置的开仓/平仓的箭头是基于TradeTransaction-events的。 刚才我看到,这些事件(开仓和平仓约十几个)没有到达终端,因为一时的连接失败--这太巧了,我坐在电脑前,用眼睛看着它们。因此,没有相应的箭头。 而且,正如有时在这里所说的,你不能在战斗的EA中依赖OnTradeTransaction。很遗憾,没有可靠的公共机制来处理OrderSendAsync。 Igor Makanu 2020.04.23 18:03 #1727 fxsaber: 太糟糕了,没有可靠的公共机制来处理OrderSendAsync。 服务部门能否进入这些行业?- 如果是这样,那么就可以每10毫秒监测一次,并将事件发送到图表中。 我看了一下帮助,我想也许我得到了服务的补充,但我认为去年是这样的。 -它是一个程序,与指标、专家顾问和脚本相比,不需要与图表绑定。与脚本类似,服务不处理任何事件,除了启动事件。为了启动一个服务,其代码必须包含OnStart处理函数。服务不接受除 "开始 "之外的任何其他事件,但它们可以使用EventChartCustom向图表本身发送自定义事件。 UPD: 我写了一个服务脚本。 struct SOrderInfo { int positionstotal; int orderstotal; int historyorderstotal; bool operator==(const SOrderInfo &v){return(positionstotal==v.positionstotal && orderstotal==v.orderstotal && historyorderstotal==v.historyorderstotal);} }; //+------------------------------------------------------------------+ int OnStart() { SOrderInfo CurrState = UpdateOrdersInfo(); SOrderInfo LastState = CurrState; while(!IsStopped()) { Sleep(10); CurrState = UpdateOrdersInfo(); if(CurrState == LastState) continue; LastState = CurrState; Print("Orders changed!"); } return(0); } //+------------------------------------------------------------------+ SOrderInfo UpdateOrdersInfo() { SOrderInfo result; result.positionstotal = PositionsTotal(); result.orderstotal = OrdersTotal(); result.historyorderstotal = HistoryOrdersTotal(); return(result); } //+------------------------------------------------------------------+ 我开了几个订单,并手动关闭它们。 Andrey Khatimlianskii 2020.04.24 22:41 #1728 Igor Makanu: 服务部门能否进入这些行业?- 如果是这样,可以每10ms监测一次,并向图表发送一个事件。 这与索夫特尼克的同样超限没有区别。只不过,仅仅比较数量是不够的,内部可能会发生变化。 fxsaber 2020.04.25 05:33 #1729 Andrey Khatimlianskii: 这与《Owletnik》中同样的矫枉过正没有区别。只不过,仅仅比较数量是不够的,内部结构也会发生变化。 像Alerters这样的服务是非常好的。你不需要图表,它们会随终端自动启动。你只需要解决在不同账户之间转换的情况。 该服务也可以是一个战斗顾问。如果没有GUI,它就不是很方便。 Igor Makanu 2020.04.25 07:06 #1730 Andrey Khatimlianskii: 这与《Owletnik》中同样的矫枉过正没有区别。只不过,仅仅比较数量是不够的,内部结构也会发生变化。 是不同的。 有所谓的控制和管理任务 EA - 管理,服务 - 控制 控制不能是多余的--你会占用系统的所有资源,得到一个不稳定的系统而不是控制。 你必须定义事件的关键性,我认为,关闭和打开订单 - 这些都是需要控制的关键事件,而TP和SL的变化可以像以前一样进行(几次失败的尝试 - 让它去,在下一个tick我们将再次尝试)。 和你建议的方式--控制一切是可能的--你可以在SQLite中重复订单的状态,然后会有一个数据库与服务和EA....的同步问题。这一切都没有必要 我认为方案应该更简单--它应该如下:从EA的终端获取OnTradeTransaction 事件,并从服务中生成OnChartEvent事件,以便在EA中进行额外控制。 1...166167168169170171172173174175176177178179180...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
以上更新。
关于交易、自动交易系统和交易策略测试的论坛
mql5的特殊性,技巧和窍门
fxsaber, 2020.04.09 13:13
看起来你根本就没有遇到过这种情况。请看一下文件。每个订单有两卷。
这些是活的限制器。第一个数字是原始体积,第二个数字是倒出的体积。一旦他们变得平等或被删除,它就会进入历史。
这不是一个命令分两部分执行吗?看起来很奇怪,未执行的卷是一样的。
这不是一个命令分两部分执行吗?似乎很奇怪,未执行的卷是一样的。
一个巧合。他们甚至有不同的弹夹。
在秩序模式中,当它是活的时,不可能有秩序。死了之后--会有一个第一次执行的时间,正如最初所说的那样。
在历史上发现。
当你通过CloseBy倒闭时,似乎失去了主要的东西。需要去看看。
这似乎是下面第一个代码不能工作的原因。
关于交易、自动交易系统和测试交易策略的论坛
MQL5中的历史利润?
fxsaber, 2017.08.26 19:16
计算魔术中的利润似乎是一个问题。
MT5实时自动放置的开仓/平仓的箭头是基于TradeTransaction-events的。
刚才我看到,这些事件(开仓和平仓约十几个)没有到达终端,因为一时的连接失败--这太巧了,我坐在电脑前,用眼睛看着它们。因此,没有相应的箭头。
而且,正如有时在这里所说的,你不能在战斗的EA中依赖OnTradeTransaction。很遗憾,没有可靠的公共机制来处理OrderSendAsync。
太糟糕了,没有可靠的公共机制来处理OrderSendAsync。
服务部门能否进入这些行业?- 如果是这样,那么就可以每10毫秒监测一次,并将事件发送到图表中。
我看了一下帮助,我想也许我得到了服务的补充,但我认为去年是这样的。
-它是一个程序,与指标、专家顾问和脚本相比,不需要与图表绑定。与脚本类似,服务不处理任何事件,除了启动事件。为了启动一个服务,其代码必须包含OnStart处理函数。服务不接受除 "开始 "之外的任何其他事件,但它们可以使用EventChartCustom向图表本身发送自定义事件。
UPD: 我写了一个服务脚本。
我开了几个订单,并手动关闭它们。
服务部门能否进入这些行业?- 如果是这样,可以每10ms监测一次,并向图表发送一个事件。
这与索夫特尼克的同样超限没有区别。只不过,仅仅比较数量是不够的,内部可能会发生变化。
这与《Owletnik》中同样的矫枉过正没有区别。只不过,仅仅比较数量是不够的,内部结构也会发生变化。
像Alerters这样的服务是非常好的。你不需要图表,它们会随终端自动启动。你只需要解决在不同账户之间转换的情况。
该服务也可以是一个战斗顾问。如果没有GUI,它就不是很方便。这与《Owletnik》中同样的矫枉过正没有区别。只不过,仅仅比较数量是不够的,内部结构也会发生变化。
是不同的。
有所谓的控制和管理任务
EA - 管理,服务 - 控制
控制不能是多余的--你会占用系统的所有资源,得到一个不稳定的系统而不是控制。
你必须定义事件的关键性,我认为,关闭和打开订单 - 这些都是需要控制的关键事件,而TP和SL的变化可以像以前一样进行(几次失败的尝试 - 让它去,在下一个tick我们将再次尝试)。
和你建议的方式--控制一切是可能的--你可以在SQLite中重复订单的状态,然后会有一个数据库与服务和EA....的同步问题。这一切都没有必要
我认为方案应该更简单--它应该如下:从EA的终端获取OnTradeTransaction 事件,并从服务中生成OnChartEvent事件,以便在EA中进行额外控制。