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

 
Maxim Kuznetsov:

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

 if(time[i]>=StringToTime("2019.04.22 20:55:00") && time[i]<StringToTime("2019.04.22 20:55:00")+Period()*PeriodSeconds(PERIOD_M1))

e se você apenas usar+PeriodSeconds(PERÍODO_M1) semPeriod()*, ele não é definido de forma alguma)

 
yiduwi:

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.

 
kopeyka2:

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.

 
kopeyka2:


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

a mensagem de erro mostra o número da linha onde o erro ocorreu. Comece a cavar a partir daí
 
Igor Zakharov:

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.

 
Por favor, informe como escrever conceitualmente o código EA, que toma os preços das negociações a partir do arquivo .csv de texto. Por que esta pergunta surge: a cada tick a EA irá comparar o preço atual com o preço no arquivo .csv, que é lido inteiramente por um loop na função fileopen, se eu 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 a 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.
 

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.

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

 
Igor Makanu:

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.