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

 

continuação da pergunta:

O algoritmo para tal condição é implementado da seguinte forma: aqui está o próprio filtro:

//================фильтр   - начало схождения ===================
 if (FILTER_ ) { //если выключатель   фильтра включен
//------------------------------------------------ 
//задаем вычисление ценовых линий на втором   баре
double  MA_11= (iMA(Symbol_1,Period(),per2,0,ma_method,Price,2)-
                iMA(Symbol_1,Period(),per1,0,ma_method,Price,2)) ;  
double  MA_21= (iMA(Symbol_2,Period(),per2,0,ma_method,Price,2)-
                iMA(Symbol_2,Period(),per1,0,ma_method,Price,2))  ;    
double ДЕЛЬТА_MA_2 = MathAbs(MA_11 - MA_21);//разность между ценовыми линиями на 2 баре
//
if (ДЕЛЬТА_MA_2 >=  ДЕЛЬТА_MA) // если линии начинают сходится, разрешаем вход
       Trade_Filter2=true;       else Trade_Filter2=false; 
//-------------------------------------------------                 
         }  // выключатель   фильтра включен
//================== конец блока 2-го фильтра ======================

E aqui está a própria condição de entrada:

if  ( TradeDOWN==true  && .... ) {            //если условия соответствуют заданным 
if (Trade_Filter2==true || ! FILTER_ ) {       //  фильтр включен/выключен  
 ..... открвываем позиции: продаем первый инструмент и покупаем второй    

Mas o Expert Advisor parece não ver a condição do filtro! Abre posições como antes, sem prestar atenção a

if (Trade_Filter2===true ||| ! FILTER_ ) { .....

Não entendo por que. Abertura de posições online repetidamente monitorada. Mas o filtro não funciona! O Consultor Especialista não o vê. Por favor, diga-me onde está errado ?

E outra pergunta. Qual é a forma correta de definir em variáveis globais (é a primeira opção no momento)

bool Trade_Filter2=0; ou apenas bool Trade_Filter2;

 
Rita:

a continuação da pergunta:

...

Saída MA_11, MA_21, DELTA_MA_2 em Coment() e veja o que está lá. Comentário() inserido após a dupla DELTA_MA_2...

O MACD está sendo comparado a partir de dois caracteres diferentes, eles podem ter dimensões muito diferentes.

 

Há um comentário a fazer. O comentário é definido como "Filtro permite (ou nega) a entrada"), assim:

Feito desta maneira:

string on_off=StringConcatenate  (on_off,
"1-й(текущий)инстр.=",Symbol_1," 2-й инстр.=",Symbol_2," ",.....
"ДельтаТекущая/ДельтаЗаданная = ", ДЕЛЬТА_MA," / ",ДЕЛЬТА, "\n", 
 "MA_1 ",Symbol_1, "= ", MA_1 , "\n",
 "MA_2 ",Symbol_2, "= ", MA_2 , "\n",

 //--------------------------------------------------------------------------------

if (Trade_Filter2==true && FILTER_==true )  
        string  on_off4 = StringConcatenate (on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        string  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        string  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\
Observo visualmente que as linhas ainda divergem e o comentário exibe "Filtro proíbe a entrada"! Mas a entrada ainda está implementada - a EA não presta atenção ao filtro.

A dimensionalidade das ferramentas é a mesma, ou (com dimensionalidade diferente) - programmaticamente reduzida ao mesmo usando coeficientes (isto não é mostrado no código acima, para não desordená-lo)). Tudo bem!

 

Mas o duplo DELTA_MA_2, MA_11, MA_21- são declarados abaixo f-i Comentário()

Mas o Trade_Filter2 é declarado em variáveis globais! Portanto, eu acho que tudo é feito corretamente no comentário!

 
Desabilite seu comentário por um tempo e tente produzi-lo de diferentes lugares. De onde você verifica as condições do filtro até onde você o utiliza. Dessa forma, você encontrará a linha onde ocorre a distorção.
 
OK, obrigado, Dimitri! Vou tentar usar sua recomendação após o fim de semana.
 
Imprima os valores de todos os seus parâmetros em Imprimir e coloque-os imediatamente após o operador de abertura do pedido.
 

Boa tarde. Após a atualização de hoje do mt4, não posso compilar o código EA. Há 30 erros estranhos saindo do compilador.

Você poderia me dizer por que os erros aparecem de repente nas seguintes linhas
código:

if (Trade_Filter2==true && FILTER_==true )  
        string  on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        string  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        string  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\n");       
on_off' - identificador não declarado Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

on_off4' - identificador não declarado Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

on_off41' - identificador não declarado Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

E como corrigi-los?

 
if (Trade_Filter2==true && FILTER_==true )  
 {
  string on_off4;
  on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход", "\n");
 }
if (Trade_Filter2==false && FILTER_==true )  
 {
  string on_off41;
  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
 }
if (FILTER_== false)  
 {
  string on_off42;
  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\n");
 }

Ele se compila assim?

Mas é melhor assim:

string on_off4;
string on_off41;
string on_off42;
if (Trade_Filter2 == true && FILTER_ == true) on_off4 = "Фильтр Разрешает вход\n";
if (Trade_Filter2 == false && FILTER_ == true) on_off41 = "фильтр Запрещает вход\n";
if (FILTER_ == false) on_off42 = "Фильтр Отключен\n";
 
string on_off4, on_off41, on_off42;
if (Trade_Filter2==true && FILTER_==true )  
        on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\n");       

Se eu tiver telepatizado corretamente, isto deve funcionar