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

 
evillive:

为什么会有一个额外的变量?直接检查的效果很好。

当你想从程序的不同点看到一个函数的值时,应该创建一个变量,这样你就不必多次调用它。
使用该变量是为了让新人更容易理解。现在清楚它的用途了吗?
 
Vinin:
多回来看看。问题会更少。会有更好的知识。
忽略不计。
 

下午好。需要在一天结束时以某种方式平仓(纯粹是专家顾问;日线)。造型的方式有两种,一种是通过开口,一种是通过刻度。也就是说,我们要么满足于开盘,要么试图在一些15分钟的时间框架内分析前几天的情况并抓住当前的开始和结束。对这个问题有什么解决办法吗?我看到了几个虚拟的假设性的选择。

1)黑客攻击- 在任何价格和任何时间关闭头寸。假设不公平,但我们可以简单地在规定的价格上平仓而不变态。

2)模拟一个柱子内的开盘和收盘。也就是说,先是打钩开盘,然后是打钩收盘。

3)设置一个在某个时间(即在一天结束时)自动关闭的订单。

希望得到任何帮助。谢谢你。

 

一个错误?

int OnInit()
  {
   int subwindow = ChartWindowFind(ChartID(),WindowExpertName());
   Print("Подокно запрашиваемого индикатора: ",subwindow);
   
   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }


2015.04.13 20:51:10.710 indi AUDJPY,H1: Requested indicator subframe: -1


 
tuner:

一个错误?


2015.04.13 20:51:10.710 indi AUDJPY,H1: Requested indicator subframe: -1


不,不是一个错误。

返回值。

成功情况下的子窗口编号。零表示主图表窗口。如果失败,则返回-1

 
AlexeyVik:

不,不是一个错误。


如果该函数被传递给正在运行指标的当前图表的ID和正在当前图表上运行的当前指标的名称,会出现什么故障?
 
tuner:
如果该函数传递当前图表的ID,即指标运行的ID,以及当前图表上正在运行的指标的名称,会出现什么故障?

如果我对你的理解是正确的,你需要你所附的指标测试代码在其中工作的子窗口编号,那么,根据该函数 的描述,最好应用其第二个版本。

测试代码(我在你的代码上加了几行)。

#define  LINE    __LINE__,": "
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int subwindow=ChartWindowFind(ChartID(),WindowExpertName());
   Print(LINE,"Подокно запрашиваемого индикатора: ",subwindow);
   
   int subwindow1=ChartWindowFind();
   Print(LINE,"Подокно запрашиваемого индикатора: ",subwindow1);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+

ChartWindowFind() 函数的帮助中,有一个很好的例子还是关于这个问题的(在那里的评论方面也是如此)。

//+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором              |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
  {
   int window=-1;
//--- 
   if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      //--- функция вызвана из индикатора,имя не требуется
      window=ChartWindowFind();
     }
   else
     {
      //--- функция вызвана из эксперта или скрипта
      window=ChartWindowFind(0,short_name);
      if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError());
     }
//---
   return(window);
  }
 
DiPach:

如果我对你的理解是正确的,你需要你所附的指标测试代码在其中工作的子窗口编号,那么,根据该函数 的描述,最好应用其第二个版本。

测试代码(我在你的代码上加了几行)。

ChartWindowFind() 函数的帮助有一个很好的例子,还是关于这个问题的(在那里的评论方面也是如此)。

谢谢你的提示,但我有一个稍微不同的任务,由于这个原因,使用该函数的第二个变体没有意义:我想计算所有打开的终端图表上具有指定名称的指标数量。这个任务已经解决了,但我想用第一种变体的ChartWindowFind() 来简化产生的代码,但结果发现这个函数不仅对其他窗口不起作用,甚至对当前窗口也不起作用。
 

晚上好!

我想不明白:在起始函数中,编译器要求 "返回"--函数必须返回一个值"。

在这种情况下必须返回什么值?

int start()
{
if (Orders!=0||Ord > 0)
{
CritCloseBuy();
CritCloseSell()。
}
else
{
CritOpen();
}
return;
}

这可能是OrderClose()没有看到未结头寸 的原因吗?

 
rapid_minus:

晚上好!

我想不明白:在起始函数中,编译器要求 "返回"--函数必须返回一个值"。

在这种情况下必须返回什么值?

int start()

这可能是OrderClose()没有看到未结头寸的原因吗?

做成void start(),就不会有错误。