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
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;
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.
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 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.
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?
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
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.
Se o Open Bar Number 1 estiver acima/abaixo do canal.
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.
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.
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.


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.
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;
}
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 reporta o número da linha de código onde o erro é encontrado e a sua posição na linha.