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

 
Valeriy Yastremskiy:

谢谢你。我会试一试的。我不知道这是否会起作用)。

 
我有开放和关闭的订单。
1.当打开一个订单时,我需要把它的票据写到一个数组中,如果数组未被占用(可能=0),这样我就可以在以后的超限时间内从它那里得到报告。
2.在订单关闭后(可以不关闭),应开始报告关闭订单的利润。当达到一定的利润时,即:利润+止盈>=一个未平仓订单(让我们称之为123号订单)的利润,比其他订单早开或以最大的损失(我还没有决定)。
3.如果条件得到满足。"利润之和+塔卡利润>=未平仓订单的利润(让我们称为订单123)",订单123被关闭,阵列被清零(可能变成=0)。

1.当你放置一个EA时,你是否已经有了你想要考虑的开仓和平仓的订单,EA总是在没有开仓的情况下启动,不考虑已经平仓的开仓订单?

2.这一点都不清楚。你有几个订单,当一个订单被关闭时,总的利润被计算出来,并且有被关闭订单的利润数据。还有就是关于没有关闭的订单的利润数据;你可以计算它们。什么是与什么相比。例如,我们有3个订单。1是关闭的,2是正在关闭的,3是打开的。我们有Pr1、Pr2和估计的Pr3配置文件。我们将我们所拥有的与什么相比较。我们理解,当订单没有关闭时,我们没有考虑到佣金和掉期。

3.实际上,如果你用票子将数组归零,接下来会发生什么?市场订单将保留在市场中。你将如何关闭它们?

 
Oksana_Timakova:
问题:我如何保持高位a 和低位b 的值,以便用指标线连接它们?
我是否需要为此额外创建两个数组?
是的。 缓冲阵列。
 
Valeriy Yastremskiy:
是的。 缓冲阵列。
因此,这与ZigZag中的情况相同。而你必须应用一些特殊的功能才能不画两个?
 
Oksana_Timakova:
所以,结果就像在ZigZag中一样。而你必须应用一些特殊的功能才能不画两个?
线路类型是一样的。我不明白什么是不会画的。你声明了2个缓冲区数组。你设置属性。这是线条的类型,厚度颜色。而你从时间序列中按条分配第一个价格高点和第二个低点。
 
Valeriy Yastremskiy:

1.当你放置一个EA时,你是否已经有了你想考虑的开仓和平仓的订单,而每次EA启动时都没有开仓订单,也不考虑之前的平仓订单?

2.这一点都不清楚。你有几个订单,当一个订单被关闭时,总的利润被计算出来,并且有被关闭订单的利润数据。还有就是关于没有关闭的订单的利润数据;你可以计算它们。什么是与什么相比。例如,我们有3个订单。1是关闭的,2是正在关闭的,3是打开的。我们有概况Pr1、Pr2和估计的Pr3。我们将什么与什么进行比较。我们理解,当订单没有关闭时,我们没有考虑到佣金和掉期。

3.实际上,如果你用票子将数组归零,接下来会发生什么?市场订单将保留在市场中。你如何关闭它们?

再一次))))

我们有未结订单,我们假设有5个订单都是负数。第一个(123)的0.5手已经落入负数。我们开了一个0.1手的新订单(456),这个订单的票据在开仓时被写入数组。然后,我们继续进行另一系列相同手数的订单;我们获得一些利润,也失去一些。但123号订单仍然是消极的、开放的。一旦456号订单(它也被关闭)之后的所有关闭订单的利润高于123号订单的利润,我们就找到123号订单,因为它是第一个仍然开放的订单,关闭它并将数组清零。

如果我们有几个未平仓的订单,在一定条件下我们再开一个。假设如果 ordertotal>=5

订单结束(第456号票)

,如果订单被成功打开

如果阵列未被占用

票456被写入数组中

456号订单在盈利时关闭(不管盈利或亏损),之后其他订单被打开和关闭,但数组存储了456号票。


CalCloseProfi () - 该函数检查已关闭订单的利润。

