Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 818
![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
if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {
// время time[i] попало внутрь бара открытого в time_m1
}
OK) uma flecha, mas por esta condição em M15 e mais alto a flecha é ajustada às 21:00
e se você apenas usar+PeriodSeconds(PERÍODO_M1) semPeriod()*, ele não é definido de forma alguma)
OK) uma flecha, mas por esta condição em M15 e mais alto a flecha é ajustada às 21:00
E se você apenas usar+PeriodSeconds(PERÍODO_M1) semPeriod()*, ele não é definido de forma alguma)
Leia a documentação :-) Período() retorna apenas o id do período atual - por que você está se multiplicando por ele?
ao invés de PERIOD_M1 (que é dado como exemplo), passe-o para PeriodSeconds( Período() ) - então obtenha quantos segundos em 1 barra do período atual.
Lá se vai o enigma do "paralelepípedo das Bermudas".
Funciona para mim :) Até mesmo tentou abrir/fechar o terminal.
PS: Artyom, você mudou a pergunta sobre os cinco para os quatro tópicos... Encontrado por acidente.
Linha EMA 20 23.04.2019 00:00
Ao ligar o MT5, SEM conexão on-line, a mensagem "array out...." aparece imediatamente.
Os erros variam, mas sempre presentes. Pode se replicar on-line, mas está mais freqüentemente presente quando a MT é ligada.
Tal é o mistério do "paralelepípedo das Bermudas".
Funciona para mim :) Até mesmo tentou abrir/fechar o terminal.
PS: Artyom, você mudou a pergunta sobre os cinco para os quatro tópicos... Encontrado por acidente.
Este é um tema comum - nós ajudamos aqui não apenas com MQL4, mas também para a migração para MQL5. Portanto, está no tema.
Olá!
Eu baixei o vídeo tutorial de programação MQL4.
Criei um Expert Advisor de acordo com a lição.
Mas não funciona quando estou negociando.
Não tenho nenhum erro ao compilá-lo.
Como estou no início da minha viagem, é difícil encontrar o erro até agora.
Estou pedindo ajuda, se alguém puder me ajudar.
Obrigado!
Código:
/+----Входные параметры----------------+
BarCount externo interno=10;
externo int int HourStart=14;
Lotes duplos externos=0,1;
externo int StopLoss=120;
Exterior int TakeProfit=300;
magia interna externa=1456;
//+------------Глобальные переменные----------------+
preço mínimo duplo=999999,mp,
maxprice=-99999,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Função de iniciação de especialista |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Função de desinicialização especializada |
//+------------------------------------------------------------------+
nulo OnDeinit(const int razão)
{
}
//+------------------------------------------------------------------+
//| função tick expert |
//+------------------------------------------------------------------+
nulo OnTick()
{
GetMinPrice();
GetMaxPrice();
if(TimeHour(TimeCurrent())==HourStart)
{
if(BuyLimitCount()&& BuyCount() ==0)
{
SL=NormalizeDouble(minprice-StopLoss*Point,5);
TP=NormalizeDuplo(minprice+TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"",Magic,0,Blue);
if(bilhete<0)
Imprimir ("Failure to open buy limit");
}
if(SellLimitCount()&& SellCount()==0)
{
SL=NormalizeDouble(maxprice+StopLoss*Point,5);
TP=NormalizeDouble(maxprice-TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"",Magic,0,Red);
if(bilhete<0)
Print("Failure to open Sell Limit");
}
}
Comentário("Preço mínimo: "+DobrarParaStr(preço mínimo,5)+"+"+"Preço máximo: "+DobrarParaStr(preço máximo,5))
}
//+FUNÇÃO PARA DETERMINAÇÃO DO PREÇO MÍNIMO NO NÚMERO DE BARRAS DE BARCOUNT
nulo GetMinPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iLow(Symbol(),PERIOD_CURRENT,i);
if(mp<minprice)
minprice=mp;
}
retornar;
}
//+FUNÇÃO PARA DETERMINAÇÃO DO PREÇO MÁXIMO NO NÚMERO DE BARCOUNT
vazio GetMaxPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iHigh(Symbol(),PERIOD_CURRENT,i);
if(mp>maxprice)
maxprice=mp;
}
retornar;
}
//+FUNÇÃO DO NÚMERO DE ORDENS DE LIMITE ABERTAS PARA COMPRA
int BuyLimitCount()
{
int contagem=0;
for(int i=OrdensTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)===verdadeiro && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)
{
contar++;
}
}
devolução(contagem);
}
//+-FUNÇÃO DO NÚMERO DE ORDENS DE LIMITE DE VENDA ABERTAS
int SellLimitCount()
{
int contagem=0;
for(int i=OrdensTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)===verdadeiro && OrderMagicNumber()==Magic && OrderType()==OP_SELLLLIMIT)
{
contar++;
}
}
devolução(contagem);
}
//+FUNÇÃO DO NÚMERO DE PEDIDOS DE LIVROS DE MERCADO ABERTO
int BuyCount()
{
int contagem=0;
for(int i=OrdensTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)===verdadeiro && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
contar++;
}
}
devolução(contagem);
}
//+-FUNÇÃO DO NÚMERO DE ORDENS DE VENDA NO MERCADO ABERTO
int SellCount()
{
int contagem=0;
for(int i=OrdensTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)===verdadeiro && OrderMagicNumber()==Magic && OrderType()==OP_SELLL)
{
contar++;
}
}
devolução(contagem);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Seric29
Obrigado, vou acrescentar suas informações à minha bagagem.
Você pode, por favor, aconselhar como escrever conceitualmente o código EA, que leva os preços comerciais do arquivo .csv. Por que esta pergunta surge: Em cada tick a EA irá comparar o preço atual com o preço no arquivo .csv, que é lido inteiramente pela função fileopen, se eu o entendi corretamente. Mas o arquivo contém mais de 5000 linhas para o ano passado, cada linha tem nome do instrumento, preço, tipo de transação (compra/venda), data da gravação, data do cancelamento do pedido. Ao testar, o Expert Advisor irá percorrer todas as linhas de arquivo em cada tic para entender se é hora de fazer um pedido? Ou, para testes, devemos fazer nosso EA definir todas as ordens com a data de cancelamento de uma só vez durante a inicialização e verificar as ordens reais até a data de expiração em cada tick para negociação real? Talvez isto não seja o que eu esperava, talvez seja a coisa certa a fazer do ponto de vista dos recursos ou existem outras variantes (por exemplo, devemos fazer objetos gráficos e comparar o preço atual com eles, mas parece ser o mesmo ciclo); não entendo, por favor, aconselhe.
Normalmente tenta-se ler (escrever) no arquivo o menor número de vezes possível.
Para sua tarefa, seria melhor ler os dados em uma matriz no carregamento (embora provavelmente mais convenientemente em uma estrutura) e depois comparar os valores atuais de preço e tempo com os valores da matriz
SZY: a busca em "arquivo" ou "csv" na base de código foi uma vez tão pronta Expert Advisors - lido a partir de uma troca de arquivos sobre os dados
Normalmente tenta-se ler (escrever) no arquivo o menor número de vezes possível.
Para sua tarefa, seria melhor ler os dados em uma matriz no carregamento (embora provavelmente mais convenientemente em uma estrutura) e depois comparar os valores atuais de preço e tempo com os valores da matriz
ZS: a busca em "arquivo" ou "csv" na base de código já foi tão pronta EAs - leia a partir de um comércio de arquivos sobre esses dados
Muito obrigado, recebi a resposta que queria.