给MQL专家的一个问题 - 页 13

 

为什么循环中的代码不起作用

while(!IsStopped())

{

编码

睡眠(50)。

}

但通过刻度,它工作得很好

 
seka-s79:

为什么循环中的代码不起作用

鸡为什么不跑过马路
 

А!知道了!谢谢你!!!。

 

MT4的Symbol() 问题。

2个功能来说明。

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

执行第一个命令会输出一个空字符串。

int start()
{
   Comment(SymbolOK());
   return(0);
}

但第二个函数输出一个字符串ID "EURUSD"(嗯,取决于图表,但输出,尽管根据函数的逻辑,它应该是一个空字符串)。

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

帮助我了解什么是错的?谢谢你

 
anton.veksler:

MT4的Symbol()问题。

2个功能来说明。

执行第一个命令会输出一个空字符串。

但第二个函数输出一个字符串ID "EURUSD"(嗯,取决于图表,但输出,尽管根据函数的逻辑,它应该是一个空字符串)。

帮助我了解什么是错的?谢谢你

你的if(false)永远不会起作用,所以值不会有任何变化,而且很可能是一个空字符串。虽然我不知道字符串变量的值是如何启动的。也许它们根本就没有被启动,那么在你的版本中,任何东西都可以被输出。
 
Sepulca:
你的if(false)永远不会起作用,所以值不会有任何变化,而且很可能是一个空字符串。虽然我不知道字符串变量的值是如何启动的。也许它们根本就没有被启动,那么在你的版本中,任何东西都可以被输出。

"......如果没有明确设置初始值,数字变量被初始化为零(0),字符串变量被初始化为空字符串...."。
 
zoritch:
"......如果没有明确设置初始值,数字变量被初始化为零(0),字符串变量被初始化为空字符串...."



就这样,你甚至在文档中也发现了它......但一般来说,这是一个......不......的问题。不用麻烦了,打字反而不是那么难。

string   value;

类似这样的事情。

string   value="ЭтоСтрокаПокаЕёЕщёНиктоНеТрогал";
 
Sepulca:



你去了,你甚至在文档中找到了它...但一般来说,这是个愚蠢的问题。代替打字并不难。

类似这样的事情。


谢谢你的回答。关于文档,我知道如果没有明确的初始化,字符串变量将是一个空字符串,但这个函数返回一个工具的字符代码。即我们永远不会进入一个条件(故意为假),所以在这个变体中,值如何变成Symbol()(这个函数的例子很夸张),也就是说,在隐式初始化的情况下,字符串变量不是一个空字符串(我真的指望它),而是一些不清楚的东西,或者说隐式字符串初始化的机制不清楚。"塞进 "变量声明 并不难,只是系统在文档之外的行为让人有些困惑。而最重要的是,当你使用Symbol()时,就会发生这种情况。


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

大家下午好!

我已经写了一个套利专家顾问。如果DELTA_MA 指标的 价格线 的当前分歧超过参数中设定的DELTA 值,则产生进入信号。

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 1-м баре
  MA_1=   (iMA(Symbol_1,Period(),per2,0,ma_method,Price,1)-
           iMA(Symbol_1,Period(),per1,0,ma_method,Price,1)) ;  
  MA_2= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,1)-
         iMA(Symbol_2,Period(),per1,0,ma_method,Price,1))   ;                 
 ДЕЛЬТА_MA  =   MathAbs(MA_1 - MA_2 ) ; //- разность ценовых линий на 1 баре        
//------------------------------------------------ 

if (ДЕЛЬТА_MA > ДЕЛЬТА && MA_1 > MA_2)//если линии разошлись больше заданного значения
       //(первыя выше второй), то продаем 1-й инструмент и покупаем/продаем второй 
      TradeDOWN=true;       else TradeDOWN=false;

该EA工作正常且正确!当我想插入一个过滤器,只有在满足第一个条件--价格线同时收敛的情况下才允许进入,问题就开始了。

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
这种条件下的算法实现如下