任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1022 1...101510161017101810191020102110221023102410251026102710281029...1178 新评论 Anatolii Zainchkovskii 2016.03.05 14:48 #10211 或者让我问一个更简单的问题。在OnCalculate()函数 中,插入了一个循环,所以它只经过一次迭代,下一次迭代只在图形被更新时进行....。 Victor Nikolaev 2016.03.05 15:26 #10212 ara66676:或者让我问一个更简单的问题。在OnCalculate()函数中,插入了一个循环,所以它只经过一次迭代,下一次迭代只在图形被更新时进行....。 看起来你需要一个通灵者或一个代码来研究。 Vadim Zhunko 2016.03.05 16:05 #10213 bistreevseh: 非常感谢您!它的工作原理很奇怪,我有管理权限,特别是对于终端文件夹,我把所有的破坏都给了所有者,这很有帮助,但后来就不工作了。然后试图用FileReadStrArrayW(如果我没有记错名字的话)读取日志文件的空行,脚本在ansi模式下挂起。只有FileReadCharArr能够读取安氏代码。也许你有一些如何用你的库解析日志文件的例子?我将非常感激!是的,现在阅读日志时有一个问题。以前是比较容易的。问题是,文件本身是ANSI编码的,但现在的字符串是UNICODE。这里是这样的脚本工程。#property strict #property script_show_inputs #include <FileFunctions.mqh> input int NumLines = 10; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { string sName = TimeToString(TimeLocal(), TIME_DATE); StringReplace(sName, ".", ""); string sPath = TerminalPath() + "\\MQL4\\Logs\\" + sName + ".log"; Print(sPath); if (!FileCheckW(sPath)) { Print("Файл отсутствует!"); return; } int hFile = FileOpenExistingW(sPath, GENERIC_READ, SHARE_READ); if (hFile == NULL) { Print("Файл не открыт!"); return; } string asArray[]; ArrayResize(asArray, NumLines); Print("hFile = ", hFile); for (int i = 0; i < NumLines; i++) asArray[i] = string(i) + " "; FileReadStrArrayMW(hFile, asArray, ArraySize(asArray), 0, NumLines); FileCloseHandle(hFile); for (int i = 0; i < NumLines; i++) Alert(asArray[i]); }但是,只有当日志文件首先以UNICODE格式保存时,它才会起作用。也就是说,库的工作是正确的。我们需要想一个简单的方法,将文件的ANSI编码转换为UNICODE字符串数组,或者我应该在库中添加一个函数,在读取文件时转换字符串的编码。=====================选项1:你不需要处理数组。读取整个文件为ANSI,转换为UNICODE,然后用MQL进行解析。变体2。以ANSI方式读取,将其写入终端的当前目录,并使用CSV文件的MQL函数读取它。选择3。使用同一库中的函数在沙盒中创建一个符号 链接到日志文件,并使用处理CSV文件的MQL函数来读取它。#property strict #include <FileFunctions.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { string sName = TimeToString(TimeLocal(), TIME_DATE); StringReplace(sName, ".", ""); sName += ".log"; string sPathLogs = TerminalPath() + "\\MQL4\\Logs\\" + sName; string sPathFiles = TerminalPath() + "\\MQL4\\Files\\" + sName; Print(sPathLogs); Print(sPathFiles); if (!FileCheckW(sPathLogs)) { Print("Файл отсутствует!"); return; } if (!FileCheckW(sPathFiles) && !FileSymbolicLinkW(sPathLogs, sPathFiles)) { Print("Символьная ссылка не создана!"); return; } int hFile = FileOpen(sName, FILE_READ|FILE_CSV|FILE_ANSI, '\t'); if (hFile == INVALID_HANDLE) { Print("Файл не открыт!"); return; } while (!FileIsEnding(hFile)) Alert(FileReadString(hFile)); FileClose(hFile); }在我看来,这是最美好和最简单的选择。 [Deleted] 2016.03.06 15:44 #10214 我正试图编写一个通道指标。我计算了用于在图表上绘图的数值,并将它们放入双tob[]和双tos[]数组中,但当我试图将它们连接到用于在图表上绘图的缓冲区时--在第25和26行。SetIndexBuffer(0, tob); SetIndexBuffer(1, tos);,这些数组代替了所需的值,例如。0/1.424/1.3679 1/1.42/1.3639被填上数字2147483647,像这样。 0/2147483647/2147483647 1/2147483647/2147483647 2/2147483647/2147483647这怎么能治好呢? 附加的文件: channel1.mq4 7 kb [删除] 2016.03.07 11:37 #10215 是否有任何热键可以在不同时期快速切换?按D,H1切换到M15,按U,切换到H1。 [删除] 2016.03.07 11:39 #10216 帮我找一个MT4的模板,把白天和黑夜分开。比方说,从00:00到8:00的图表是一种颜色,从8:00到00:00是另一种颜色。 Dikons 2016.03.07 20:59 #10217 向大家问好。面对这个问题。一个机器人代码的片段。int per=Period(); if(per = 60){Print("如果句号不是H1,这一行不应该出现在日志中")。评论(...)。...// 这里是机器人的身体......}意味着如果在图表上启用了H1以外的周期,机器人主体、Print(...)行和屏幕上的Comment(...)都不会被执行。然而,一切都在任何时期执行。为什么?如何正确书写,即如果图表上的周期与指定的不一致--将控制权返回给终端。(顺便说一下,我试过RETURN(0)--无济于事--仍然打印一切...) [删除] 2016.03.07 21:01 #10218 Dikons:向大家问好。面对这个问题。机器人代码片段。int per=Period()。 如果(per = 60){Print("如果时期不是H1 - 这一行不应该出现在日志中")。评论(...)。...//然后是机器人的身体......}意味着如果图表中H1以外的周期被启用,机器人的主体、Print(...)字符串以及屏幕上的Comment(...)都不会被执行。然而,一切都在任何时期执行。为什么?如何正确注册,如果时间框架与设定的不一致--将控制权返回给终端。(顺便说一下,我试过RETURN(0)--它不起作用--仍然打印一切...) 你在做作业,你需要比较 if(per== 60) Dikons 2016.03.08 05:45 #10219 Trader76: 你在做赋值,而你需要比较 if(per== 60)谢谢你,同志...我的大脑已经完全沸腾了......我在编程方面有一个重大的突破--我已经忘记了很多我所知道的一点东西......---还有一个问题...按终端搜索一天中最大/最小前8小时的片段。int h=TimeHour(TimeCurrent()); //找出当前的终端小时(0...23) if (h<8) return(0); //如果没有一天中前8根蜡烛的H1 = leave... double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // 确定一天中最大的前8根蜡烛。double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)] 。如果图表周期被设置为H1以外的其他内容,最后两行就不能正常工作。为什么?因为机器人已经被明确分配了一个计算周期...例如,如果你把H4放在图表上,机器人将使用H4蜡烛进行重新平衡(其他时间段也是如此)。 [删除] 2016.03.08 07:18 #10220 Dikons:谢谢你,同志...我的大脑已经完全沸腾了......我在编程方面有一个重大的突破--我已经忘记了很多我所知道的一点东西......---还有一个问题...按终端搜索一天中最大/最小前8小时的片段。int h=TimeHour(TimeCurrent()); //找出当前的终端小时(0...23) if (h<8) return(0); //如果没有一天中前8根蜡烛的H1 = leave... double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // 确定一天中最大的前8根蜡烛。double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)] 。如果图表周期被设置为H1以外的其他内容,最后两行就不能正常工作。为什么?因为机器人已经被明确分配了一个计算周期...例如,如果你把H4放在图表上,机器人将使用H4蜡烛进行重新平衡(其他时间段也是如此)。这里你可以得到最大/最小条数:iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)然后你插入例如第2条,得到:High[2],在另一个时间框架上你会得到一个与H1不同的值。阅读关于高。iHigh(NULL,PERIOD_H1, iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)) 1...101510161017101810191020102110221023102410251026102710281029...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
或者让我问一个更简单的问题。
在OnCalculate()函数 中,插入了一个循环,所以它只经过一次迭代,下一次迭代只在图形被更新时进行....。
或者让我问一个更简单的问题。
在OnCalculate()函数中,插入了一个循环,所以它只经过一次迭代,下一次迭代只在图形被更新时进行....。
非常感谢您!它的工作原理很奇怪,我有管理权限,特别是对于终端文件夹,我把所有的破坏都给了所有者,这很有帮助,但后来就不工作了。然后试图用FileReadStrArrayW(如果我没有记错名字的话)读取日志文件的空行,脚本在ansi模式下挂起。只有FileReadCharArr能够读取安氏代码。也许你有一些如何用你的库解析日志文件的例子?我将非常感激!
是的,现在阅读日志时有一个问题。以前是比较容易的。
问题是,文件本身是ANSI编码的,但现在的字符串是UNICODE。
这里是这样的脚本工程。
但是,只有当日志文件首先以UNICODE格式保存时,它才会起作用。
也就是说,库的工作是正确的。我们需要想一个简单的方法,将文件的ANSI编码转换为UNICODE字符串数组,或者我应该在库中添加一个函数,在读取文件时转换字符串的编码。
=====================选项1:你不需要处理数组。读取整个文件为ANSI,转换为UNICODE,然后用MQL进行解析。
变体2。以ANSI方式读取,将其写入终端的当前目录,并使用CSV文件的MQL函数读取它。
选择3。使用同一库中的函数在沙盒中创建一个符号 链接到日志文件,并使用处理CSV文件的MQL函数来读取它。
在我看来,这是最美好和最简单的选择。
我正试图编写一个通道指标。我计算了用于在图表上绘图的数值,并将它们放入双tob[]和双tos[]数组中,但当我试图将它们连接到用于在图表上绘图的缓冲区时--在第25和26行。
,这些数组代替了所需的值,例如。
0/1.424/1.3679
1/1.42/1.3639
被填上数字2147483647,像这样。
0/2147483647/2147483647
1/2147483647/2147483647
2/2147483647/2147483647
这怎么能治好呢?
帮我找一个MT4的模板,把白天和黑夜分开。
比方说,从00:00到8:00的图表是一种颜色,从8:00到00:00是另一种颜色。
向大家问好。
面对这个问题。
一个机器人代码的片段。
int per=Period();
if(per = 60)
{
Print("如果句号不是H1,这一行不应该出现在日志中")。
评论(...)。
...// 这里是机器人的身体
...
...
}
意味着如果在图表上启用了H1以外的周期,机器人主体、Print(...)行和屏幕上的Comment(...)都不会被执行。
然而,一切都在任何时期执行。为什么?
如何正确书写,即如果图表上的周期与指定的不一致--将控制权返回给终端。(顺便说一下,我试过RETURN(0)--无济于事--仍然打印一切...)
向大家问好。
面对这个问题。
机器人代码片段。
int per=Period()。
如果(per = 60)
{
Print("如果时期不是H1 - 这一行不应该出现在日志中")。
评论(...)。
...//然后是机器人的身体
...
...
}
意味着如果图表中H1以外的周期被启用,机器人的主体、Print(...)字符串以及屏幕上的Comment(...)都不会被执行。
然而,一切都在任何时期执行。为什么?
如何正确注册,如果时间框架与设定的不一致--将控制权返回给终端。(顺便说一下,我试过RETURN(0)--它不起作用--仍然打印一切...)
你在做赋值,而你需要比较 if(per== 60)
谢谢你,同志...我的大脑已经完全沸腾了......我在编程方面有一个重大的突破--我已经忘记了很多我所知道的一点东西......
---
还有一个问题...按终端搜索一天中最大/最小前8小时的片段。
int h=TimeHour(TimeCurrent()); //找出当前的终端小时(0...23)
if (h<8) return(0); //如果没有一天中前8根蜡烛的H1 = leave...
double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // 确定一天中最大的前8根蜡烛。
double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)] 。
如果图表周期被设置为H1以外的其他内容,最后两行就不能正常工作。为什么?因为机器人已经被明确分配了一个计算周期...
例如,如果你把H4放在图表上,机器人将使用H4蜡烛进行重新平衡(其他时间段也是如此)。
谢谢你,同志...我的大脑已经完全沸腾了......我在编程方面有一个重大的突破--我已经忘记了很多我所知道的一点东西......
---
还有一个问题...按终端搜索一天中最大/最小前8小时的片段。
int h=TimeHour(TimeCurrent()); //找出当前的终端小时(0...23)
if (h<8) return(0); //如果没有一天中前8根蜡烛的H1 = leave...
double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // 确定一天中最大的前8根蜡烛。
double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)] 。
如果图表周期被设置为H1以外的其他内容,最后两行就不能正常工作。为什么?因为机器人已经被明确分配了一个计算周期...
例如,如果你把H4放在图表上,机器人将使用H4蜡烛进行重新平衡(其他时间段也是如此)。
这里你可以得到最大/最小条数:iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)
然后你插入例如第2条,得到:High[2],在另一个时间框架上你会得到一个与H1不同的值。阅读关于高。
iHigh(NULL,PERIOD_H1, iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7))