Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 557
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
OrderSelect() é executado dentro do terminal, não há solicitação ao servidor. Portanto, não há nada de errado em acessar a lista de pedidos em cada tick. A maioria dos Consultores Especialistas faz isso.
E sua pergunta sobre a matriz está relacionada com a arquitetura do programa. No caso de uma EA complexa que opera com uma grande quantidade de pedidos, isto é absolutamente necessário. Se o Expert Advisor opera com uma única ordem com lógica simples, a matriz é redundante.
Vale apenas mencionar o fato de que mesmo que tenhamos uma série de ordens, não podemos deixar de chamar OrderSelect(). Afinal de contas, temos que verificar a cada tique se a ordem ainda existe ou não. Também seus parâmetros podem ser alterados.
Rapazes, digam-me como lidar e por onde começar!
Exemplo: tenho 15 pedidos com lote 0,01. Preciso fechar alguns negócios com lote 0,07 em algum momento.
Minha pergunta é: como posso fechar 7 pedidos ou 0,07 em um OrderClose(...)?
Se eu colocar 0,07 de uma só vez, não vejo negócios com volume 0,01.
Sou novo em programação.
Recebi uma dica sobre como fazer um contador na forma decontagem .
Deve fechar três negócios de 0,01 lotes por minuto. Agora, temos uma pergunta sobre como convertê-lo para que todos os pedidos sejam calculados em ordem.
Se definirmospara(int i=OrdensTotal()-1; i>=0; i--){ as últimas ordens serão contadas em ordem,
Se for for(int p=0; p<OrdersTotal(); p+++){ então vá da primeira até uma ordem.
O contador funciona, mas quando o tamanho do lote é 0,15, por exemplo, ele não fecha 0,03 lotes e fecha 0,01 lotes a cada minuto.
O que você aconselharia a acrescentar?
Como posso fechar parte do lote total, independentemente do número e do tamanho do lote de pedidos?Uma dica sobre como fazer umcontador .
Deve haver três negócios de 0,01 lotes fechados por minuto. Agora eu tenho uma pergunta sobre como convertê-lo para que todas as ordens sejam contadas em ordem.
Se definirmospara(int i=OrdensTotal()-1; i>=0; i--){ as últimas ordens serão contadas em ordem,
Se for for(int p=0; p<OrdersTotal(); p+++){ então vá da primeira até uma ordem.
O contador funciona, mas quando o tamanho do lote é 0,15, por exemplo, ele não fecha 0,03 lotes e fecha 0,01 lotes a cada minuto.
O que você aconselharia a acrescentar?
Como posso fechar parte do lote total, independentemente do número e do tamanho do lote de pedidos?Ao definir este problema (muito estranho, a propósito), você precisa trabalhar com a lista de "Histórico de contas". A cada nova iteração, devemos percorrer esta lista e encontrar pedidos que foram fechados durante o minuto atual e resumir seu volume. Se não houver volume suficiente, então classifique-o conforme necessário (portanto, não pergunte como, depende de você) e faça um único pedido. Feche-a a 0,01. Na próxima iteração, comece novamente.
Ao definir tal tarefa (uma muito estranha, por sinal), você tem que trabalhar com a lista "Histórico da conta". A cada nova iteração, passe por esta lista e encontre as ordens que foram fechadas durante o minuto atual, somando seu volume. Se não houver volume suficiente, então classifique-o conforme necessário (portanto, não pergunte como, depende de você) e faça um único pedido. Para fechá-lo a 0,01. Na próxima iteração, tudo novamente.
Vou tentar! Obrigado
não pode configurar o envio de correio a partir do terminal
Não consigo que funcione com a myl.ru, mas agora a configurei da mesma forma e ela não enviará a mensagem de teste.
alguém lidou com isso?
se para você mesmo (não para venda), então o tratamento correto para problemas de correio é :
1) conseguir um carteiro no localhost para tratar do encaminhamento, garantir a entrega e não mexer com autorização e proteção antispam. Caso contrário, os EAs acabarão muito rapidamente em todos os tipos de listas negras.
Isto não é difícil - há um smtp de vitória embutido e livre com configurações simples, em uma pitada você mesmo pode escrever :-)
2) Use uma alternativa para SendMail() . Para controlar todo o processo, para enviar relatórios mais inteligentes, com tags, bandeiras, opcionalmente em html e com fotos.
Quando você combina 1+2 você obtém um total de 3 :-) então é uma solução sensata e estável.
mais sobre o envio de correspondência : https://www.mql5.com/ru/blogs/post/718364
-----
Se você precisar de ajuda sobre configurações específicas de SendMail e MT, anexe screenshots, extratos de código fonte, diagnósticos de erros...
Então não é apenas um "baque subterrâneo".
Entendo corretamente que o "TimeCurrent()" retornará o tempo do último tick quando for chamado de uma função do usuário?
Sim
Saudações!
Uma ordem pode ser acessada usando o comandoOrderSelect por seu número.
Pergunta, é possível saber antecipadamente o número de pedidos existentes, para não passar por todos eles? Por exemplo, podemos memorizar este número ao abrir um novo pedido.
Entendo que este número é atribuído em ordem a partir de 1. Quais são as nuances possíveis?
Muito obrigado.
Saudações!
Uma ordem pode ser acessada usando o comando OrderSelect por seu número.
Pergunta, é possível saber antecipadamente o número de pedidos existentes, para não passar por todos eles? Por exemplo, podemos memorizar este número ao abrir um novo pedido.
Entendo que este número é atribuído em ordem a partir de 1. Quais são as nuances possíveis?
Muito obrigado.
OrderSend
OrderSelect
Quebrei meu cérebro, ajude-me por favor!
Eu escrevi uma unidade de cálculo de correlação. Mas OANDA e investing.com dão resultados completamente diferentes! É engraçado - eles também não se igualam!
Onde eu estou errado?
O par de moedas atual - EURUSD, eu verifico a correlação com GBPUSD.
SubSímbolo de corda externa = "GBPUSD";
correlação externa int = 24; // quantas horas para verificar a correlação dos pares de moedas selecionados
.....
// ------------------------ bloco de cálculo de correlação --------------------------------------
período int = 15;
int bars_number = MathRound(correlation_time*60/period);
duplo símbolo_avg = 0;
duplo símbolo_avg = 0;
duplo símbolo_preço[], duplo subsímbolo_preço[];
duplo x,y;
int j;
int shift = 0;
ArrayResize(symbol_price, bars_number);
ArrayResize(subsímbolo_preço, barras_número);
para (j=0; j < bar_number; j++)
{
symbol_price[j] = (iHigh(NULL,period,j+shift) - iLow(NULL,period,j+shift))/2;
subsímbolo_preço[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2;
symbol_avg = symbol_avg + symbol_price[j];
subsímbolo_avg = subsímbolo_avg + subsímbolo_preço[j];
}
symbol_avg = symbol_avg/bars_number;
subsímbolo_avg = subsímbolo_avg/bars_number;
duplo ss_xx = 0;
duplo ss_xy = 0;
duplo ss_yy = 0;
para (j=0; j < bar_number; j++)
{
x = símbolo_preço[j] - símbolo_avg;
y = subsímbolo_preço[j] - subsímbolo_avg;
ss_xy = ss_xy + x*y;
ss_xx = ss_xx + x*x;
ss_yyyy = ss_yyy + y*y;
}
dupla correlação = ss_xy/MathSqrt(ss_xx*ss_yyyy);
Alerta(correlação, " ", número_de_barras);
ArrayFree(symbol_price);
ArrayFree(sub-símbolo_preço);
// ------------------------ fim do bloco de cálculo de correlação ---------------------------------