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

 
Alexey Kozitsyn:
假设按时间排序的最后一个订单不是列表中的最后一个订单,你的例子是不正确的,因为它没有考虑到最开始的订单(#0)。

首先找到时间上的最后一个订单的票,然后进行修改后的循环。当在循环中遇到先前找到的最后一个订单的票据时,它将被跳过。

为了找到最后一个订单的票据,我们不需要搜索所有订单的所有历史记录--我们可以设置搜索的历史记录的大小--一天、两天、三天、一周......。"并跳过所有带有时间的订单,这比搜索范围早。例如:搜索历史的大小被设置为1天--所有的订单,如果早于当前时间--1 天,就会被跳过。但我们仍然需要这个循环。如果我们只取列表中的最后一个订单,可以是买入,而我们需要卖出。它是最后一个,但也是一个。因此,我们不会得到他的数据。

 
Artyom Trishkin:

首先找到时间上的最后一个订单的票,然后进行修改后的循环。当在循环中遇到先前找到的最后一个订单的票据时,它将被跳过。

要搜索最后一个订单的票据,你不需要运行所有订单的全部历史记录--你可以设置搜索的历史记录的大小--一天、两天、三天、一周......。"并跳过所有带有时间的订单,这比搜索范围早。例如:搜索历史的大小被设置为1天--所有的订单,如果早于当前时间--1 天,就会被跳过。但我们仍然需要这个循环。如果我们只取列表中的最后一个订单,可以是买入,而我们需要卖出。它是最后一个,但也是一个。因此,我们不会得到他的数据。

Artem,当然要感谢你的解释,但我知道如何在列表中找到顺序。而我的回答不是给你的,而是给阿列克谢的例子(特别是">0 "这个条件将不起作用)。

你最好用正确的方式来写(只用代码)。我很懒 :)

 
Alexey Kozitsyn:
如果我们假设最后一个订单不是列表中的最后一个,你的例子是不正确的,因为它没有考虑最开始的订单(订单0)。

怎么可能不呢?

阿列克谢-维克多罗夫

一个额外的变体:在循环之前,在变量_1中写入一张票,例如,零阶的 票,然后

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
我希望我没有搞乱其他东西。
 
Alexey Viktorov:

怎么可能不呢?

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
我希望我没有弄错别的东西,我没有再检查...
如果你把它作为一个启动器,这很好,但最好从最后做起......虽然,如果你不删除订单,也是可以的。
 
Alexey Kozitsyn:
如果你把它作为一个开始的变体,它可以做到,但最好是从最后做起......虽然,如果我们不需要删除订单,我们也会没事的。

事实上,要修改几个订单,你必须在一个循环中浏览它们。因此,事实证明,额外的微秒将只花在比较订单开放时间 上。这将是一个最佳的变体。

循环的方向......。这其实并不重要,因为这与关闭订单无关。我把之前的版本弄混了,写成了 "关闭",所以循环在那里也是对应的......

 

下午好!

我正在尝试写一个指标。我想在视觉上得到我想要的东西,但我想让指标发送所需的信息,例如,文本信息或int类型。考虑到我有10个缓冲区,根据这些缓冲区画线,我怎么做呢?谢谢!

 

下午好,不要踢我,但我发现这个标题,并决定问几个问题...我有一个终端...我下载了一个经纪人的MT4(1)...运行演示...一段时间后,在另一个注册,太

我是提供下载终端......下载(2)的结果,2终端不走......和1出现配置文件2的经纪人......在一般情况下,所有的困惑......然后从二进制来信,他们移动到MT5 ...安装和乍一看,所有比MT4更好。我的问题是,是否可以在一个终端上为不同的经纪商开立账户?我可以把它们全部转移到MT5吗?和如果指标从MT4适合到5?

谢谢...

 

如此积极的帮助,非常感谢。

已经在纠结于一个新问题)

请帮助我找出新的ZigZag 顶点出现的事实。

我试着把第一个顶点的价格存储在一个变量中,然后进行比较,如果价格发生了变化,就提出一个标志,有一个新顶点。
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

但事实证明,随着时间的推移,该函数混乱地返回,然后是第一个顶点的价格,然后是第二个。

事实证明,新的顶部没有形成,旗帜被升起。
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
理想情况下,该函数应该进行调整,使其总是返回第一个顶点的价格,但我对任何解决方案都感到满意。
 
mila.com:

如此积极的帮助,非常感谢。

已经在纠结于一个新问题)

请帮助我找出新的ZigZag 顶点出现的事实。

试图在一个变量中记住第一个顶点的价格,然后进行比较,如果价格发生了变化,就提出一个标志,有一个新顶点。
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

但事实证明,随着时间的推移,该函数混乱地返回,然后是第一个顶点的价格,然后是第二个。

事实证明,没有形成新的顶点,但旗帜被升起。
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
理想情况下,该函数应该进行调整,使其总是返回第一个顶点的价格,但我对任何解决方案都感到满意。

人字形实际上有三个缓冲区--总数为0,1-上端,2-下端。

在零点的时候,一些缓冲区里总是有一个值--要么在第一个缓冲区里(如果膝盖是向上的),要么在第二个缓冲区里(如果它是向下的)。因此,当前蜡烛上的零缓冲区总是有一个值--要么来自第一个缓冲区,要么来自第二个。

那么,为了找到一个明确的上端点,我们应该从第1条开始,寻找第一个缓冲区的第一个非空值。对于下限,我们需要找到第二个缓冲区的第一个非空白值,从第1条开始。

为了知道这是否是一个新的顶部或底部,我们需要记住之前发现的顶部/顶部的时间,并将其与我们迄今为止发现的情况进行比较。

它是漫无边际的,但希望你能理解......

 
有两个MT5终端。问题:我能否编写脚本,允许在一个终端中只做多头交易,在另一个终端中只做空头交易?