Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 287
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
{
double summa=0;
int orders=OrdersHistoryTotal();
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Erro na história!");
break;
}
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
continue;
//---
if(OrderProfit()>0) break;
summa=OrderProfit()+summa;
}
}
Olá. Ajude-me com esta função, ela resume as perdas de ordens fechadas, metatrader crashes quando usada com a função de ordens fechadas, eu acho que há algum tipo de erro nesta função.
É melhor olhar para os já prontos e ajustá-los, se necessário. GetProfitFromDateInCurrency()
Boa tarde. Ajuda com a função por favor, resume a perda de ordens fechadas, quando usado com ordens fechadas a função metatrader crashes, eu acho que há algum tipo de erro nesta função.
O que você quer dizer com " Metatrader crashes"? O programa se compila com erros!!!
Em três lugares ao invés de se com uma pequena letra minúscula, diz Se com uma letra maiúscula
um par de parênteses encaracolados é claramente desnecessário: o primeiro após int orders=OrdersHistoryTotal(); e seu par após summa=OrderProfit()+summa; - mas isto não é importante
há também...
Boa tarde. Ajuda com esta função por favor, ela resume a perda de ordens fechadas, quando usada com a função de ordens fechadas Metatrader crashes, eu acho que há algum tipo de erro nesta função.
Tente isto :
Compilou-a com a diretiva #propriedade estrita - é a última linha: "i" - identificador não declarado. A questão é que a variável é declarada em um loop e é válida somente no loop. Sem a diretiva #propriedade estrita ela compila sem erros, mas isto é ruim. A diretriz deve ser utilizada.
É mais fácil escrever if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso) em vez de if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))). Agora o próximo passo é uma pausa - esta é a saída do loop. Mas precisamos processar as outras ordens. No entanto, na história, isto não é necessário. O erro ocorre no mercado e nas ordens pendentes, se no momento do processamento, a ordem tiver sido fechada e estiver faltando. A regra geral é se(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continuar; - continuar a processar os próximos pedidos
Pelo mesmo motivo, substituir if(OrderProfit()>0) break; por if(OrderProfit()>0) continue;
E aqui está a razão do erro: if(OrderProfit()<0)i++; - if(OrderProfit()>0; - o índice é incrementado. E o cabeçalho do laço para(int i=ordens-1;i>=0;i--) o diminui. O processamento da mesma ordem é repetido e o programa entra em um loop. É provavelmente assim que deve ser:
2 minutos de atraso ao escrever ... Vamos considerar esta parte cuidadosamente:
Compilou-a com a diretiva #propriedade estrita - é a última linha: "i" - identificador não declarado. A questão é que a variável é declarada em um loop e é válida somente no loop. Sem a diretiva #propriedade estrita ela compila sem erros, mas isto é ruim. A diretriz deve ser utilizada.
É mais fácil escrever if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso) em vez de if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))). Agora o próximo passo é uma pausa - esta é a saída do loop. Mas precisamos processar as outras ordens. No entanto, na história, isto não é necessário. O erro ocorre no mercado e nas ordens pendentes, se no momento do processamento, a ordem tiver sido fechada e estiver faltando. A regra geral é se(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continuar; - continuar a processar os próximos pedidos
Pela mesma razão, se(OrderProfit()>0) quebrar; substituir por if(OrderProfit()>0) continuar;
E aqui está a razão do erro: if(OrderProfit()<0)i++; - if(OrderProfit()>0; o índice é incrementado. E o cabeçalho do laço para(int i=ordens-1;i>=0;i--) o diminui. O processamento da mesma ordem é repetido e o programa entra em um loop. É provavelmente assim que deve ser:
Obrigado, não há mais acidentes com metatrader) Em relação
if(OrderProfit()>0) quebra; substituir por if(OrderProfit()>0) continua;
if(OrderProfit()>0) quebra;
Eu deveria parar o balcão se o pedido tiver fechado com lucro, eu vejo corretamente?
Obrigado, não há mais metatrader crashes) O que eu preciso é que se um pedido fechar com lucro, a função não leve em conta este lucro, apenas a quantidade de perda e até o primeiro pedido fechado com lucro. Isto é
Eu deveria parar o balcão se o pedido tiver fechado com lucro, eu vejo corretamente?
Seu raciocínio é quase correto. Não há garantia de nenhum arranjo de pedido na história. Para você mesmo - sim, mas para vender - mau.
Se houver uma fonte - DROW_NONE - sem desenho
Não ajudou, ainda exibe números no canto
Em ordem de ordem na lista. Mas não há garantia de nenhum pedido nesta lista