Uma pergunta para os especialistas em MQL - página 13

 

Por que o código no laço não funciona

enquanto(!IsStopped())

{

código

Dormir(50);

}

mas, por carrapatos, funciona bem

 
seka-s79:

Por que o código no laço não funciona

Por que a galinha não atravessa a estrada
 

А! Consegui! Obrigado!!!

 

Problema com Symbol() MT4:

2 funções a ilustrar:

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);

}

A execução da primeira produz um fio vazio:

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

Mas a segunda função produz uma string ID "EURUSD" (bem, depende do gráfico, mas produz, embora de acordo com a lógica da função deva ser uma string vazia):

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

Ajudar-me a entender o que está errado? Obrigado

 
anton.veksler:

Problema com Symbol() MT4:

2 funções a ilustrar:

A execução da primeira produz um fio vazio:

Mas a segunda função produz uma string ID "EURUSD" (bem, depende do gráfico, mas produz, embora de acordo com a lógica da função deva ser uma string vazia):

Ajudar-me a entender o que está errado? Obrigado

Seu if(falso) nunca funcionará, então o valor não mudará de forma alguma, e muito provavelmente será um fio vazio. Embora eu não saiba como são iniciados os valores das variáveis de string. Talvez eles não sejam iniciados de forma alguma, então em sua versão qualquer coisa pode ser produzida.
 
Sepulca:
Seu if(falso) nunca funcionará, então o valor não mudará de forma alguma, e muito provavelmente será um fio vazio. Embora eu não saiba como são iniciados os valores das variáveis de string. Talvez eles não sejam iniciados de forma alguma, então em sua versão qualquer coisa pode ser produzida.

"...Se nenhum valor inicial for definido explicitamente, uma variável numérica é inicializada a zero (0) e uma variável string é inicializada para esvaziar a string....".
 
zoritch:
"...Se nenhum valor inicial for definido explicitamente, uma variável numérica é inicializada a zero (0) e uma variável de string é inicializada para a string vazia....".



Aí está, você até já encontrou na documentação também... Mas em geral uma pergunta d...n... Para não incomodar, não é tão difícil de digitar:

string   value;

algo como isto:

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



Aí está, você até encontrou na documentação... Mas, de modo geral, é uma pergunta idiota. Não é muito difícil digitar em seu lugar:

algo como isto:


Obrigado por responder. Sobre a documentação, eu sei que sem inicialização explícita, a variável string será uma string vazia, mas esta função retorna um código de caractere da ferramenta. Isto é, nunca entraremos em uma condição (intencionalmente falsa), então como o valor se torna Símbolo() nesta variante (este exemplo da função é exagerado), ou seja, com inicialização implícita a variável string não é uma string vazia (e eu realmente contei com ela), mas algo pouco claro, ou melhor, o mecanismo de inicialização implícita da string não é claro. "Rechear" a declaração variável não é difícil, é apenas o comportamento do sistema fora da documentação que de alguma forma é confuso. E o mais importante, isto acontece quando você usa Symbol().


string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}
 

Boa tarde a todos!

Escrevi um consultor especializado em arbitragem. O sinal de entrada é gerado - se a divergência atual das linhas de preço do indicador DELTA_MA exceder o valor do DELTA definido nos parâmetros:

//жжжжжжжжжжжжжжжжжжжжжжж Ищем возможность войти в рынок жжжжжжжжжжжжжжжжжжжжжжжж
// Задаем ценовые линии МА на 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;

O EA funciona bem e corretamente! Os problemas começaram quando eu quis inserir um filtro que permite a entrada somente se a primeira condição for cumprida - a convergência das linhas de preços ao mesmo tempo:

extern double       ДЕЛЬТА = 350;

extern string  ____F____  = "=== FILTER ===";
 extern bool     FILTER_= true; //Арбитр. вход реализуется только при схождении линий
O algoritmo para tal condição é implementado da seguinte forma