如何从其他货币对导入买入/卖出价? - 页 5 123456 新评论 Seng Joo Thio 2019.05.14 05:07 #41 HosseinKOGO:这就是GBPAUD H4 3.12.2018的一整天!而且这次我没有跳到最后。 当打印功能 有太多的报告需要打印时,可能会丢失一些报告? 我想另一个问题可能是因为这三个工具的ticks是在不同的毫秒内出现的,所以当我们在GBPAUD上使用start/OnTick函数时,只要GBPAUD的tick出现,它就会执行start函数。我想你的代码可能会说,当这3个货币对的价格都不为0时,就会返回所有的货币对价格。数据看起来很好...你对打印功能的看法是正确的...我在测试中也看到许多缺失的行。但是当我把所有的东西都打印到文件中时,没有任何东西被遗漏。这里有一些关于代码的信息:GBPAUD的每一个刻度的时间将被用来获取其他货币对的最新刻度(到同一时间),所以它总是会返回一些东西,不会是零。我决定把这个函数放到一个类中,这样应该更整洁。见附件。把它放在你的专家文件夹里,和你的EA一起。请自由修改它。 下面的例子向你展示了使用它的一种方法(突出显示的线条是必不可少的)。 #include "TicksInfo.mqh" CTicksInfo ticksInfo; string otherPairs[] = {"GBPUSD","EURUSD"}; string allPairs[] = {}; int tickCount = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ticksInfo.init(otherPairs); int numSym = ArraySize(otherPairs)+1; ArrayResize(allPairs,numSym); allPairs[0] = _Symbol; for (int i=1; i<numSym; i++) allPairs[i] = otherPairs[i-1]; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ticksInfo.deInit(); Print ("Total Ticks = ", tickCount); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { tickCount++; Print ("=== Now process tick ", tickCount); MqlTick myTick; for (int i=0; i<ArraySize(allPairs); i++) { if (ticksInfo.getTick(allPairs[i],myTick)) printTick (allPairs[i],myTick); else Print (allPairs[i], " Error"); } } //+------------------------------------------------------------------+ void printTicktoFile(string sym, MqlTick &tick) { int file = FileOpen("LogFile.log",FILE_WRITE|FILE_READ|FILE_TXT); FileSeek(file,0,SEEK_END); FileWrite(file, sym, " tick number ", tickCount, ", at ", tick.time, " ", IntegerToString(tick.time_msc-(tick.time*1000),3,'0'), " Ask = ", tick.ask, " Bid = ", tick.bid); FileClose(file); } void printTick(string sym, MqlTick &tick) { Print (sym, " tick number ", tickCount, ", at ", tick.time, " ", IntegerToString(tick.time_msc-(tick.time*1000),3,'0'), " Ask = ", tick.ask, " Bid = ", tick.bid); } 因此,真正的关键是这一行:ticksInfo.getTick(<SYMBOL String>,<MqlTick Struct>)。如果它返回false,你将不得不检查日志中的错误信息。 附加的文件: TicksInfo.mqh 5 kb HosseinKOGO 2019.05.14 11:27 #42 Seng Joo Thio:数据看起来很好...你对打印功能的看法是正确的...我在测试中也看到了许多缺失的行。但是当我把所有的东西都打印到文件中时,没有任何东西被遗漏。这里有一些关于代码的信息:GBPAUD的每一个刻度的时间将被用来获取其他货币对的最新刻度(到同一时间),所以它总是会返回一些东西,不会是零。我决定把这个函数放到一个类中,这样应该更整洁。见附件。把它放在你的专家文件夹里,和你的EA一起。请自由修改它。 下面的例子向你展示了使用它的一种方法(突出显示的线条是必不可少的)。 因此,真正的关键是这一行:ticksInfo.getTick(<SYMBOL String>,<MqlTick Struct>)。如果它返回错误,你必须查看日志中的错误信息。谢谢你的帮助。 我已经将所有这些行复制到每个适当的区域。但是,由于我不理解这些代码,请告诉我如何将SecondPair的Ask和Bid放入Ask2,Bid2中,ThirdPair也是如此。 这里是我的全局区域。 #include "TicksInfo.mqh" CTicksInfo ticksInfo; extern string SecondPair; extern string ThirdPair; string otherPairs[] = {SecondPair,ThirdPair}; string allPairs[] = {}; int tickCount = 0; . . . 这一部分在编译时返回2个错误。我应该如何处理?'SecondPair' - 需要常量表达式 MyEA!.mq4 'ThirdPair' - 需要常量表达式 MyEA!.mq4 Seng Joo Thio 2019.05.14 11:49 #43 HosseinKOGO:谢谢你的帮助。 我已经把所有这些行复制到每个适当的区域。但是,由于我不理解这些代码,请告诉我如何将SecondPair的Ask和Bid放入Ask2,Bid2中,对ThirdPair也是如此。 这里是我的全局区域。 这一部分在编译时返回2个错误。我应该如何处理?'SecondPair' - 需要常量表达式 MyEA!.mq4 'ThirdPair' - 需要常量表达式 MyEA!.mq4 然后用和allPairs一样的方式声明你的otherPairs。在OnInit中,这样做。 ArrayResize(otherPairs,2); otherPairs[0] = SecondPair; otherPairs[1] = ThirdPair; 为了给Ask2、Bid2、Ask3、Bid3赋值,在OnTick中这样做。 MqlTick myTick; if (ticksInfo.getTick(SecondPair,myTick)) { Ask2 = myTick.ask; Bid2 = myTick.bid; } else Print (SecondPair, " Error"); if (ticksInfo.getTick(ThirdPair,myTick)) { Ask3 = myTick.ask; Bid3 = myTick.bid; } else Print (ThirdPair, " Error"); HosseinKOGO 2019.05.14 13:04 #44 Seng Joo Thio:然后用和allPairs一样的方式声明你的otherPairs。在OnInit中,这样做。 为了给Ask2、Bid2、Ask3、Bid3赋值,在OnTick中这样做。 它又给了我00点:( 我的全局区域。 #include "TicksInfo.mqh" CTicksInfo ticksInfo; extern string SecondPair; extern string ThirdPair; string otherPairs[] = {}; string allPairs[] = {}; int tickCount = 0; . . . OnInit: ticksInfo.init(otherPairs); int numSym = ArraySize(otherPairs)+1; ArrayResize(allPairs,numSym); allPairs[0] = _Symbol; for (int i=1; i<numSym; i++) allPairs[i] = otherPairs[i-1]; ArrayResize(otherPairs,2); otherPairs[0] = SecondPair; otherPairs[1] = ThirdPair; . . . OnDeinit: ticksInfo.deInit(); Print ("Total Ticks = ", tickCount);OnTick: tickCount++; Print ("=== Now process tick ", tickCount); MqlTick myTick; for (int i=0; i<ArraySize(allPairs); i++) { if (ticksInfo.getTick(allPairs[i],myTick)) printTick (allPairs[i],myTick); else Print (allPairs[i], " Error"); } if (ticksInfo.getTick(SecondPair,myTick)) { Ask2 = myTick.ask; Bid2 = myTick.bid; } else Print (SecondPair, " Error"); if (ticksInfo.getTick(ThirdPair,myTick)) { Ask3 = myTick.ask; Bid3 = myTick.bid; } else Print (ThirdPair, " Error");日志。 2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: GBPCAD错误 2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: GBPUSD 错误 2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: GBPAUD tick number 221179, at 2018.01.03 23:36:58 000 Ask = 1.72479 Bid = 1.72459 2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: ===现在处理221179点 我哪里弄错了? 对不起,我的技术水平为零 :D How to import bid/ask PREDICT time period MetaTrader 5 Strategy Tester! Seng Joo Thio 2019.05.14 13:08 #45 HosseinKOGO:它又给了我00元:( 我的全局区域。 OnInit: OnDeinit: OnTick: 我哪里弄错了? 我为我的零水平技能感到抱歉 :D OnInit--这3行新字应该放在所有内容之前。 Seng Joo Thio 2019.05.14 13:14 #46 HosseinKOGO:我为我的零水平技能感到抱歉 :D 这都是关于变量和函数,以及实验的意愿。 HosseinKOGO 2019.05.14 13:15 #47 Seng Joo Thio: OnInit - 这3行新字应该放在所有内容之前。我做到了。但非常奇怪的是:这两对额外的计时器没有工作...... 2019.05.14 17:41:55.469 2018.01.05 11:11:24 MyEA! GBPAUD,H4: GBPCAD tick number 370711, at 1970.01.01 00:00:00 000 Ask = 0.0 Bid = 0.0 2019.05.14 17:41:55.469 2018.01.05 11:11:24 MyEA! GBPAUD,H4: GBPUSD tick number 370711, at 1970.01.01 00:00:00 000 Ask = 0.0 Bid = 0.0 2019.05.14 17:41:55.469 2018.01.05 11:11:24 MyEA! GBPAUD,H4: GBPAUD tick number 370711, at 2018.01.05 11:11:24 000 Ask = 1.72644 Bid = 1.72624 2019.05.14 17:41:55.469 2018.01.05 11:11:24 MyEA! GBPAUD,H4: === Now process tick 370711 Seng Joo Thio 2019.05.14 13:35 #48 HosseinKOGO:我做到了。但非常奇怪的是:这两个额外的对子的定时器并不工作...... 给我看看整个EA,在你做完实验后,仍然想不明白为什么。我可以在8小时后看一下:)。现在我需要😴...😂 William Roeder 2019.05.14 15:33 #49 Seng Joo Thio: OnInit - 3个新行应该在一切之前。 不要试图在OnInit(或加载时)使用任何价格或服务器相关的函数,因为可能还没有连接/图表。终端启动。指标/EAs被加载。静态变量和全局声明变量被初始化。(不要依赖特定的顺序。)OnInit 被调用。对于指标,OnCalculate 被调用,有任何现有的历史记录。人类可能需要输入密码,开始与服务器连接。收到新的历史记录,OnCalculate 再次被调用。现在TickValue、TimeCurrent、账户信息和价格都是有效的,如果有新的tick被接收,OnCalculate/OnTick 被调用。 在MT4上。除非当前的图表是引用的特定货币对/TF,否则您必须在 访问价格之前 处理4066/4073 错误。MQL4 EA中的下载历史 - MQL4 和 MetaTrader 4 - MQL4 编程论坛已更正 链接到的函数,为有关的符号/TF打开一个隐藏的图表(如果还没有打开的话),从而更新历史,并暂时把符号放在市场观察上(如果还没有的话),所以SymbolInfoDouble(symbol,SYMBOL_BID)或MarketInfo(symbol,MODE_BID)第一次调用时不会返回0。 MQL5 简介:如何编写简单的EA 交易和自定义指标 如何在莫斯科交易所安全地使用您的 EA 进行交易 在 MetaTrader 5 里使用 Seng Joo Thio 2019.05.14 21:22 #50 William Roeder:不要试图在OnInit(或加载时)使用任何价格或服务器相关函数,因为可能还没有连接/图表。终端启动。指标/EAs被加载。静态变量和全局声明变量被初始化。(不要依赖特定的顺序。)OnInit 被调用。对于指标,OnCalculate 被调用,有任何现有的历史记录。人类可能需要输入密码,开始与服务器连接。收到新的历史记录,OnCalculate 再次被调用。现在TickValue、TimeCurrent、账户信息和价格都是有效的,如果有新的tick被接收,OnCalculate/OnTick 被调用。 在MT4上。除非当前的图表是引用的那个特定的货币对/TF,否则您必须在 访问价格之前 处理4066/4073 错误。MQL4 EA中的下载历史 - MQL4 和 MetaTrader 4 - MQL4 编程论坛已更正 链接到的函数,为有关的符号/TF打开一个隐藏的图表(如果还没有打开的话),从而更新历史,并暂时将符号放在市场观察(如果还没有的话),所以SymbolInfoDouble(symbol,SYMBOL_BID)或MarketInfo(symbol,MODE_BID)在第一次调用时不会返回0。你是对的。不过不用担心,因为我们在OnInit中做的唯一事情是初始化用于存储符号名称的数组,以及准备一些用于读取我们自己的数据文件的文件柄。至于买入和卖出价格(即 "tick "数据),我们只在OnTick中访问它们,而且主要是从我们自己的数据文件中访问,因为MT4策略测试器在查询其他符号的此类数据时总是返回零(注意,这种行为与人们更熟悉的OHLC数据的检索不同)。 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这就是GBPAUD H4 3.12.2018的一整天!而且这次我没有跳到最后。
当打印功能 有太多的报告需要打印时,可能会丢失一些报告?
我想另一个问题可能是因为这三个工具的ticks是在不同的毫秒内出现的,所以当我们在GBPAUD上使用start/OnTick函数时,只要GBPAUD的tick出现,它就会执行start函数。我想你的代码可能会说,当这3个货币对的价格都不为0时,就会返回所有的货币对价格。
数据看起来很好...
你对打印功能的看法是正确的...我在测试中也看到许多缺失的行。但是当我把所有的东西都打印到文件中时,没有任何东西被遗漏。
这里有一些关于代码的信息:GBPAUD的每一个刻度的时间将被用来获取其他货币对的最新刻度(到同一时间),所以它总是会返回一些东西,不会是零。
我决定把这个函数放到一个类中,这样应该更整洁。见附件。把它放在你的专家文件夹里,和你的EA一起。请自由修改它。
下面的例子向你展示了使用它的一种方法(突出显示的线条是必不可少的)。
因此,真正的关键是这一行:ticksInfo.getTick(<SYMBOL String>,<MqlTick Struct>)。如果它返回false,你将不得不检查日志中的错误信息。
数据看起来很好...
你对打印功能的看法是正确的...我在测试中也看到了许多缺失的行。但是当我把所有的东西都打印到文件中时,没有任何东西被遗漏。
这里有一些关于代码的信息:GBPAUD的每一个刻度的时间将被用来获取其他货币对的最新刻度(到同一时间),所以它总是会返回一些东西,不会是零。
我决定把这个函数放到一个类中,这样应该更整洁。见附件。把它放在你的专家文件夹里,和你的EA一起。请自由修改它。
下面的例子向你展示了使用它的一种方法(突出显示的线条是必不可少的)。
因此,真正的关键是这一行:ticksInfo.getTick(<SYMBOL String>,<MqlTick Struct>)。如果它返回错误,你必须查看日志中的错误信息。
谢谢你的帮助。
我已经将所有这些行复制到每个适当的区域。但是,由于我不理解这些代码,请告诉我如何将SecondPair的Ask和Bid放入Ask2,Bid2中,ThirdPair也是如此。
这里是我的全局区域。
这一部分在编译时返回2个错误。我应该如何处理?
'SecondPair' - 需要常量表达式 MyEA!.mq4
'ThirdPair' - 需要常量表达式 MyEA!.mq4
谢谢你的帮助。
我已经把所有这些行复制到每个适当的区域。但是,由于我不理解这些代码,请告诉我如何将SecondPair的Ask和Bid放入Ask2,Bid2中,对ThirdPair也是如此。
这里是我的全局区域。
这一部分在编译时返回2个错误。我应该如何处理?
'SecondPair' - 需要常量表达式 MyEA!.mq4
'ThirdPair' - 需要常量表达式 MyEA!.mq4
然后用和allPairs一样的方式声明你的otherPairs。在OnInit中,这样做。
为了给Ask2、Bid2、Ask3、Bid3赋值,在OnTick中这样做。
然后用和allPairs一样的方式声明你的otherPairs。在OnInit中,这样做。
为了给Ask2、Bid2、Ask3、Bid3赋值,在OnTick中这样做。
它又给了我00点:(
我的全局区域。
OnInit:
OnDeinit:
OnTick:
日志。
2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: GBPCAD错误
2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: GBPUSD 错误
2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: GBPAUD tick number 221179, at 2018.01.03 23:36:58 000 Ask = 1.72479 Bid = 1.72459
2019.05.14 17:37:14.686 2018.01.03 23:36:58 MyEA!GBPAUD,H4: ===现在处理221179点
我哪里弄错了?
对不起,我的技术水平为零 :D
它又给了我00元:(
我的全局区域。
OnInit:
OnDeinit:
OnTick:
我哪里弄错了?
我为我的零水平技能感到抱歉 :D
我为我的零水平技能感到抱歉 :D
OnInit - 这3行新字应该放在所有内容之前。
我做到了。但非常奇怪的是:这两对额外的计时器没有工作......
我做到了。但非常奇怪的是:这两个额外的对子的定时器并不工作......
MQL4 EA中的下载历史 - MQL4 和 MetaTrader 4 - MQL4 编程论坛
已更正
链接到的函数,为有关的符号/TF打开一个隐藏的图表(如果还没有打开的话),从而更新历史,并暂时把符号放在市场观察上(如果还没有的话),所以SymbolInfoDouble(symbol,SYMBOL_BID)或MarketInfo(symbol,MODE_BID)第一次调用时不会返回0。
MQL4 EA中的下载历史 - MQL4 和 MetaTrader 4 - MQL4 编程论坛
已更正
链接到的函数,为有关的符号/TF打开一个隐藏的图表(如果还没有打开的话),从而更新历史,并暂时将符号放在市场观察(如果还没有的话),所以SymbolInfoDouble(symbol,SYMBOL_BID)或MarketInfo(symbol,MODE_BID)在第一次调用时不会返回0。
你是对的。不过不用担心,因为我们在OnInit中做的唯一事情是初始化用于存储符号名称的数组,以及准备一些用于读取我们自己的数据文件的文件柄。至于买入和卖出价格(即 "tick "数据),我们只在OnTick中访问它们,而且主要是从我们自己的数据文件中访问,因为MT4策略测试器在查询其他符号的此类数据时总是返回零(注意,这种行为与人们更熟悉的OHLC数据的检索不同)。