文章 "轻松快捷开发 MetaTrader 程序的函数库(第 二十二部分):交易类 - 基准类,限制验证" - 页 2 123 新评论 Alexey Viktorov 2019.10.06 13:09 #11 Artyom Trishkin:那么,在事件处理 之后,事件类型检查模块结束时,last_event 变量中有什么?这就是你需要在 EA 中重置的内容。而不是强行调用库中重置最后一个事件的方法--库本身会在将事件发送到图表并写入事件列表后调用该方法。 是的,我只是疏忽了,没有在最后加上一行。 last_event = engine.LastTradeEvent(); Artyom Trishkin 2019.10.06 13:13 #12 Alexey Viktorov:是的,我只是漏掉了最后一行。 你可以把它等同于 TRADE_EVENT_NO_EVENT。 Alexey Viktorov 2019.10.06 13:37 #13 Artyom Trishkin: 您可以将其等同于 TRADE_EVENT_NO_EVENT。 这不起作用。每个刻度都 会打印。订单在第五个交易日被激活,在日志中打印了 4 次 "1",然后在每个交易日都打印 "20"。 //--- 如果最后一次交易事件发生变化 if(engine.LastTradeEvent() != last_event) { last_event=engine.LastTradeEvent(); switch(last_event) { case TRADE_EVENT_PENDING_ORDER_PLASED : Print(__FUNCTION__, "***", last_event); break; case TRADE_EVENT_PENDING_ORDER_REMOVED : break; case TRADE_EVENT_PENDING_ORDER_ACTIVATED : { Print(__FUNCTION__, "***", last_event); //OrderActivated(); break; } case TRADE_EVENT_POSITION_OPENED : break; case TRADE_EVENT_POSITION_CLOSED : break; //--- default : break; } last_event = TRADE_EVENT_NO_EVENT; } Artyom Trishkin 2019.10.06 14:39 #14 Alexey Viktorov:没用。每个刻度线都 会打印。订单在第 5 个刻度处被激活,在日志中打印了 4 次 "1",然后在每个刻度处打印 "20"。 您需要看看您在这里创建了什么。它在测试智能交易系统时有效。我在手机上。我大约五小时后到。 Alexey Viktorov 2019.10.06 14:49 #15 Artyom Trishkin: 我们需要看看你做了什么。测试顾问正在工作 我在用手机我还有五个小时才到 我还没写任何东西。上一篇文章中的代码上面只有这个。//-- 上次交易事件初始化 static ENUM_TRADE_EVENT last_event = WRONG_VALUE; //--- 如果在测试仪中工作 if(MQLInfoInteger(MQL_TESTER)) { engine.OnTimer(); } 下面的代码,打开两个订单 OP_SELLLIMIT 和 OP_SELLSTOP Artyom Trishkin 2019.10.06 15:05 #16 Alexey Viktorov:我还没有创建任何东西。上一篇文章中的代码上面只有这个。 在代码下方,开立了两个订单 OP_SELLLIMIT 和 OP_SELLSTOP。 我需要看到整个代码。如果不是七重封印之后的秘密,请发到私信里,或者在这里。 Alexey Viktorov 2019.10.06 15:26 #17 Artyom Trishkin: 我要看整个密码如果不是七重封印的秘密,就发私信给我,或者在这里发。 这里还没有 /********************************************************************\ |Only_BUY_or_only_SELL.mq4 | |© 2019, Alexey Viktorov | |https://www.mql5.com/ru/users/alexeyvik/news| \********************************************************************/ #property copyright "© 2019, Alexey Viktorov" #property link "https://www.mql5.com/zh/users/alexeyvik/news" #property version "1.00" #property strict #define ndd(A) NormalizeDouble(A, _Digits) //--- #include <DoEasy\Engine.mqh> CEngine engine; //--- enum MY_ORDER_TYPE { BUY = OP_BUY, SELL = OP_SELL, }; struct POZ { double profit; ulong ticket; double priceGrid; double price; }poz[]; sinput MY_ORDER_TYPE ordType = SELL; // 贸易方向 sinput double lot = 0.01; // 地块面积 input int StepGrid = 50; // 网格间距 input double desiredProfit = 10; // 期望利润 sinput bool Should_I_open = false; // 我应该开设一个新的职位系列吗? sinput int magick = 1; // 魔法编号 //--- int slip = 100; double contract, stepGrid, priceGrid; int totalPositions, levelNumb;//, levelBUY, levelSELL; /*******************Expert initialization function*******************/ int OnInit() { stepGrid = StepGrid*_Point; return(INIT_SUCCEEDED); }/*******************************************************************/ /************************Expert tick function************************/ void OnTick() { //-- 上次交易事件初始化 static ENUM_TRADE_EVENT last_event = WRONG_VALUE; //--- 如果在测试仪中工作 if(MQLInfoInteger(MQL_TESTER)) { engine.OnTimer(); } //--- 如果最后一次交易事件发生变化 if(engine.LastTradeEvent() != last_event) { //Print(__FUNCTION__, "***", last_event); last_event=engine.LastTradeEvent(); switch(last_event) { case TRADE_EVENT_PENDING_ORDER_PLASED : Print(__FUNCTION__, "***", last_event); break; case TRADE_EVENT_PENDING_ORDER_REMOVED : break; case TRADE_EVENT_PENDING_ORDER_ACTIVATED : { Print(__FUNCTION__, "***", last_event); //OrderActivated(); break; } case TRADE_EVENT_POSITION_OPENED : break; case TRADE_EVENT_POSITION_CLOSED : break; default : break; } last_event = TRADE_EVENT_NO_EVENT; } if(Should_I_open && OrdersTotal() == 0) { priceGrid = ndd(ordType == SELL ? Bid+stepGrid/2 : Bid-stepGrid/2); ENUM_ORDER_TYPE type = ENUM_ORDER_TYPE(ordType == OP_SELL ? OP_SELLLIMIT : OP_BUYSTOP); if(OrderSend(_Symbol, type, lot, priceGrid, slip, 0.0, 0.0, (string)priceGrid, magick) <= 0) Print(__FUNCTION__, GetLastError()); priceGrid = ndd(ordType == SELL ? Bid-stepGrid/2 : Bid+stepGrid/2); type = ENUM_ORDER_TYPE(ordType == OP_SELL ? OP_SELLSTOP : OP_BUYLIMIT); if(OrderSend(_Symbol, type, lot, priceGrid, slip, 0.0, 0.0, (string)priceGrid, magick) <= 0) Print(__FUNCTION__, GetLastError()); } return; }/*******************************************************************/ void OrderActivated() { Print(__FUNCTION__, "***", ENUM_TRADE_EVENT(engine.LastTradeEvent())); }/*******************************************************************/ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //-- 上次交易事件初始化 static ENUM_TRADE_EVENT last_event=WRONG_VALUE; //--- 如果在测试仪中工作 if(MQLInfoInteger(MQL_TESTER)) { engine.OnTimer(); } //--- 如果最后一次交易事件发生变化 if(engine.LastTradeEvent()!=last_event) { last_event=engine.LastTradeEvent(); } }/*******************************************************************/ /***************************Timer function***************************/ void OnTimer() { if(!MQLInfoInteger(MQL_TESTER)) engine.OnTimer(); }/*******************************************************************/ void OnDeinit(const int reason) { Comment(""); }/*******************************************************************/ Artyom Trishkin 2019.10.06 16:09 #18 Alexey Viktorov:好吧,现在还什么都没有 我必须运行你的代码才能得到答案。到时候我会给你答复的。 Alexey Viktorov 2019.10.06 16:24 #19 Artyom Trishkin: 我必须运行你的代码才能得到答案。我会去的,我会给你回复的。 我知道你不在家,我也不催你。 Artyom Trishkin 2019.10.06 16:53 #20 Alexey Viktorov:我知道你不在家,我也没催你。 不,恰恰相反,我不是在工作,而是在家里;) 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么,在事件处理 之后,事件类型检查模块结束时,last_event 变量中有什么?这就是你需要在 EA 中重置的内容。而不是强行调用库中重置最后一个事件的方法--库本身会在将事件发送到图表并写入事件列表后调用该方法。
是的,我只是疏忽了,没有在最后加上一行。
是的,我只是漏掉了最后一行。
您可以将其等同于 TRADE_EVENT_NO_EVENT。
这不起作用。每个刻度都 会打印。订单在第五个交易日被激活,在日志中打印了 4 次 "1",然后在每个交易日都打印 "20"。
没用。每个刻度线都 会打印。订单在第 5 个刻度处被激活,在日志中打印了 4 次 "1",然后在每个刻度处打印 "20"。
我们需要看看你做了什么。测试顾问正在工作
我还没写任何东西。上一篇文章中的代码上面只有这个。
下面的代码,打开两个订单 OP_SELLLIMIT 和 OP_SELLSTOP我还没有创建任何东西。上一篇文章中的代码上面只有这个。
在代码下方,开立了两个订单 OP_SELLLIMIT 和 OP_SELLSTOP。我要看整个密码如果不是七重封印的秘密,就发私信给我,或者在这里发。
这里还没有
好吧,现在还什么都没有
我必须运行你的代码才能得到答案。我会去的,我会给你回复的。
我知道你不在家,我也不催你。
我知道你不在家,我也没催你。