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

 

Muito obrigado pelas valiosas informações.

Entendo o que é a estrutura e como ela funciona, mas ainda não entendi todos os detalhes.

Eu ainda não entendi completamente as sutilezas associadas a ela. Estou aprendendo o novo material muito melhor com a ajuda de exemplos claros.
Eu ficaria muito grato se você pudesse me mostrar como escrever o código da seguinte condição em mql5
Eu já aprendi como abrir um pedido usando a estrutura


if(Hora()==10)

para abrir um pedido.

Você não precisa escrever o padrão para abrir o pedido.... apenas a escrita da condição.

Mais uma vez obrigado por sua ajuda.

 
Igor Makanu:

deve ser como você quer determinar o preço e o tempo do bar:

Ou melhor, são as coordenadas do clique do mouse no tempo + valores de preço no gráfico, a barra deve ser definida via iBarShift()

Sim, é isso mesmo, como se entende melhor. Obrigado)

 
ANDREY:

Muito obrigado pelas valiosas informações.

Entendo o que é a estrutura e como ela funciona, mas ainda não entendi o que está por dentro e por fora.

Estou aprendendo melhor o material novo com exemplos. Estou aprendendo muito melhor material novo com a ajuda de exemplos claros.
Eu ficaria muito grato se você pudesse me mostrar como escrever o código da seguinte condição em mql5
Aprendi como abrir um pedido usando a estrutura


if(Hora()==10)

para abrir um pedido.

Você não precisa escrever o padrão para abrir o pedido.... Apenas um registro da condição.

Mais uma vez obrigado por sua ajuda.

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

Muito obrigado por sua ajuda. Agora tudo é claro e compreensível.

 

Bom dia a todos!
Estou tentando de mql4 a mql5. Eu criei um código simples que abre pedidos para testes. No testador, a EA abre ordens. Eu coloquei a função Print() no início da função OnTick() vazia e meu consultor especializado entraria nesta função a cada tick e a imprimiria em cada tick da revista. E no quinto tick o Expert Advisor não entra em nenhuma das funções de impressão() e não imprime nada no Diário de Registro de Automóveis. A visualização e a otimização são desativadas no Expert Advisor.
Por favor, informe como alterar o código para que Imprimir() seja impresso na revista a cada tick, como no 4.
Muito obrigado antecipadamente a todos aqueles que me ajudam.

Aqui está meu código

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

Aumentei o depósito da EA até 100.000. Como resultado, em cada tick Print() é impresso na revista.... Mas não foi aberto um único comércio.

Mas eu preciso que ele abra negócios e imprima() ser impresso.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

Bom dia a todos!
Estou tentando de mql4 a mql5. Eu criei um código simples que abre pedidos para testes. No testador, minha EA abre ordens. Eu coloquei a função Print() no início da função OnTick() vazia e meu consultor especializado entraria nesta função a cada tick e a imprimiria em cada tick da revista. E no quinto tick o Expert Advisor não entra em nenhuma das funções de impressão() e não imprime nada no Diário de Registro de Automóveis. A visualização e a otimização são desativadas no Expert Advisor.
Por favor, informe como alterar o código para que Imprimir() seja impresso na revista a cada tick, como no 4.
Muito obrigado antecipadamente a todos aqueles que me ajudam.

Aqui está meu código

Aumentei o depósito da EA até 100.000. Como resultado, em cada tick Print() é impresso na revista.... Mas não foi aberto um único comércio.

Mas eu preciso que os negócios sejam abertos e que a impressão() seja impressa .

Veja os registros, veja o que é impresso, as informações são inseridas ali em cada etapa. Muito provavelmente, algo está errado com a abertura de pedidos e a EA não funciona.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

Já discutimos se é necessário acessar repetidamente os dados do terminal da MQL4, então OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

acho que também é possível utilizá-lo 100500 vezes por segundo, porque a produção será aumentada milhões de vezes por segundo


quanto mais símbolos na janela de observação do mercado, maior será a carga no próprio terminal e, respectivamente, se você chamar dados de muitos símbolos diferentes, então você também receberá desfasamentos

ou seja, se você usar o terminal de forma sensata, nada irá congelar - na janela do mercado há dez símbolos que você usa


ainda não verifiqueiquantos gráficos você pode abrir ao mesmo tempo, mas acho que se você limitar o histórico a 1000 barras, então acho que o terminal provavelmente abrirá algumas dezenas de janelas de gráficos sem nenhum problema

100

 
Valeriy Yastremskiy:

Veja os registros para ver o que ele imprime, há informações registradas em cada etapa. Muito provavelmente há algo de errado com a abertura de pedidos e a EA não está funcionando.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

Obrigado pela dica.

Realmente não funciona. Diz o texto.

2020.10.27 06:40:45.311 Tester EURUSD: os dados históricos começam a partir de 2018.01.02 00: 00

2020.10.27 06:40:45.312 Core 1 conectando a 127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 conectado

2020.10.27 06:40:45.320 Core 1 autorizado (agente build 2650)

2020.10.27 06:40:45.323 Testador EURUSD,M1 (Alpari-MT5-Demo): teste de especialistas\GRAAL.ex5 de 2020.09.01 00:00 até 2020.09.03 00:00

2020.10.27 06:40:45.327 Core 1 sincronização comum concluída

2020.10.27 06:40:45.328 Testador qualidade da história analisada é 100%

2020.10.27 06:40:45.348 Core 1 especialistas em testes\GRAAL.ex5 sobre o fio EURUSD,M1 acabado

