任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 2

 
gyfto:


我有以下问题。在init()中有一个块,它挂起了终端(这是我想转移到dll的东西)。当然,日志是不能被查看的--终端只能通过Ctrl+Alt+Delete关闭。为了追踪而取消打印(以及测量进入块的循环的传输时间)并没有帮助--打印机没有写任何东西,甚至没有创建日志。我尝试使用FileOpen/FileWrite,目的相同--文件刚刚被创建(0 Kb),而且没有声音。我把FileWrite放在FileOpen之后,在下一行 - 没有效果。我应该往哪边挖?

尝试使用这个。如果没有帮助,为了搜索错误,你可以暂时把提到的初始化块放到启动中,通过标志进行一次性启动,并尝试从其中 "拉 "出日志。
 
gyfto:


该主题已被关闭...坏人。

我有以下问题。在init()中有一个块,它挂起了终端(这是我想转移到dll的东西)。当然,日志是不能被查看的--终端只能通过Ctrl+Alt+Delete关闭。为了追踪而取消打印(以及测量传入环路的传输时间)并没有帮助--打印机没有写任何东西,甚至没有创建日志。我尝试使用FileOpen/FileWrite,目的相同--文件刚刚被创建(0 Kb),而且没有声音。我把FileWrite放在FileOpen之后,在下一行 - 没有效果。挖掘的方向是什么?


看,有没有隐藏在属性中的?


这并不隐蔽。
 
TarasBY:
试试用这个。如果这没有帮助,为了寻找错误,你可以暂时把提到的初始化块通过一个标志进入启动,进行一次性启动,并尝试从它那里 "拉 "出日志。


start和ininit中的一次性启动都不起作用--Print和FileWrite都不起作用。我把这段代码附在后面(我没有看到其他的出路),我不打算在这里发布,因为它太长了。我已经删除了所有的缓冲区声明,并在那里描述了内置技术指标的所有调用。我已经考虑过数组的内存溢出问题,我计算过,最大的数组加上所有其他的数组是50.5米。那么,如果在进入区块时,即使在第一行也不打印...- 这就是困扰我的问题。附带的版本是真实的FileWrite。
附加的文件:
eflfcaj.mq4  10 kb
 
gyfto:

启动时的一次性启动和ininit都不起作用--打印和FileWrite都不起作用。我附上这段代码(我没有看到其他的出路),我不在这里粘贴,因为它太长了。我已经删除了所有的缓冲区声明,并在那里描述了内置技术指标的所有调用。我已经考虑过数组的内存溢出问题,我计算过,最大的数组加上所有其他的数组是50.5米。那么,如果在进入区块时,即使在第一行也不打印...- 这就是困扰我的问题。附带的版本是真实的FileWrite。

代码的风格并没有处置它。没有空格,不同层次的括号,连续的几个操作,没有评论......。恶梦!:-))

你自己明白吗?

 
帮助解决一个关于MT4的问题。调用自定义指标 时,其输入参数和窗口中的颜色不显示(快速闪烁后消失)。如何解决这个问题?重新安装了MT4,没有帮助。
 
gyfto:


他结束了这个话题...不是一个好男人。


= :)
 
gyfto:

一次性启动和初始启动都不起作用--打印也不起作用,FileWrite也不起作用。我附上这段代码(我没有看到其他的出路),我不在这里粘贴,因为它太长了。我已经删除了所有的缓冲区声明,并在那里描述了内置技术指标的所有调用。我已经考虑过数组的内存溢出问题,我计算过,最大的数组加上所有其他的数组是50.5米。那么,如果在进入区块时,即使在第一行也不打印...- 这就是困扰我的问题。附带的版本是真实的FileWrite。

我同意Vadim的观点--代码很难阅读。试着将这段代码分解成功能块,在每个块中打印或写入文件。并以 "减慢 "代码执行速度的结构运行,例如,像这样。

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

将下一个区块的执行时间推迟1秒。- 终端应该有足够的时间来打印日志。

 
 

在Kim的 "最后的位置关闭标志由STOP "和另一个由TAKE "有2个非常相似的功能。

这里是代码

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}

如你所见,它们非常相似。

但由于某些原因,只有 通过STOP关闭才 对我有效。

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

它可以工作,但我的专家顾问不打印UNIT,而是一直打印NULL。

但在STOP处的收盘打印正确:如果停止=1,如果不停止=0....

请帮助我,....

 
lottamer:

在Kim的 "最后的位置关闭标志由STOP "和另一个由TAKE "有2个非常相似的功能。

这里是代码

如你所见,它们非常相似。

但由于某些原因,只有通过STOP关闭才对我有效。

我手动开仓,放空TAKE。它工作 - 但EA不打印UNIT,而是继续打印ZERO。

但在STOP处的收盘打印正确:如果停止=1,如果不停止=0....

请帮助我理解这个问题,....


仔细看看止损单在开仓时 的价格是多少,到底以什么价格关闭。Igor的函数比较了这些准确的价格,但没有考虑滑点。