Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 494

 
Nickolay72:
Até ontem, a minha EA só abriu uma encomenda cada e a seguinte só abrirá quando eu fizer uma encomenda. Agora, como fazer a minha EA abrir encomendas quando o bar anterior tiver aberto acima (abaixo) do canal?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Se analisar este fragmento de código, então, de acordo com este código, se a funçãoCountTrades() devolver zero, a condição se (CountTrades()==0) CheckForOpen()será executada, e a funçãoCheckForOpen() será chamada.Na marcação seguinte, se a ordem tiver sido aberta, a funçãoCountTrades() deve retornar 1, e então a outra condição é cumprida

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Se aparecer que CountTrades()<max_trades, a funçãoCheckForOpen() será executada mais uma vez.De acordo com o código, o valor da variável max_trades é igual a 3. Assim, terá 4 encomendas em aberto.

Se a EA não abrir as ordens correctamente, então verifique a lógica, na qual define as condições em que as posições devem ser abertas na função CheckForOpen(). E também verificar as condições de tempo se (CurrTime < EaStartTime || CurrTime >= EaEndTime). Se eu fosse a si, utilizaria a função se (TimeHour(TimeCurrent())) = hora de início && TimeMinute(TimeCurrent()) = minutos de início ). A hora e os minutos são definidos em variáveis de tipo int ou uint.

 
Artyom Trishkin:
Se o Open Bar Number 1 estiver acima/abaixo do canal.
Raios, acabei de ver que tenho uma troca em torno do limite inferior do canal, apenas copiei as ordens e não corrigi a parte de baixo para cima, vou tentar a versão corrigida).
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

Assim, terá 4 encomendas em aberto.

Se a EA não abrir as ordens correctamente, então verifique a lógica, onde especifica as condições em que as posições devem ser abertas na função CheckForOpen(). E também verificar as condições de tempo se (CurrTime < EaStartTime || CurrTime >= EaEndTime). Se eu fosse a si, utilizaria a função se (TimeHour(TimeCurrent())) = hora de início && TimeMinute(TimeCurrent()) = minutos de início ). A hora e o minuto são definidos em variáveis de tipo int ou uint.

Eu queria abrir 3 encomendas, mas não era isto que pretendia; queria até três, mas uma encomenda por cada bar novo.

Não há problema com o tempo, funciona num período de tempo estritamente especificado.

 
Nickolay72:

Queria até três encomendas, mas uma encomenda para cada nova barra. Há alturas em que várias barras seguidas dão sinais positivos.

Não há problema com o tempo, funciona num período de tempo estritamente especificado.

A condição: se a barra da última abertura de posição não for igual a zero e o número de posições abertas for inferior ao máximo permitido, então uma nova posição pode ser aberta.
 

Karputov 2016.01.13_05:14AM. Olá Sr. Karputov! Escrevi em MQL4

ficheiro .mq4, obteve o ficheiro .ex4. Mas não funciona no testador de estratégias. Final

era escrever um EA para o MT4. Na MQL5, tenho .mq5 e

.ex5 ficheiros. E o ficheiro .ex5 abriu comércios. A quarta versão é diferente de

A quarta versão tem algumas diferenças em relação à quinta, e eu ainda não sou um bom programador de MQL, por isso obtive maus resultados.

Não compreendi o que está errado agora, o ficheiro de registo do testador foi guardado. Я

Vou tentar traduzi-lo. Entretanto, peço-lhe que me diga

o que há de errado com o código do programa? Enquanto você responde, vou tentar

para o descobrir.
Fiquei surpreendido por encontrar na minha quarta versão do editor a opção de escrever

Estava prestes a escrevê-lo. Mas não fui eu que o escrevi. Estou a anexar

ficheiros de registo do testador e uma imagem de ecrã. 05:30 MSC. Diário do tesoureiroKarputovKarputov

Arquivos anexados:
20160112.log  7 kb
 
Николай Никитюк:

2016.01.13_05:14H, HORA DE MOSCOVO. Olá Sr. Karputov! Escrevi em MQL4

ficheiro .mq4, recebi um ficheiro .ex4. Mas não funciona no testador de estratégias.

Porque colou o código como uma imagem? )) Quem os compreenderá?
 
Николай Никитюк:


Por favor insira o seu código correctamente no post:Insira o código correctamente no fórum
 

Onde posso encontrar descrições de erros?

Não compreendo o que o compilador não gosta, porque é que me avisa?

verificar a precedência do operador para possíveis erros; usar parênteses para esclarecer a precedência


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

e aqui

a expressão não tem efeito


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

Onde posso encontrar descrições de erros?

Não compreendo o que o compilador não gosta, porque é que ele me avisa?

Na verdade, para além do texto de erro, o compilador também lhe diz o número da linha de código onde se encontra o erro e a posição na linha.
 
Karputov Vladimir:
Na verdade, para além do texto de erro, o compilador também reporta o número da linha de código onde o erro é encontrado e a sua posição na linha.
Isto é assim - no primeiro caso nos sinais de comparação, por sua vez - aparentemente entre "ou" deve colocar um parêntese, e no segundo caso é amaldiçoado no parêntese em que a expressão lógica está escrita.
Razão: