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

 
admoon:



当一步步检查指标时,我发现在if {}后面的子程序中有一个弹跳,而且其中没有W。下面是一个简化的代码,以澄清这一点。

//----输入参数

输入int w=10。

//---

{

int i;

//---

int co=0。

for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}

//---为下一次调用返回prev_calculated的值

return(rate_total)。

}

结果(arlet)。

2016.05.30 00:45:14.064 1 (EurusD,H1) 11

2016.05.30 01:10:35.972 1 (Eurusd,H1) 10

........... 等至1。

2016.05.30 00:45:14.064 1 (Eurusd,H1) 1

规则:如果括号中的表达式为真,则执行运算符1。

在代码中:operator1始终被执行。

我认为if()应该只在括号内的条件为真时工作一次。但实际上它是在每次检查时发生的,所以{}中的所有表达式在每一步都被执行,并啃噬机器时间。

问题:为什么在循环过程中,CO变量从0增长到11?为什么每一步都会触发警报?

我得告诉你多少次?

看:你有w等于10,
你检查w是否为10:"if(w==10){co++;Alert(co);}" 你认为这个表达式是真的吗?
那么你为什么会有这个问题呢?

 
admoon:



当一步步检查指标时,我发现在if {}后面的子程序中有一个反弹的触发器,其中没有W。这里有一个简化的代码来澄清这个问题。

//----输入参数

输入int w=10。

//---

{

int i;

//---

int co=0。

for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}

//---为下一次调用返回prev_calculated的值

return(rate_total)。

}

结果(arlet)。

2016.05.30 00:45:14.064 1 (EurusD,H1) 11

2016.05.30 01:10:35.972 1 (Eurusd,H1) 10

........... 等至1。

2016.05.30 00:45:14.064 1 (Eurusd,H1) 1

规则:如果括号中的表达式为真,则执行运算符1。

在代码中:operator1始终被执行。

我认为if()应该只在括号内的条件为真时工作一次。但实际上它是在每次检查时发生的,所以{}中的所有表达式在每一步都被执行,并啃噬机器时间。

问题:为什么在循环过程中,CO变量从0增长到11?为什么每一步都会触发警报?

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

Andrey Barinov, 2016.05.30 10:38

显然,你的代码中有一个错字,想这样写。

int i;
//---
   int co=0;
   for(i=0;i<=w;i++)
     {
      if(i==10)
        {
         co++; 
         Alert(co);
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);

 
先生们好!我在编写EA 时遇到了一个小问题((EA开立挂单基本没问题,但有时我需要开立非常接近当前价格的订单,那么如何规定挂单会开得尽可能接近?
 
barudkinarseniy:
先生们好!我在编写EA时 遇到了一个小问题((EA开立挂单大多是正确的,但有时我需要开立非常接近当前价格的订单,那么如何规定将开立尽可能接近的挂单?
我想我得到了)如果有人感兴趣,这里是它的工作原理
 double ilow = iLow(Symbol(),TimeFrames_3,1);
 double ihigh = iHigh(Symbol(),TimeFrames_3,1);
 
 double OpenPriceBuy = NormalizeDouble(MathMax(ihigh,Ask + Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)),Digits);
 double OpenPriceSell = NormalizeDouble(MathMin(ilow,Bid - Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)),Digits);
 
 int StepST = (int)MathMax(OpenPriceBuy - OpenPriceSell,SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL));
 double lots = LotsByRisk(StepST);
 
Artyom Trishkin:

我得告诉你多少次?

看:你有w等于10,
你检查w是否等于10:"if(w==10){co++; Alert(co);}" 你认为这个表达式是真的吗?
那么你为什么会有这个问题呢?

我为这个愚蠢的问题道歉,感谢你的耐心和理解。我被机械地移动探头if(w==10){Alert(I,"/",F); 通过程序寻找错误的步骤,让我失望了。当你遇到自己无知的原因时,有时会发生这种情况,但一旦你站在问题之外一段时间,问题就会自己消失。你所认为的 "刺耳",实际上是节目的另一部分提出的一个未说明的要求。谢谢,弗拉基米尔。

 

你好,请问你能帮我解答一下数学问题吗?

如果你知道第一个位置的手数,而且每一个新位置的手数都是以算术级数增加的,那么如何知道第五个位置的手数是多少呢?

第二个选择是,地段随着几何级数 的增加而增加。

 
mila.com:

你好,请问你能帮我解答一下数学问题吗?

如果你知道第一个位置的手数,而且每一个新位置的手数都是以算术级数增加的,那么如何知道第五个位置的手数是多少呢?

第二个选择是,地段随着几何级数的增加而增加。

你被谷歌禁言了吗?对不起,你为什么这么残忍?))

算术级数是由一个公式定义的。

几何级数 是由公式给出的

 

我不明白,对于第一种变体来说,只要将第一批货物乘以5就可以了,如果增加了起始批次

对于第二个选项:第一个位置的地段*乘数*5 ...但

 
mila.com:

我不明白,从理论上讲,对于第一个选项,你只需要将第一个批次乘以5就可以了。

对于第二个选项,第一个位置的地段*系数*5...但

没关系,我自己从学校开始就忘了数学了 ))我翻出一本关于数学的书,重新打出arith的定义。

-------------

一串数字,从第二个开始,每一个都是通过增加一个常数d从前一个得到的,称为算术级数的差。

如果第一项是a1,那么长度为n的arith.prog.的形式是:。

a1, a1+d, a1+2*d, ...., a1 + n*d

MQL中的代码是这样的,我创建了一个简单的例子

#define  LEN 5 // задали длину последовательности

int start()
{
    int d = 4;    // это разность, любое значение
    int a[LEN];   // тут храним ариф. посл.
    a[0] = 3;     // любое стартовое значение, задаете сами
    Print(0, "  ", a[0]);

    for (int n = 1; n < 4; n++)
    {
       a[n] = a[0] + (n*d);
       Print(n, "  ", a[n]);
    }
}

2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 3  15
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 2  11
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 1  7
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 0  3
 
Alexey Volchanskiy:

没关系,我自己从学校开始就忘记了数学 ))

我先去散步,然后写几何 程序的代码。