从票据456(从数组中取出)的订单开始,按魔法、买入、卖出的方式查看已关闭的订单,并计算其利润。


FirstOrder() - 该函数搜索第一个未平仓订单(它应该找到123)。

如果CalCloseProfi 配置文件>FirstOrder,那么就关闭订单123,并将数组归零,这样当条件满足时,它就能再次写入那里


我不知道还能怎么解释)

在什么条件下执行这个函数,我可以写,但我没有面对数组。
我需要一个例子,如何获得数组中的信息,即OrederTicket打开时的信息,以及之后如何获得它。
最好使用一个双数组,并将魔术师写在其中的一个部分,这样当在一个账户上工作时,不同的设置就不会混合(也许不是,我对数组不擅长)。

预先感谢

 
makssub:

再一次))))

我们有未结订单,我们假设有5个,都是负数。最早的一个(123),0.5手,是负面的。我们开了一个0.1手的新订单(456),这个订单的票据在开仓时被写入数组。然后,我们继续进行另一系列相同手数的订单;我们获得一些利润,也失去一些。但123号订单仍然是消极的、开放的。一旦456号订单(它也被关闭)之后的所有关闭订单的利润高于123号订单的利润,我们就找到123号订单,因为它是第一个仍然开放的订单,关闭它并将数组清零。

如果我们有几个未平仓的订单,在一定条件下我们再开一个。假设如果 ordertotal>=5

订单结束(第456号票)

,如果订单被成功打开

如果阵列未被占用

票456被写入数组中

456号订单在盈利时关闭(不管盈利或亏损),之后其他订单被打开和关闭,但数组存储了456号票。


CalCloseProfi () - 该函数检查已关闭订单的利润。

从票据456(从数组中取出)的订单开始,按魔法、买入、卖出的方式查看已关闭的订单,并计算其利润。


FirstOrder() - 该函数搜索第一个未平仓订单(它应该找到123)。

如果CalCloseProfi 配置文件>FirstOrder,那么就关闭订单123,并将数组归零,这样当条件满足时,它就能再次写入那里


我不知道还能怎么解释)

在什么条件下执行这个函数,我可以写,但我没有面对数组。
我需要一个例子,如何获得数组中的信息,即OrederTicket打开时的信息,以及之后如何获得它。
最好使用一个双数组,并将魔术师写在其中的一个部分,这样当在一个账户上工作时,不同的设置就不会混合(也许不是,我不擅长数组)。

预先感谢

写出这些函数的条件。
 

下午好。你能告诉我为什么会出现错误:'.......'中的数组超出了范围(152,41)


ticket = OrderSend (Symbol(, OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
if (ticket <1)
{
Print("Sell open error");
}
if (ticket >1 &&SaveTick[1] <= 0&& SaveTick[0] == Magic)
{
FindTicket();
Print(" Ticket order:", FindTicket(), " Order Array: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int oldticket;
int tick=0;
ticket=0;
ArrayResize( SaveTick, 2 ) ;
for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket >ticket)
{
ticket = oldticket;
tick = OrderTicket();
SaveTick[1] = tick;
SaveTick[0] = Magic;
}
}
}
}
return(tick);
}

 
makssub #:

下午好。你能告诉我为什么会出现错误:'.......'中的数组超出了范围(152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
            if (ticket <1)
            {
               Print("Ошибка открытия на продажу");
            }
               if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
            {
               FindTicket();
               Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
    }

int FindTicket()
   {
   int oldticket;
   int tick=0;
   ticket=0;
   ArrayResize( SaveTick, 2 );
   for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
      {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
            if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[1] = tick;
               SaveTick[0] = Magic;
               }
            }
         }
      }
   return(tick);
  }              

正确插入代码,alt S或通过图标,提示代码。

为什么需要SaveTick 数组

你只用了数组中的2个元素。如果你在函数中声明它们,就用全局变量或静态变量代替它们。

用一个数组来表示2个变量是不理智的。

而且你似乎在调用FindTick() 函数之前调用了数组,在那里SaveTick 数组的大小被设置。而且有一个超限的阵列。

 
它是否已经停止工作🤖?