Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 456

 
Zver4991:

De que depende a qualidade do teste e como posso elevá-la ao máximo?

Confira este site, como testar uma EA com qualidade de simulação de 99%.

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Zhunko:
Isto é assim para o tipo BOOL. Ou seja, para um bool de uma versão mais antiga da MQL4. Isto não é verdade para um único byte bool. Um transbordo ocorrerá se o valor for maior que zero.

Pergunto-me então por que.

   bool b=2;

Compila sem erros ou avisos?

 
artmedia70:

Pergunto-me então por que.

bool b=2;
compila sem erros ou avisos?

O operador da tarefa deve ser sobrecarregado para o tipo bool. Ele monitora o transbordamento e se mais de 1, atribui e retorna verdadeiro.

Em estúdio no nível de alerta 4, freqüentemente há avisos quando se tenta inserir algum tipo ilógico em uma expressão lógica. Ou vice-versa, quando um tipo lógico é usado em operações aritméticas.

 
Zhunko:

O operador da tarefa deve ser sobrecarregado para o tipo bool. Ele monitora o transbordamento e, se maior que 1, atribui e retorna verdadeiro.

Em estúdio no nível de alerta 4, freqüentemente há avisos quando se tenta inserir algum tipo ilógico em uma expressão lógica. Ou vice-versa, quando se aplica um tipo lógico em operações aritméticas.

Seria mais lógico

#property strict

para emitir um aviso e deixá-lo como na versão antiga sem

 
artmedia70:

não é exatamente verdade, mas a essência está correta.

Na verdade: zero corresponde a falso, e qualquer outro valor que não seja zero corresponde a verdadeiro

Sem contar com os padrões, mudo o init para uma variável booleana e depois uso apenas essa variável.
 

Afinal, não sou programador...

Há a conta número 1 - cinco dígitos com um mínimo de lote 0,01 e passo 0,01 (build 584); conta número 2 - 4 dígitos com um mínimo de lote 0,1 e passo 0,1 (build 584) e conta número 3, exatamente o mesmo que o número 2, mas o terminal build 509.

E há uma rede de arrasto stop loss trawl:

void manageStops()
{ 
   string trailSymbol=Symbol();  
   for( int i = OrdersTotal()-1; i >=0 ; i-- ) 
   {
      if ( OrderSelect( i, SELECT_BY_POS ) == true ) 
      {  
         int trailOrderType = OrderType(); 
         if( OrderSymbol() != trailSymbol || trailOrderType > 1 || OrderProfit() < 0 ) continue; 
         double trailStopLoss = OrderStopLoss();   
         while( true ) {
            double trailStop = TrailingStop; 
            int trailDistance = MarketInfo( trailSymbol, MODE_STOPLEVEL ); 
            if( trailStop < trailDistance ) trailStop = trailStop+trailDistance;  
            bool modifyTrailingStop = false;  
            switch( trailOrderType ) 
            {
               case 0 : 
                  if(trailStopLoss < (Bid - (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Bid - TrailingStop * pipPoints,digits);   
                     modifyTrailingStop = true;       
                  }
                  break;    
               case 1 :                      
                  if(trailStopLoss > (Ask + (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Ask + TrailingStop * pipPoints,digits);             
                     modifyTrailingStop = true;             
                  }
               }                               
            if( modifyTrailingStop == false ) break;                       
            double trailTakeProfit = OrderTakeProfit(); 
            double trailPrice = OrderOpenPrice();  
            int trailTicket = OrderTicket();   
            if( ( OrderType() == OP_BUY && trailStopLoss > trailPrice && trailStopLoss < OrderOpenPrice() + ( MaxStop * pipPoints ) ) 
                  || ( OrderType() == OP_SELL && trailStopLoss < trailPrice && trailStopLoss > OrderOpenPrice() - ( MaxStop * pipPoints ) ) )

            OrderModify( trailTicket, trailPrice, trailStopLoss, trailTakeProfit,0);
            break; 
           } 
        }  
     }  
  return;   
} 

Por que em razão do número 1 o stoploss é arrasto normalmente, mas nas contas número 2 e 3 "erro 130"???? Embora a lógica seja subvertida, mas funciona em um caso.

 
evillive:

Afinal, não sou programador...

Há a conta número 1 - cinco dígitos com um mínimo de lote 0,01 e passo 0,01 (build 584); conta número 2 - 4 dígitos com um mínimo de lote 0,1 e passo 0,1 (build 584) e conta número 3, apenas o mesmo que o número 2, apenas o terminal build 509.

E há uma rede de arrasto de arrasto:

Por que parar a perda na conta 1 normalmente, mas as contas 2 e 3 mostram "Erro 130"? Embora a lógica seja subvertida, mas funciona em um caso.


A própria pergunta implica que o problema é uma conta de 5 dígitos ou 4 dígitos. Olhando para o código. Onde está definida a variável pipPoint e o que ela é igual? O mais provável é que seja aí que reside o problema.
 
pro_:

A própria pergunta sugere que a questão é sobre uma contagem de 5 ou 4 dígitos. Estou olhando para o código. Onde está definida a variável pipPoints e o que ela é igual? É mais provável que seja aí que reside o problema.

Eu defini pipPoints = MarketInfo( Symbol(), MODE_POINT) no init;

Aumentei o valor do MaxStop e a rede de arrasto deve mudar em incrementos com incrementos maiores, mas muda em incrementos de 1 ponto, pelo menos começa a arrasto a 4 dígitos... Ainda precisarei modificar a lógica, preciso de passo ajustável.

 
smdm:

Olá!

A questão é a seguinte. Eu tenho um indicador Heiken Ashi Smoothed https://www.mql5.com/ru/code/7930.

Que mudanças devo fazer no código do indicador para poder anexar este indicador em um gráfico de cinco minutos em um período de tempo maior, por exemplo, em um gráfico de trinta minutos ou de uma hora?

Obrigado.


Fiz uma pergunta semelhante - como aplicar um indicador do gráfico semanal ao gráfico H4. martelei em vários fóruns . e aqui também, mas não consegui nada melhor do que prescrever o tamanho de um TF-m grande no código para um menor, ninguém sugeriu. embora se seu indicador tem logística simples e leva para seu cálculo de cálculos de barras simples, é possível. se você pode enviar o código e uma tela no n1 em um estúdio com suas explicações .
 

e assim o indicador deve traçar uma linha vertical na barra em que o preço fecha no meio da barra.....

double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }
и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта... помогите пожалуйста

Razão: