Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 249

 

Que tipo de erro é esse, eu o tomo do lado do CD, um mau treino?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

Que tipo de erro é esse, eu o retiro do lado do mau balanço do CD?

128

ERR_TRADE_TIMEOUT

O tempo limite expirou


Pedaço do manipulador:

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

ERR_TRADE_TIMEOUT

Expirou o prazo para a execução do comércio


Pedaço do manipulador:

Tenho esses manipuladores de erros em meu código, mas eles nunca existiram. Hoje decidi verificar meu programa em demonstração de uma corretora popular e me deparei com tais erros pela primeira vez.

Eu entendo corretamente que este é um problema de hardware na corretora e não do meu lado?

 

Por favor, diga-me se esta função está correta. A idéia é calcular se o preço ultrapassou o preço médio durante uma certa quantidade de velas anteriores.

a função não é executada, o resultado deve ser: se não tiver quebrado o returnToMA ==1, se tiver quebrado o returnToMA ==0

talvez haja outra solução para este problema?


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))) {regresso(0);intervalo;}

if (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))) {regresso(0);intervalo;}

senão voltar(1);

}

 
forexpipsrunner:

Por favor, diga-me se esta função está correta. A idéia é calcular se o preço ultrapassou o preço médio durante uma certa quantidade de velas anteriores.

a função não é executada, o resultado deve ser: se não tiver quebrado o returnToMA ==1, se tiver quebrado o returnToMA ==0

Talvez existam outras soluções para este problema?

Sua função sempre terá zero porque o máximo ou mínimo é sempre maior/menos do que ou igual ao MA.

O castiçal deve ser descrito por pelo menos dois parâmetros em seu caso:

1) Definir onde o castiçal se abriu - acima ou abaixo do MA

2. Dependendo de 1, verifique se o MA foi tocado.

 
-Aleks-:

Você sempre terá zero na função - já que o máximo ou mínimo é sempre maior/menos do que ou igual ao MA.

O castiçal deve ser descrito por pelo menos dois parâmetros em seu caso:

1. determinar onde o castiçal se abriu - acima ou abaixo do MA

2. Dependendo de 1, verifique se o MA foi tocado.

Obrigado. Eu adicionei a condição, mas ela sempre retorna 1. Posso mudar os parênteses em algum lugar? Ou quebrar não funciona e a função termina atribuindo 1 ao valor de retorno


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)))

{regresso(0);intervalo;}

if ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)))

{regresso(0);intervalo;}

mais retorno(1);

}

 
forexpipsrunner:

Obrigado. Eu adicionei a condição, mas ela sempre retorna 1. Posso mudar os parênteses em algum lugar? Ou quebrar não funciona e a função termina atribuindo 1 ao valor de retorno


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)))

{regresso(0);intervalo;}

if ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)))

{regresso(0);intervalo;}

mais retorno(1);

}


Tente assim

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

Ele retornará 1 se a condição for cumprida - houve um cruzamento - não é isso que queremos?

 
-Aleks-:

Tente isto

Ele retornará 1 se a condição for cumprida - houve um cruzamento - não é isso que queremos?

Obrigado, funciona como um relógio com sua versão do código
 
forexpipsrunner:
Obrigado, funciona como um relógio com sua versão do código

Fico feliz por ter sido útil.
 

Boa tarde!

Rapazes, vocês podem me dizer se podem programar o indicador no gráfico? Ou apenas manualmente?

Em caso afirmativo, qual comando é dado?