变量不断重置为初始声明值

问题描述

想知道是否有人能够指出我在这里做错了什么。

仅供参考,我对 MQL4(或根本没有编码)非常陌生

我编写了以下代码来充当虚拟追踪止损。

我正在尝试根据以下循环锁定 HH(最高价)和 LL(最低价)。但是,当我打印时,看起来 HH 和 LL 都在每次报价时重置为买入价和卖出价,而不是“锁定”。

我有三个问题:

  1. 我做错了什么?!
  2. HH 和 LL 是否会因为变量的声明位置而不断重置为零?
  3. 每个订单的 HH 和 LL 是否都是唯一的?如果没有,有没有办法设置?

(~现在只是占位符 - 可以忽略,我会更正)

非常感谢!

double      HH = 0;
double      LL = 0;
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[90][2];
for (int i = 0; i < orderstotal; i++)
{
     if (!OrderSelect(i,SELECT_BY_POS,MODE_TradES)) continue;
     if (OrderSymbol() != Symbol() || OrderMagicNumber() != ~OrderId~)
     {
         continue;
     }
     ordticket[orders][0] = OrderOpenTime();
     ordticket[orders][1] = OrderTicket();
     orders++;
}
if (orders > 1)
{
    ArrayResize(ordticket,orders);
    ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
    if (OrderSelect(ordticket[i][1],SELECT_BY_TICKET) == true)
    {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == ~OrderId~)
        {
            if (Ask > HH)
            {
                HH = Ask;
                Print("Print(HH)=",HH);
            }
            if (Bid < LL)
            {
                LL = Bid;
                Print("Print(LL)=",LL);
            }
            if ((OrderType() == OP_BUY && HH - OrderOpenPrice() > ~TrailingStartGap~*PipValue*Point) ||
                (OrderType() == OP_SELL && OrderOpenPrice() - LL > ~TrailingStartGap~*PipValue*Point))
            {
                if ((OrderType() == OP_BUY && HH - Ask > ~TrailingStop~*PipValue*Point) ||
                    (OrderType() == OP_SELL && Bid - LL > ~TrailingStop~*PipValue*Point))
                {
                   bool ret = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),~Slippage~,~Color~);

                   if (ret == true)
                   {
                        int error = GetLastError();
                        if (ret == false && error > 0)
                        Print("OrderClose() error - ",ErrorDescription(error));
                   }
                }
            }
        }
    }
}

解决方法

tomgyn - 这确实是问题所在,它被放置在 OnTick() 中,因此变量在每个新的滴答声中都会被初始化。

这是一个新手错误,当时我不明白代码会在放置在那里的每个刻度上从上到下运行。

问题已解决。感谢您的指点和编辑 - 非常感谢!

,

OnTick() 函数之外将 HHLL 声明为全局变量,以避免在每次滴答时重新初始化它们。