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

 
Ihor Herasko:

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.

Obrigado.
 
Rustam Bikbulatov:

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.


    int countS = 3;
   if(LastTime!=iTime(NULL,1,0)){
      for(int i=OrdersTotal()-1; i>=0; i--){
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==321){ 
         if(OrderType()==OP_SELL){
           irvb=OrderClose(OrderTicket(),0.01,Ask,3,CLR_NONE);
           LastTime=iTime(NULL,1,0); countS--; if(countS==0)break;   
          }}}}} 

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?
 
Rustam Bikbulatov:


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.

 
Ihor Herasko:

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

 
harbor:
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".

TradeBiff - отправка почты со скриншотами
TradeBiff - отправка почты со скриншотами
  • 2018.05.19
  • Maxim Kuznetsov
  • www.mql5.com
Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
 
Entendo corretamente que o"TimeCurrent()" retornará o tempo do último tick quando for chamado de uma função do usuário?
 
Asa saas:
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.

 
Decromor:

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 ---------------------------------

Razão: