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

 
Pavel Nikiforov:
请解释问题出在哪里。该函数应该是查看所有未结头寸,并计算出具有给定魔法数字的头寸数量。事实上,它只从另一个具有相同票据和Magik的EA所打开的列表中挑选一个,因此计数总是=0。

我自己想明白了,选择必须通过PositionGetSymbol 来完成。

//+------------------------------------------------------------------+
int OpenPositions()//проверка открытых позиций по Magic number 
  {
   int count=0;
     for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
     {
       if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
        {
         Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
        }
      long  ticket = PositionGetInteger(POSITION_TICKET);
            Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
      ulong myMN=PositionGetInteger(POSITION_MAGIC);
            Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
      if(myMN==Magic)
            count++;
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

我自己想明白了,必须用PositionGetSymbol 进行选择。

没有很好地想清楚。你必须使用PositionGetTicket(i)函数在hadge账户上进行选择,然后检查符号和Magik。

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。
 
Alexey Viktorov:

想明白了就不好了。你必须用PositionGetTicket(i)函数在hadge账户上进行选择,然后检查符号和Magik。

是的,这样就好了,其他功能在演示中也有故障,但现在可以了。

 

你好,你能就这个指标给我建议吗?https://www.mql5.com/ru/forum/94447#comment_6780067

当价格急剧变化时,即价格变化4个点或更多时,它在图表上画上红色和蓝色的圆圈。

我需要这些信号只在价格变化10个点或更多时才出现。

附加的文件:
1.png  48 kb
 
yesterday35:

你好,你能就这个指标给我建议吗?https://www.mql5.com/ru/forum/94447#comment_6780067

当价格急剧变化时,即价格变化4个点或更多时,它在图表上画上红色和蓝色的圆圈。

我希望这些信号只在价格变化10点或更多时才出现。

这个指标计算的不是点数,而是西格玛或RMS(均方根偏差)。在最后N个刻度的样本上(默认为50)。它建立了一个3西格玛的通道。如果价格已经跳出了通道,它将标记这个地方。但主要问题是最初的价格序列没有正态分布,尾巴非常重。事实上,这个指标是一个玩具帮助。

 

你好。

我在写一个小程序。我面对的是一个完全无法理解的情况。

在我的代码中,有这两行。它们在OnTester()的最末端,不在循环中。

Print("Мат ожидание ставки  ",MatOgidanieStavk(KKef,VVer,Stavka)," Ставка ",Stavka);
Print("Ставка =",Stavka);

这里是执行这些行的一个意外结果。

Мат ожидание ставки  447.0461599959392 Ставка -1.0
Ставка =3912.820000338397

以下是MatOgidanieStavk 函数的定义

double MatOgidanieStavk(double Kef,double Ver,double &BestStavka)
{
 .......... 
   BestStavka=-1;// Первое обращении к этой переменой.
............
return MatOgidanie;
}
 
pivomoe:

你好。

我在写一个小程序。我面对的是一个完全无法理解的情况。

在我的代码中,有这两行。它们在OnTester()的最末端,不在循环中。

这里是执行这些行的一个意外结果。

以下是MatOgidanieStavk 函数的定义

Stavka在打印前被初始化?

如何确定该调用是函数中的第一个?

你期望的结果是什么?

 

谢谢你。我解决了这个问题。

线索原来是打印前的变量Stavka。等于-1。它的值被传递到Print函数 中,并作为副本保存。我的函数MatOgidanieStavk改变了Stavka变量本身,而不是其将打印的副本

 
应该是这样的。

2795/2797将是0,因为没有进行四舍五入。要么s3 = (double)s2/s1; 要么为s2和s1选择double

原因: