[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 434

 
zorber:

大家好。

我下了一个挂单(创建时间,如11:31)。
然后这个订单在12:01触发

问题:如果订单已经进入市场,而OrderOpenTime( )函数返回进入市场的时间,我如何知道挂单的日期和时间。

有没有人知道如何解决这个问题?

预先感谢你。


在MT4的订单列表中,没有办法。

一种方法是记住放置的时间

 
Roger:
现在是你了解文本文件的时候了,它是如何组织的,它包括哪些内容。在每读完一行后,解印光标位置,使用
intFileTell( int handle)
它将立即变得清晰。

讽刺的是,我上面提出的问题是由一个几乎与你的建议相对应的情况引发的......

为了了解FileIsEnding和FileIsLineEnding函数是如何工作的,我写了以下脚本。

//+------------------------------------------------------------------------------------------+
//|                                                                   Конец_Строки_Файла.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
#property show_inputs                                                    //выводим перед запуском скрипта окно свойств
extern int  position=0;                                                  //внешняя переменная: смещение файлового указателя ОТ НАЧАЛА ФАЙЛА (в БАЙТАХ)
//---------------------------------------------------------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   string name="Копия Запись чисел в файл.csv";                          //имя создаваемого файла
   bool h;                                                               //переменная: значение функции FileIsEnding
   bool h_l;                                                             //переменная: значение функции FileIsLineEnding
   int error;                                                            //переменная: ошибка
   int handle=FileOpen(name,FILE_CSV|FILE_WRITE,';');                    //открываем заданный файл n записываем туда данные
   int запись=FileWrite(handle,DoubleToStr(1.3584,4));                   //записываем число в файл csv (в преобразованном виде, т.е в виде текста)
   FileClose(handle);                                                    //закрываем файл
//---------------------------------------------------------------------------------------- 2 -
   handle=FileOpen(name,FILE_CSV|FILE_READ,';');                         //открываем заданный файл
   bool pos=FileSeek(handle,position,SEEK_SET);                          //смещаем от начала вправо указатель файла
   double чтение=FileReadNumber(handle);                                 //считываем число из текущей позиции (уже измененной функцией FileSeek) файлового указателя
   int size=FileSize(handle);                                            //вычисляем размер заданного файла
   h=FileIsEnding(handle);                                               //устанавливаем текущее значение переменной h
   h_l=FileIsLineEnding(handle);                                         //устанавливаем текущее значение переменной h_l
   error=GetLastError();                                                 //значение ошибки, производимой функцией FileIsEnding
   if(error!=0)Alert("Текущая ошибка ",error);                           //если код текущей ошибки не равен 0, то получаем номер текущей ошибки
   FileClose(handle);                                                    //закрываем файл
//----------------------------------------------------------------------------------------- 3 -
   Comment("Размер файла ",name," составил ",size," байт",
           "\nФункция FileSeek вернула: ",pos,
           "\nФункция FileReadNumber(handle) вернула: ",чтение,
           "\nФункция FileIsLineEnding(handle) вернула: ",h_l,
           "\nФункция FileIsEnding(handle) вернула: ",h,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 4 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 5 -

在第1-2块中,我打开并将数字1.3584写进文件(DoubleToStr函数将其转换为文本)。

在第3-4块中,我打开了文件并读取了写在那里的数字。

extern int position外部变量应该是使用FileTell 函数来移动文件指针,以尝试了解 FileIsEnding和FileIsLineEnding函数是如何工作 的,以及文件指针是什么。

MQL4.community 书中说,文件指针是文本光标的类似物。

但是,运行该脚本数次,每次将外部变量postiton增加1(也就是说,从而将文件指针移到文件开头的右边1个字节),Comment函数会输出一些信息,例如

如果postiton=7,信息将看起来像这样。

如果postiton=7,信息将看起来像这样。


我明白,由于字符串常数在PC内存中占8个字节,而文件中只有1个转换后的数字,将文件指针向右移动8个字节会给我带来4099的错误(这意味着已经到达文件的末端)。我还了解到,FileIsEnding函数返回1(真)的原因也是如此(达到了文件终点)。但我不明白为什么FileIsLineEnding函数 返回0(假的,这意味着文件指针没有到达行的末端)。毕竟,根据MQL书中给出的类比(文件指针与文本游标大致相同),我推断,文件的结束也是字符串的结束。但考虑到当文件指针到达文件末端时,FileIsEnding和FileIsLineEnding有不同的值,我在 "什么是文件指针 "方面感到困惑。但由于我必须从某个地方开始问起,所以我按照第433页上的内容问了这个问题。

因此,我有一个巨大的请求,希望你能清除我那被加热的大脑,并回答以下问题(或至少有一个能帮助我理解其余问题的问题)。

1.我对文件指针的理解有什么问题(我在第433页的帖子中给出的问题)?

2.这句话的意思是 "如果指定的检查(第5-6块的最后2行)被删除,那么在运行将创建一个额外的对象只有在这之后 while 循环的结束条件才会被触发,控制权才会被转移到8-9块"(问题在我第433页的帖子中给出)。

3.为什么FileIsLineEnding在到达文件末端时返回0而不是1。

P.S. 为了不给论坛添乱,提前感谢您的回答。

 

祝大家有美好的时光

请告诉我如何画一条水平线((出价+要价)/2+0.00333):)

 

下午好!

先生们,该怎么做?

移动电脑无法看到网络,"没有通信"。

 
Ragen:

下午好!

先生们,该怎么做?

移动电脑无法看到网络,"没有通信"。


创建一个新的演示。旧的演示一定是由于时间限制而被删除了。
 
sergeev:

为自己创建一个新的演示。旧的演示一定是由于截止日期而被删除了 。

我不是用模拟账户,是三个真实账户

但都是来自同一个Dtz,这有什么影响吗?

 
Ragen:

我不是用模拟账户,是三个真实账户。

但是,所有这些都来自于同一个Dtz,这能影响到什么吗?


:) 好吧,给经纪公司打电话。这与MQL编程论坛有什么关系?
 
sergeev:

这与MQL编程论坛有什么关系?

出于某种原因,终端机立即 "滚动 "起来 :)

我正在处理!

 

专业人士,请指教。如果我有一个挂起的止损单,但价格已经进入它的扩展价差,超过了止损....。将会发生什么?

该命令将由传播者吃...还是会发生错误,订单不会被触发?

 

同事们,最详细的建议是什么?

我有一个挂单 X

如何在挂单创建的N小时后关闭订单?

一个额外的条件:挂单可能成为市场订单。

在挂单仍未完成的情况下,一切都很简单。

挂单变成市价单的情况很有趣(即当挂单变成市价单的时候,创建它的时间也会改变)。

我想从专业人士那里得到解决这个问题的想法,更好的是,我想得到这种情况的代码