2020.10.27 06:40:45.348 Core 1

2020.10.27 06:40:45.348 Core 1 login (construir 2650)

2020.10.27 06:40:45.348 Core 1 informação da conta encontrada com a moeda USD

2020.10.27 06:40:45.348 Core 1 1482 bytes de parâmetros de teste carregados

2020.10.27 06:40:45.348 Core 1 1724 bytes de parâmetros de entrada carregados

2020.10.27 06:40:45.348 Core 1 calcular lucro em pips, depósito inicial 10000, alavancagem 1:100

2020.10.27 06:40:45.348 Core 1 inicializado com sucesso

2020.10.27 06:40:45.348 Núcleo 1 731 bytes de dados totais de inicialização recebidos

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB

2020.10.27 06:40:45.348 Core 1 EURUSD: símbolo a ser sincronizado

2020.10.27 06:40:45.348 Core 1 EURUSD: símbolo já sincronizado, 18 bytes recebidos

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: história em cache a partir de 2019.01.02 06:00

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): cada carrapato está em cache

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: teste de especialistas\GRAAL.ex5 de 2020.09.01 00:00 até 2020.09.03 00:00 começou com insumos:

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 Core 1 Lote=0.1

2020.10.27 06:40:45.348 Balanço final 10000.00 pips

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 barras geradas. Teste aprovado em 0:00:00.019.

2020.10.27 06:40:45.348 Memória Core 1 270 Mb utilizada, incluindo 35 Mb de dados históricos, 64 Mb de dados de tick

2020.10.27 06:40:45.348 Core 1 log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.0.1-3000\logs\20201027.log" escrito

2020.10.27 06:40:45.371 Núcleo 1 conexão fechada

Estou testando-o por um período de um dia. Isso significa que o Expert Advisor deve abrir 1440 pedidos. Talvez seja um problema. Talvez haja algumas limitações no número de pedidos em aberto ao mesmo tempo.
Se eu chequei, pode ser porque quando eu tinha 10 000 no depósito do meu EA, ele só abriu 300 pedidos e perdeu o resto por algum motivo relacionado ao dinheiro (como entendi das entradas do diário). Mais tarde, aumentei o depósito da EA para 100.000 e ela não tinha mais o direito de pular. E parou completamente de abrir ordens.

Mas depois diminuí o depósito da EA para 10.000 novamente. No entanto, meu consultor especializado ainda não abre nada e sempre escreve os valores que eu declarei acima.

Eu criei outra EA. Fiz o download do mesmo código para ele. Eu tenho um depósito de 10.000. Eu tenho o mesmo problema: não abri pedidos.
Favor aconselhar como fazer meu EA funcionar corretamente. Ele envia a mesma mensagem, apenas minha linha amarela destacada tem 271 em vez de 270 mb
Eu tenho o Windows 10. Tenho OS de 64 bits e 8GB de RAM.
Obrigado.

 
ANDREY:

Obrigado pela dica.

Realmente não funciona. Diz o texto.


2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 barras geradas. Teste aprovado às 0:00:00.019.

2020.10.27 06:40:45.348 Memória Core 1 270 Mb utilizada, incluindo 35 Mb de dados históricos, 64 Mb de dados de tick

2020.10.27 06:40:45.348 Core 1 log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.0.1-3000\logs\20201027.log" escrito

2020.10.27 06:40:45.371 Núcleo 1 conexão fechada

Estou testando-o por um período de um dia. Isso significa que o Expert Advisor deve abrir 1440 pedidos. Talvez seja um problema. Talvez haja algumas limitações no número de pedidos em aberto ao mesmo tempo.
Se eu chequei, pode ser porque quando eu tinha 10 000 no depósito do meu EA, ele só abriu 300 pedidos e perdeu o resto por algum motivo relacionado ao dinheiro (como entendi pelos lançamentos no diário). Mais tarde, aumentei o depósito da EA para 100.000 e ela não tinha mais o direito de pular. E parou completamente de abrir ordens.

Mas depois reduzi novamente o depósito da EA para 10.000. A EA ainda não abre nada e sempre escreve o que eu apontei na parte superior.
Favor aconselhar como fazer meu EA funcionar normalmente.
Sempre deixarei minha EA funcionando corretamente.

Se houver 1440 pedidos por dia, o Consultor Especialista deverá verificar o início do minuto ou, mais facilmente, o aparecimento da barra de um minuto. E abre neste momento. Você não a tem e, portanto, a EA abre uma posição a cada tick, o que é uma condição difícil em si, de acordo com nosso símbolo na citação atual. Esta condição pode não ser cumprida, e os carrapatos não serão cumpridos. E em algum momento, um erro crítico ocorrerá.

Também o tipo de execução do pedido (ordem para criar uma posição) tudo ou nada.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

Pode me dizer, por favor?

Por que o tempo do servidor não é atualizado quando novos tiquetaques chegam?

No momento em que a EA começa, tudo funciona como deveria, mas depois o tempo passa, mas o novo valor do minuto atual não entra na variável.

Ou seja, o Expert Advisor trabalha dependendo do número obtido na variável int M = TimeMinute(TimeCurrent());

Na verdade, esta linha de código é da referência e não funciona.

Por exemplo, eu a inicio às 12-a horaatual retornada pelo servidor corresponde à hora na variável, mas depois a variável permanece às 12, embora já esteja de 15 a 20 minutos no relógio

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...