Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули#include <winuser32.mqh>#import"user32.dll"intGetParent(inthWnd);
#import//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда//возможно нужно будет делать задержку в пару секунд//У меня все работаетintReconnect(){intresult;
inthwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графикаhwnd = GetParent(hwnd); // получаем хендл родительского окнаhwnd = GetParent(hwnd); // ...hwnd = GetParent(hwnd); //добираемся до главного окнаresult = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщенеreturn;
}
Ну вот и все - отлично работает процедруа программного реконнекта :) НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4. //В начале советника подключаем необходимые ДЛЛ-ки и модули #include <winuser32.mqh> #import"user32.dll" intGetParent(inthWnd); #import
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться //Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда //возможно нужно будет делать задержку в пару секунд //У меня все работает intReconnect() { intresult; inthwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика hwnd = GetParent(hwnd); // получаем хендл родительского окна hwnd = GetParent(hwnd); // ... hwnd = GetParent(hwnd); //добираемся до главного окна result = SendMessageA(hwnd, WM_COMMAND, 37400, 0); Print("SendMessageA = " + result); //посылаем сообщене return; }
Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули#include <winuser32.mqh>#import"user32.dll"intGetParent(inthWnd);
#import//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда//возможно нужно будет делать задержку в пару секунд//У меня все работаетintReconnect(){intresult;
inthwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графикаhwnd = GetParent(hwnd); // получаем хендл родительского окнаhwnd = GetParent(hwnd); // ...hwnd = GetParent(hwnd); //добираемся до главного окнаresult = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщенеreturn;
}
如果你展示一段生成输入的代码,你可以更快地发现逻辑错误。
但在MQL中应该有一个普遍接受的解决方案,对吗?如何 "同步 "打开不同符号的柱子?那么,显然,我们应该等待所有使用的符号打开一个新栏。但如何正确地做到这一点呢?
不需要同步性和其他自行车的发明。一切都已经在很久以前被发明了。新形成的条形图的存在只对该工具进行检查,专家顾问是在第一个tick的到来时安装的。而start()事件也只在新刻度线到来时在该符号上触发。我给了你一段代码,执行这个检查,以便在重新报价的情况下,下一个头寸不会在下一个条形图上打开,在失败后,它会尝试在同一个条形图上打开。对我来说,在单一货币和多货币模式下都能正常工作。在重新报价的情况下,交易是在同一个柱子上打开的,但只是有一些延迟,因此并不总是在该柱子的开盘价,而是有一些偏移。也就是说,与测试者会有差异,但不是在酒吧,而是在开盘价。
尤里,一个新的小时的开始将发生,即使嘀嗒声没有来!
即使蜱虫没有来,我们也会开始新的一小时!
可以通过任何工具的新条形图中的一个刻度来计算一个新条形。
LeoV正在为所有使用的货币对同步等待新的勾股。
YuraZ写道(a)。
坦率地说,这并不完全漂亮......。如果蜱虫没有来找这些对,你将再次错过它们
如果嘀嗒声没有来,你就不能马上下单,除非你使用脚本。
而且只有当蜱虫来到经纪公司,并且他们不把它们传送到你的终端(在白天)。
这就是为什么我在实现多币种专家顾问时,要用Miles(或Moore)做一个状态机。
它监测了所需配对的顺序开放状态。当然,这并不总是可能的
自然,不可能总是在正确的价格开仓,但这种方法保证了订单会完全开仓。
很简单!可以下一个订单:-)如果打钩没有来
考虑一下吧!如果你不这样做,我会给你一个提示。
通常情况下,对于多币种的EA来说,如果不能100%保证订单的到达,就会出现这样的情况
那么顾问工作的逻辑就会被破坏。
顺便说一下,别忘了你的EA是在它所盘旋的货币对的点位上工作的。
因此,即使在另一个货币对上有一个刻度,而在连接了你的EA的货币对上没有一个刻度。
那么同步将被破坏。
不要忘记与经纪公司失去联系和重新报价 等不愉快的事情(如果你处理的是真实账户)。
顺便说一下,在微观实数上,我经常遇到这样的情况:在终端重新加载之前,一个订单从未被传递。
即使是在手动模式下。他们在等待什么,等待...
这就是为什么我早就放弃了基于对单的系统。
这太麻烦了。
YuraZ写道(a)。
坦率地说,这并不完全漂亮......。 如果蜱虫没有来找这些对,你将再次错过它们
如果嘀嗒声没有来,你就不能马上下单,除非你使用脚本。
而且只有当蜱虫来到经纪公司,并且他们不把它们传送到你的终端(在白天)。
这就是为什么我在实现多币种专家顾问时,要用Miles(或Moore)做一个状态机。
它监测了所需配对的顺序开放状态。 当然,这并不总是可能的
自然,我并不总是能够在必要的价格上开仓,但这种方法保证了订单总是能够被打开。
很简单!可以下一个订单:-)如果没有打勾,就可以下一个订单。
考虑一下吧!如果你不这样做,我会给你一个提示。
通常情况下,对于多币种的EA来说,如果不能100%保证订单 的到达,就会出现这样的情况
那么顾问工作的逻辑就会被破坏。
顺便说一下,别忘了你的EA是在它所盘旋的货币对的点位上工作的。
因此,即使在另一个货币对上有一个刻度,而在连接了你的EA的货币对上没有一个刻度。
那么同步将被破坏。
不要忘记与经纪公司失去联系和重新报价等不愉快的事情(如果你处理的是真实账户)。
顺便说一下,在微观实数上,我经常遇到这样的情况:在终端重新加载之前,一个订单 从未被传递。
即使是在手动模式下。他们在等待什么,等待...
这就是为什么我早就放弃了基于对单的系统。
痛苦的麻烦。
你可能是想写TIC...但你只是写了秩序。
你明白,一个EA可以在欧元兑美元上输入,并使用美元兑瑞郎。
只要写
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK);
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...
能起作用的代码片断
OpenLevel = MarketInfo( sSymbol, MODE_BID )。
如果 ( TDARELOCK == 0 )
ticket=OrderSend( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red)。
----
而美元兑瑞郎的TIC可能不足以为任何货币对获得一个勾。
我希望MQL5不需要接收刻度线,程序就能工作。
他们承诺要做事件,这意味着任何一段代码都可以被传递到一个事件上。
----
关于终端冻结的第二个问题--这个问题可以通过重新启动来解决--这对开发者来说更有可能。
我也见过这个
这也是一种治疗方法,在论坛上有一个例子。
---
因此,如果你发送一个订单,但它没有打开,你可以发送这段代码来解决
YuraZ писал (а):
你可能是想写TIC...你一定是指TIC,但你写的是订单。
我指的是以100%的速度下单。
YuraZ写道(a)。
你可能是想写TIC...你一定是指TIC
我指的是下一个100%的订单。
但你要明白,这不仅是在一个多货币系统中
在普通的专家顾问中,你无法得到100%的保证...从来不是100%的保证
因为有一些因素
互联网
您的供应商
你的DC供应商
你的硬件
直流设备
等。
---
这就是停止的原因......或使用不同供应商的备用电脑(如果问题出在你这边)。
---
但如果是程序逻辑上的错误!!那就是另一回事了,它被处理了。
---
逻辑不应该因为进入时间不是在15:00而是在15:05或15:02而崩溃。
这正是我们在该主题的作者身上看到的情况!他试图在15:00:00:00进入。
( 数字是任意的)
他不做点子,所以在15:00或15:01-15:07进入,对他来说应该不会有太大的麻烦。
这就是我要说的:你不能对所有必要的符号都严格约束在一个小节的开头--在任何一个小节获得开头就足够了
YuraZ写道(a)。
坦率地说,这并不完全漂亮......。 如果蜱虫没有来找这些对,你将再次错过它们
如果嘀嗒声没有来,你就不能立即下单,除非你使用脚本。
而且只有当蜱虫来到经纪公司,并且他们不把它们传送到你的终端(在白天)。
这就是为什么我在实现多币种专家顾问时,要用Miles(或Moore)做一个状态机。
它监测了所需配对的顺序开放状态。 当然,这并不总是可能的
自然,我并不总是能够在必要的价格上开仓,但这种方法保证了订单总是能够被打开。
很简单!可以下一个订单:-)如果没有打勾,就可以下一个订单。
考虑一下吧!如果你不这样做,我会给你一个提示。
通常情况下,对于多币种的EA来说,如果不能100%保证订单 的到达,就会出现这样的情况
那么顾问工作的逻辑就会被破坏。
顺便说一下,别忘了你的EA是在它所盘旋的货币对的点位上工作的。
因此,即使在另一个货币对上有一个刻度,而在连接了你的EA的货币对上没有一个刻度。
那么同步将被破坏。
不要忘记与经纪公司失去联系和重新报价等不愉快的事情(如果你处理的是真实账户)。
顺便说一下,在微观实数上,我经常遇到这样的情况:在终端重新加载之前,一个订单 从未被传递。
即使是在手动模式下。他们在等待什么,等待...
这就是为什么我早就放弃了基于对单的系统。
这太麻烦了。
你可能是想写TIC...但你只是写了秩序。
如果你的专家顾问是站在欧元兑美元上,你明白它可能会以美元兑瑞郎进入。
只需写下
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK);
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...
能起作用的代码片断
OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red) 。
----
USDCHF的TIC可能不足以获得任何Pair的勾选。
我希望在MQL5中,你不需要接收刻度线,程序就能工作。
他们承诺制造事件,这意味着任何一段代码都可以在事件的基础上编写。
----
关于终端冻结的第二个问题--这个问题可以通过重启来解决--这个问题更有可能被提交给开发人员。
我也看到了这一点--
这也是经过处理的,在论坛上有一个例子。
---
因此,如果你发送一个订单,但它没有打开,你当然可以发送一个类似的代码来解决
重启终端是很好的,但此刻你应该如何处理其他挂在其他窗口上的专家顾问系统?
他们的操作逻辑自然不同,对频繁的重载反应不大,因为变量的值会丢失。
我们已经积累了这么久。
即使专家顾问是以欧元兑美元为基础的,你也意识到它可能以美元兑瑞郎的方式进入。
只需写下
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK);
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...
但是,如果在主要货币对上,前一个小时的最后一个刻度出现,例如,在7.50,而该小时的第一个刻度出现。
8点10分,而在二级符号上,每小时的第一个刻度是8点。
那么就很难期望在主要货币对上徘徊的EA会在次要货币对上下单。
在8点,最好是在8点10分。
当EA像脚本一样操作时的情况,即不给系统休息的机会,只是一味地甩动和甩动。
尽管有虱子,我也不考虑它。最好是写一个脚本。
YuraZ写道(a)。
坦率地说,这并不完全漂亮......。 如果蜱虫没有来找这些对,你将再次错过它们
如果嘀嗒声没有来,你就不能马上下单,除非你使用脚本。
而且只有当蜱虫来到经纪公司,并且他们不把它们传送到你的终端(在白天)。
这就是为什么我在实现多币种专家顾问时,要用Miles(或Moore)做一个状态机。
它监测了所需配对的顺序开放状态。 当然,这并不总是可能的
自然,我并不总是能够在必要的价格上开仓,但这种方法保证了订单总是能够被打开。
很简单!可以下一个订单:-)如果没有打勾,就可以下一个订单。
考虑一下吧!如果你不这样做,我会给你一个提示。
通常情况下,对于多币种的EA来说,如果不能100%保证订单 的到达,就会出现这样的情况
那么顾问工作的逻辑就会被破坏。
顺便说一下,别忘了你的EA是在它所盘旋的货币对的点位上工作的。
因此,即使在另一个货币对上有一个刻度,而在连接了你的EA的货币对上没有一个刻度。
则同步将被破坏。
不要忘记与经纪公司失去联系和重新报价等不愉快的事情(如果你处理的是真实账户)。
顺便说一下,在微观实数上,我经常遇到这样的情况:在终端重新加载之前,一个订单 从未被传递。
即使是在手动模式下。他们在等待什么,等待...
这就是为什么我长期拒绝基于配对订单的系统。
这太麻烦了。
你可能是想写TIC...但你只是写了秩序。
如果你的专家顾问是站在欧元兑美元上,你明白它可能会以美元兑瑞郎进入。
只需写下
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK);
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...
能起作用的代码片断
OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red) 。
----
USDCHF的TIC可能不足以获得任何Pair的勾选。
我希望在MQL5中,你不需要接收刻度线,程序就能工作。
他们承诺制造事件,这意味着任何一段代码都可以在事件的基础上编写。
----
关于终端冻结的第二个问题--这个问题可以通过重启来解决--这个问题更有可能被提交给开发人员。
我也看到了这一点--
这也是经过处理的,在论坛上有一个例子。
---
因此,如果你发送一个订单,但它没有打开,你当然可以发送一个类似的代码来解决
重启终端是很好的,但此刻你应该如何处理其他挂在其他窗口上的专家顾问系统?
他们的操作逻辑自然不同,对频繁的重载反应不大,因为变量的值会丢失。
我们已经积累了这么久。
即使专家顾问是以欧元兑美元为基础的,你也意识到它可能以美元兑瑞郎的方式进入。
只需写下
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK);
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...
但是,如果在主要货币对上,前一个小时的最后一个刻度出现,例如,在7.50,而该小时的第一个刻度出现。
8点10分,而在二级符号上,每小时的第一个刻度是8点。
那么就很难期望在主要货币对上徘徊的EA会在次要货币对上下单。
在8点,最好是在8点10分。
当EA像脚本一样操作时的情况,即不给系统休息的机会,只是一味地甩动和甩动。
尽管有虱子,我也不考虑它。最好是写一个脚本。
1,你认为Reconnect调用了Init()函数?并重新启动了EA?
。
你错了...
此外,明智的做法是保存计算好的和有价值的变量
如果我没有复杂的代码,我就把它存储在全球变量中。
如果代码很复杂,我就把它写到磁盘上,并在重新启动时读取它 - 如果重新启动是错误的,我就恢复它。
顺便说一下,很容易确定它是否是错误的。
---
2 如果某些货币对有一个新的时钟,而其他货币对没有刻度,那么不管什么时候有一个刻度,都会有一个新的时钟。
一个新的酒吧--或者更准确地说,一个新的小时可以被认为已经到来。
因此,有可能通过CLOSE来计算晚期交易,认为它们也被覆盖了。
那里的刻度线将在稍后出现,并且酒吧将被移位!!但真正的一小时已经过去了。
---
在没有刻度的货币对上下单是可以的--你知道怎么做吗?
我不是说它会在8点展出 - (传统数字)。
在任何货币对的新条线上,只要有新的TICK出现,就可以设置。
---
>o如果主货币对上一小时的最后一个刻度出现,例如,在7.50,而该小时的第一个刻度出现 。
>8点10分,在一个次级对上,每小时的第一个刻度在8点出现。
>很难指望一个徘徊在主要货币对上的EA会在次要货币对上下单。
>在8.00,或最多在8.10。
在多币种模式下工作,你不需要计算主要货币对的时间或不计算主要货币对的时间。
你只需要在任何货币对的新条形图的开始处捕捉一个刻度 - 并通过close来计算指标,而不是通过条形图的关闭来计算。
和进-出。
因为进场将在任何受控货币对的新条形图上进行,因为这将是一个新小时的信号!(在这种情况下是一个新的小时)
如果你在多币种工作,你不需要为主栏或不主栏计时。
有必要抓住一个新的柱状体开始的刻度线,并通过CLOSE而不是柱状体关闭来计算指标。
和进-出
因为进场将准确地在任何受控货币对的新条形图上进行,因为这将是一个新的小时的信号!(在这种情况下是一个新的小时)
更多类似内容.......
你不必为主要货币对或不主要货币对计时。
你需要捕捉任何货币对的新条形图的刻度线--并通过close而不是bar closing来计算指标。
和进-出
因为进场将准确地在任何受控货币对的新条形图上进行,因为这将是一个新的小时的信号!(在这种情况下是一个新的小时)
更多类似内容.......
按照这个逻辑重做专家顾问,出现问题的概率就会降低很多倍。
如果你在所有处于市场审查窗口的货币对上增加抓取新的一小时,特别是在日元上,那么实际上你不应该有失败。
1 只要不在所有对子上同步捕捉到新的栏位就可以了!!!。
2 在任何一个被控制的货币对上抓到新条,在当前收盘时开始重新计算所有需要的货币对 ...
(顺便说一下,你可能需要重做你的一些指标。)
决定进入 - 退出 - 或继续持有
按照这个逻辑重做专家顾问,出现问题的概率将时常降低。
如果你在市场概览窗口中的所有货币对上增加新的一小时的捕获量,特别是在日元上,那么实际上你不应该有失败。
1只是没有抓住一个新的酒吧在所有对的同步!!!。
2 在任何一个被控制的货币对上抓到一个新的柱子,在当前的close上开始重新计算所有需要的货币对...
(顺便说一下,你的一些指标可能需要重新计算)
并作出进入-退出-或继续持有的决定。
谢谢你,Veri Macha)))))))))))))