//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- неправильный способ открытия файлаstringterminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
stringfilename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
if(filehandle<0)
{
Print("Неудачная попытка открыть файл по абсолютному пути");
Print("Код ошибки ",GetLastError());
}
//--- правильный способ работы в "файловой песочнице"ResetLastError();
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
FileClose(filehandle);
Print("FileOpen OK");
}
elsePrint("Операция FileOpen неудачна, ошибка ",GetLastError());
//--- еще один пример с созданием вложенной директории в MQL5\Files\string subfolder="Research";
filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period));
FileClose(filehandle);
Print("Файл должен быть создан в папке "+terminal_data_path+"\\"+subfolder);
}
elsePrint("Операция FileOpen неудачна, ошибка ",GetLastError());
}
[in] Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in] значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...
我将在哪里使用它?
整个想法是,假设我在"...\MQL5\Files\00\dir_01 "地址有需要处理的文件的目录,使用你美妙的代码,我在一个数组中得到这些文件夹的路径,并想访问这些文件,确切地知道我需要处理哪些文件,我需要设置这些文件的路径,例如 "MQL5\Files\00\dir_01\A\test."。csv",而代码返回 "MQL5\Files\00\dir_01\A\",所以我在问我是否可以修改它,以返回适用于进一步代码的最佳路径。
我将在哪里使用它?
整个想法是,假设我在"...\MQL5\Files\00\dir_01 "地址有需要处理的文件的目录,使用你美妙的代码,我在一个数组中得到这些文件夹的路径,并想访问这些文件,确切地知道我需要处理哪些文件,我需要设置这些文件的路径,例如 "MQL5\Files\00\dir_01\A\test."。csv",代码返回 "MQL5\Files\00\dir_01\A\",我在问它是否可以被修改,以便返回适用于进一步代码的最佳路径。
你只是不明白什么是双斜线--它是一个字符,在语法中用两个表示:第一个斜线命令,第二个斜线什么。
\n、r、t、"、"和""是由这个规则设置的字符。也就是说,路径中总是有一个斜线。
你只是不明白什么是双斜线--它是一个字符,在语法上由两个表示:第一个斜线命令,第二个斜线什么。
\n、r、t、"、"和""是由这个规则设定的字符。也就是说,路径中总是有一条斜线。
我不排除我错过了什么,但我需要两个斜线来生成文件路径,而不是一个。
我不排除我误解了什么,但我需要两个斜线来生成文件路径,而不是一个。
你不需要两个斜线。
尝试将 一个、两个或三个斜线打印 到日志中。也许那时你会明白。你不需要两个斜线。
尝试将一个、两个或三个斜线打印到日志中。也许那时你会明白。是的,我明白斜线是一个命令,但我需要写路径,我用双斜线来写。
这里是路径。
我在数组Folders[0]中得到一个字符串。
00\dir_01\A\
我想通过改变数组的索引 来访问一个同名但在不同目录下的文件。
但这个命令会得到一个错误,不是吗?
那是一种浪费。
你好!
我正试图从MQL4切换到MQL5,但我无法找到最后的关闭位置。
在MQL5中,当我们发送订单时,它是一个订单,当它被打开时,它就变成了一个头寸,从逻辑上讲,它应该被放在头寸历史中,被删除的挂单 应该被放在订单历史中,但我看到的只是交易中的订单历史,所以我不知道在哪里可以找到一个关闭的头寸。
我试过这种方式。
但它显示的是开仓和平仓的数字。ORDER_TYPE总是显示4,这也不清楚。
我试着把ORDER改为DEAL,但它也不起作用。
请帮助我,什么是错的?
弗拉基米尔,谢谢你。我已经熟悉了CSymbolInfo 类中的RefreshRates 函数 。我在你的作品中看到过它,也在一本初级读物中读到过它。
在OnTick 中调用这个函数和 在Comment 中输出价格值,我从这个例子中也很清楚。OnInit 中检查当前符号 的程序对我来说也很清楚。
在等待新栏的例子的同时,我将尝试用你的例子进行一些实践,我还没有在实践中使用它。我将尝试一下。
所以,这个例子只在一个新条形物诞生的时刻起作用。
这个例子使用静态变量PrevBars、prev_ask 和prev_bid。静态变量的本质是。
用static关键字声明的局部变量 在函数 的生命周期 内保留其值。在函数的每次后续调用中,这些局部变量都包含它们在前一次调用中的值。
因此,我们的三个静态变量(PrevBars、prev_ask 和prev_bid)是在OnTick函数中声明的局部变量,它们存储的是它们之前进入OnTick函数时的值。
PrevBars 存储的是前一个条形图的时间。这个时间与当前条形图的时间time_0 进行比较。只要PrevBars 等于time_0,我们就处于当前的bar,并退出OnTick函数。储存前一栏价格的变量也是如此:我们首先显示前一栏和当前价格,然后将当前价格写进变量prev_ask 和prev_bid 。
关于交易、自动交易系统和策略测试的论坛
初学者的常见问题 MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2018.12.05 00:39
我知道这是一个斜线命令,但我需要写出路径。
下面是路径,比方说
我在Folders[0]数组中得到一个字符串。
00\dir_01\A\
我想通过改变数组索引 来访问一个同名但在不同目录下的文件。
但这个命令会得到一个错误,不是吗?
不会有错误。你仍然没有搞清楚什么是双斜线。
是的,我明白斜线是一个命令,但我需要写路径,我用双斜线来写。
例如,这里的路径是
我在数组Folders[0]中得到一个字符串。
我想通过改变数组索引 来访问一个同名但在不同目录下的文件。
但这个命令会得到一个错误,不是吗?
阿列克谢,以文件中的一个例子为例
并打印示例代码中强调的两个字符串变量。找出差异,了解双斜线只写在程序代码中,但在编译时只留下一个,在文件路径中使用一个。