初学者的问题 MQL4 MT4 MetaTrader 4 - 页 21

 
bablusut:

谢谢你的答复...因此,为了搜索交易历史中的订单,我们使用函数OrdersHistoryTotal,在丢弃所有我们不需要的东西后,它看起来像这样

for(int i=OrdersHistoryTotal()-1; i>=0; i--) // -这里的问题是 "accTotal " 在我们丢弃的函数模板中是什么意思,为什么你把 "i--" ,而不是像模板中的"i++"
- 第二个函数OrderComment 返回所选订单的评论,如果它被前一个函数OrdersHistoryTotal 选中,其形式为

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- 其中 "i", 这是 之前函数中的"i>=0",而 "SELECT_BY_TICKET "被替换为 "SELECT_BY_POS" ,并增加了 "MODE_HISTORY"-- 为什么?

- 第三行是定义,我们实际上不需要检查必要的订单,因为我们在这个历史中只有被TP和SL关闭的市场订单(我们可能有一个关闭的挂单,但这将是罕见的),所有其他订单参数对我们来说并不重要。唯一重要的是历史上已关闭的订单数量将不断增加,是否有可能使我们的重新计算采取一定数量的最后订单,例如5-10个,而不是所有的?

- 最后四行非常清楚,唯一的问题是关于PlaySound函数,它的代码应该插入每个"Print("..." ) "行之后,像这样



OrderComment 返回所选订单的评论,如果它被之前的函数OrdersHistoryTotal 选中- 这个函数不选择任何东西 - 它返回关闭和删除的订单总数(当前账户历史中关闭和删除的订单数量,加载在客户端历史列表的大小取决于终端的 "账户历史 "标签的当前设置。引自该教程)。


教程中的例子中的accTotal。

int i,accTotal=OrdersHistoryTotal(); - 这是一个int变量-取值OrdersHistoryTotal
for(i=0;i<accTotal;i++)//如何循环浏览历史列表并不重要,从第一个订单到最后一个订单或反之亦然,它仍然按顺序浏览整个列表。

但在前面的情况下,我们少了一个变量,但每个周期都会处理 OrdersHistoryTotal 请求。

SELECT_BY_POS - 索引参数包含列表中订单的索引号,列表本身是第二个运算符 -MODE_HISTORY 是已关闭的列表,MODE_TRADES - 开放或待定 SELECT_BY_TICKET - 在索引参数中传递票号。这应该在选择订单前的某个地方进行。


-

最后四行大致清楚,唯一的问题是关于PlaySound函数,其代码应插入每个 "Print("... "

行之后,

形式如下

bool PlaySound(

string payment // file name

)

; ..

.

或者也是以某种方式转换的?

程序头 声明

bool PlaySound(--你会得到在设定文件中打开和关闭声音的可能性extern bool Play = TRUE;

那么Print会打印什么?那么在什么条件下呢?

这一行动的意义何在?当订单被关闭时播放声音,并写下评论(通过TP或SL)?






 
bablusut:
感谢维塔利-波斯托拉奇 的帮助,感谢他的建议,这些教科书上的信息对我来说可能有点晚了,我在第六个十年中学习,可能做不了这么多,我应该早点做,但没有时间我在这里真的很无聊,如果这样的话,对不起,我不会再继续了,我要走了。
我宁愿有一个单独的主题,我希望它能像这样工作。例如,我有兴趣看到不同的选择,也想了解从逻辑的角度来看,哪种选择更正确。
 

顺便说一下,我也有一个问题。

我需要写一张传播支票。

我一直在使用一个简单的请求,要求它的值,并禁止在点差超过指定值时开立订单。

但发生的情况是,当点差减少时,EA开出订单,点差增加。

现在我找不到正确的方法来考虑这个问题:如果我们在每一个tick都 把点差加入数组,那么数组会变得多大?话说回来,它能持续多久呢?

当然,我们可能不使用类似的值,或只使用较小和较大的值,但在这种情况下,我们必须以某种方式将其重置为零。

最重要的是,我不明白我是否应该考虑到最小和最大的价差或其跳跃的指示。
 
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
你能告诉我将保存什么价差值吗?酒吧开业之初的状态?
 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
你能告诉我哪个值的Spread将被保存吗?是指酒吧开业之初的状态吗?

int spread;// spread

即没有

 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
你能告诉我将保存什么价差值吗?是指酒吧开业之初的状态吗?
如果要求的是当前栏,那么就是当前的价差,如果来自历史,那么就是收盘时的价差。
 
Vitalie Postolache:
如果你要求的是当前的条形图,那么就是当前的价差,如果是从历史上看,那么就是在收盘时。
谢谢你。
 

我没有理解错,要向数组写数据,你需要给每个单元格分配一个不同的值 array1[i] = x; 表示一个特定的单元格编号

还是可以从i=0开始依次填充数组?

 
A1exPit:

我没有理解错,要向数组写数据,你需要给每个单元格分配一个不同的值 array1[i] = x; 表示一个特定的单元格编号

还是可以从i=0开始依次填充数组?

在我看来,这只是两种不同的方式。
 
Renat Akhtyamov:
有什么区别呢? 我认为这只是两条不同的道路。
我的意思是,当你向数组传递数据时,它将按顺序填充自己,即array1[] = x;如果没有明确指定单元格号,x的值将被写到哪个单元格?