初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1076

 

如何在一行中读取一个大文件?

FileReadString()

当从bin-file读取时,必须指定要读取的字符串的长度。当从txt文件中读取时,不需要字符串的长度,字符串将从当前位置读到换行字符"\r\n"。当从csv文件中读取时,字符串的长度也不是必需的,字符串将从当前位置开始读取,直到最近的分隔符或文本字符串的结束符为止。

整个文件的唯一标志是FILE_BIN,但在MQL5中,与MQL4不同,它被限制在4095字节。我还能如何从文件中获取一行大的文本?
 
Сергей Таболин:

我不是这个意思。

"而用逻辑NOT来解决--反转位,但我没有终端-- 我不 记得如何 在MQL中做位操作NOT,我也不想看在线帮助"。

我的意思是,要么给我一个证据,要么就不要把水搅浑))))。

"任何人都可能犯错。只有强者才能承认错误!"。如果还没有人发表意见,这就是我的智慧)))。如果有人已经说过--我已经重复了一位智者的智慧))))。

我还是不明白你的说法?你是在暗示我应该向你证明什么?- 为什么?))))

在这里,我通过NOT重现,并检查了所有讨论的变体。

void OnStart()
  {
//---
   uint TForiginal=OBJ_PERIOD_M1|OBJ_PERIOD_M2|OBJ_PERIOD_M3|OBJ_PERIOD_M4|OBJ_PERIOD_M5|OBJ_PERIOD_M6|OBJ_PERIOD_M10|
                   OBJ_PERIOD_M12|OBJ_PERIOD_M15|OBJ_PERIOD_M20|OBJ_PERIOD_M30|OBJ_PERIOD_H1;

   uint TFwithNOT=(~OBJ_PERIOD_H1&OBJ_PERIOD_H2)-1;
   uint TFwithShift=OBJ_ALL_PERIODS>>9;
   Print("TForiginal = ",TForiginal);
   Print("TFwithNOT = ",TFwithNOT);
   Print("TFwithShift = ",TFwithShift);
  }
//+------------------------------------------------------------------+

NOT变体适用于任何TF,但根据(~TF_以下我们显示&TF_一比所需TF大)-1来填充。

 

大家好!还有一个问题...

有一个MQL5程序,它有一个 "输入参数 "的设置(很多)。该程序根据需要进行计算并创建/删除和管理图形对象。

从设置窗口改变输入参数后,产生事件Init,这导致程序初始化和 "重新计算 "和 "重新绘制 "对象,原则上这是需要的,但当图表周期改变(和其他)时,事件Init也会产生 ,结果是每次都重复这个过程,即使不需要它。

问题:如果输入参数没有改变,但在程序(终端)开始时留下初始化我如何在 Init事件中排除程序 初始化

可能的变体:记住设定的值,并在 Init事件发生时进行比较,如果它们不同,允许初始化,但有很多输入参数......

 
Anzhela Sityaeva:

大家好!还有一个问题...

有一个MQL5程序,它有一个 "输入参数 "的设置(很多)。该程序根据需要进行计算并创建/删除和管理图形对象。

从设置窗口改变输入参数后,事件 Init被生成,这导致了程序初始化和 "重新计算 "和 "重新绘制 "对象,原则上,这是需要的,但是当图表周期改变时(和其他) 事件Init也被生成 ,结果是这个过程每次都在重复,即使不需要。

问题:如果输入参数没有改变,但在程序(终端)开始时留下初始化我如何在 Init事件中排除程序 初始化

可能的变体:记住设定的值,当事件 Init发生时,比较它们,如果它们不同,允许初始化,但有很多输入参数......

这里有一些关于另一个类似问题的提示

关于交易、自动交易系统和策略测试的论坛

在EA中工作,但在指标中不正确,指标启动时有音乐。

Ihor Herasko, 2019.06.17 14:12

是的。

  1. 当指标启动时,它会创建一个全局 终端变量。比如--我被启动了。
  2. 播放问候语。
  3. 卸载时(在OnDeinit中检查),全局终端变量被删除。
  4. 如果在操作过程中,TF被改变或参数被改变,那么在OnInit退出时,终端的全局变量被检查。如果是这样,那么就不播放问候语。如果没有,就会播放问候语。

 
Alexey Viktorov:

这里有一些关于另一个类似问题的提示



谢谢你的回答,看来在我们的案例中,我们将不得不通过图上的 "空白 " 描述 几十个对应关系的变化状态,以跟踪它们的变化,或者只要没有太多的对象,就得忍受不必要的初始化......
 
Anzhela Sityaeva:
谢谢你的回答,看来在我们的案例中,我们将不得不通过图上的 "空白 " 描述 几十个对应关系的变化状态,以跟踪它们的变化,或者只要没有那么多的对象,就忍受不必要的初始化......

但你问的问题是。

安热拉-斯蒂亚耶娃

大家好!还有一个问题...

有一个MQL5程序,它有设置(很多)"输入参数"。该程序根据需要进行计算并创建/删除和管理图形对象。

从设置窗口改变输入参数后,产生事件Init,这导致程序初始化和 "重新计算 "和 "重新绘制 "对象,原则上这是需要的,但当图表周期 (和其他)改变时, 事件Init 会产生 ,结果是每次都重复这个过程,即使不需要

问题:如果输入参数没有改变,但在程序(终端)开始时留下初始化我如何在 Init事件中排除程序 初始化

可能的变体:记住设定的值,当事件 Init发生时,比较它们,如果它们不同,允许初始化,但有很多输入参数......

而在你的情况下,其中一个提示将防止这些不必要的对象重绘。如果这些对象在OnDeinit()中被删除,你应该在切换图表时也禁止删除这些对象。

这是一个关于交易、自动交易系统和策略测试的论坛。

如何在图表关闭时删除终端的全局变量?

Alexey Viktorov, 2019.06.29 08:40

请注意这个表格

理论_计划

0

专家通过调用ExpertRemove()停止工作

REASON_REMOVE

1

从图表中删除的程序

原因_重新编译

2

程序重新编译

原因_图表变化

3

图表符号或周期已被改变

原因_chartclose

4

该图表已关闭

原因_参数

5

输入参数被用户改变

REASON_ACCOUNT

6

另一个账户被激活或重新连接到交易服务器,因为账户设置被改变了

原因_模板

7

应用了另一个图表模板

拒绝接受的原因

8

OnInit()处理程序返回一个非零值

解释_关闭

9

终点站已关闭


并在你的代码的这一行

   if(reason==1) GlobalVariableDel("val");

但是,如果我没有记错的话,你的问题的开头,最好是这样写条件

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

但在你的问题中,它是

在你的情况下,这些提示之一将防止这些不必要的对象重绘。如果这些对象在OnDeinit()中被删除,那么在切换图表时,你也应该禁止删除这些对象。


方向很明确,让我们试一试......。谢谢你的答复。
[删除]  
我没有在Codebase中找到一个 可以设置收盘条件的EA例子,而不仅仅是标准的SL/TP。谁能给我一个提示?
 
Sprut112:
我没有在Codebase中找到一个 可以设置收盘条件的EA例子,而不仅仅是标准的SL/TP。谁能给我一个提示?

开启和关闭条件之间的区别是什么?

 
Sprut112:
我在Codebase中没有发现一个EA的例子,可以写出一个头寸的平仓条件,而不仅仅是标准的SL/TP。谁能告诉我?

弗拉基米尔-卡尔普托夫在他的代码中有这样的条件,但你必须自己学会如何阅读他的代码)