[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 261

 

Pessoal, o que significa o número inteiro inválido como parâmetro 10 para a função OrderSend e como corrigi-lo?

 
Pyxlik2009:

Pessoal, o que significa o número inteiro inválido como parâmetro 10 para a função OrderSend e como corrigi-lo?

Por favor, me dê uma linha de código onde ela ocorre

 
Pyxlik2009:

Pessoal, o que significa o número inteiro inválido como parâmetro 10 para a função OrderSend e como corrigi-lo?


O tempo de expiração deve ser um número inteiro.
 
Roll:

O prazo de validade deve ser um número inteiro.
Eu não tenho nada fracionário nos ajustes
 
sergey_r:
Sim, mas meu pedido é feito até o fechamento da barra, enquanto eu preciso do preço atual. Se o preço atual for inferior ao baixo da barra anterior... Se o preço atual tiver caído abaixo do anterior, o pedido é feito

tente isto

if (Bid<iLow(NULL, 0, 1)


 
Pyxlik2009:
Eu não tenho nada fracionário nos ajustes

Consulte o 10º parâmetro da função acima. Ajuste-o para 0.
 
paukas:
Existe uma coisa como um roteiro. Quando for necessário, basta executá-lo.


O objetivo não é executar a ação uma única vez. A questão é que ao executar este roteiro, ele lerá o tempo de sua configuração, mas não o tempo desencadeado.

Portanto, o próprio tempo de acionamento do pedido pendente não é salvo em nenhum lugar do terminal. Eu só preciso saber desta vez e seria ideal usar a função MQL4 integrada PendingOrderFilledTime(), se ela existir. Neste caso, o próprio MT4 monitoraria as ordens pendentes e me forneceria um resultado pronto.

Portanto, não consigo ver outra solução que não seja usar um Expert Advisor ou um roteiro em loop em um gráfico. Por que eu pergunto aqui? Talvez alguém tenha tido um problema semelhante e este tenha sido resolvido sem um Expert Advisor ou um roteiro, usando apenas os meios do MQ4.


LazarevDenis:

Eu não entendo porque você não está satisfeito com a EA, parece que você não vai construir um sistema complexo de comércio em rede neural com auto-optimização, você só precisa verificar cada tick para ver se o pêndulo está funcionando e quando ele for acionado você receberá uma mensagem de texto na tela ou um áudio ou ambos, a calculadora pode lidar com essa tarefa, não se preocupe com computadores ou você só tem problemas de escrita?

Eu não tenho nenhum problema em escrevê-lo. Não quero usar uma ferramenta improvisada para receber informações do terminal. Um Expert Advisor é uma solução para um problema de frente.

Se cada tarefa, para a qual não há uma função MQ4 padrão, fosse resolvida por um Expert Advisor, o terminal as teria. E não é bom criar elos fracos adicionais na cadeia. Quando você tem muitos terminais abertos e cada um deles precisa de uma EA e verificar se ela existe ou não, você concorda que é inconveniente e insensato. Passar um cheque para a anexação da EA e forçá-la a funcionar ali é a mesma coisa, então por que complicar o assunto, se talvez alguém já tenha resolvido este problema usando a combinação das funções MQL4 existentes?

 
Starting:
...talvez alguém já tenha resolvido um problema semelhante com uma combinação de funções MQL4 existentes.
Eu o li e não entendo a lógica. Suponha que a função de que você precisa esteja disponível, como você a utilizaria? Você terá que inseri-lo em um Expert Advisor ou em um script de qualquer forma.
Portanto, a questão não é sobre a ausência de uma função especial (e você não pode agradecer por cada espirro), mas sobre a complexidade de escrever um código que atenda às suas exigências.
 
granit77:
Eu o li e não entendo a lógica. OK, digamos que há uma função que você precisa, como vai utilizá-la? Você terá que inseri-lo no Expert Advisor ou em um script de qualquer forma.
Portanto, a questão não é sobre a falta de uma função especial (e você não pode agradecer por cada espirro), mas sobre a dificuldade de escrever um código que atenda às suas exigências.

O uso é simples - eu executo um roteiro que escreve os dados do último comércio fechado com o primeiro tempo de abertura. Os pingentes acionados pelo roteiro causam confusão nas filas de ordens fechadas. No momento em que o roteiro começa, não tem onde obter os dados sobre o acionamento das ordens pendentes, uma vez que sua data de acionamento está fixada no histórico, não a data de sua conclusão.


Um exemplo simples.

A ordem 1 pendente foi estabelecida em 01.01.2011.

02.01.2011 foi aberta uma ordem de mercado 2.

Em 03.01.2011 a ordem pendente 1 foi acionada e se tornou ordem de mercado 1 cuja ordemOpenTime() aparecerá em 01.01.2011, embora na verdade tenha se tornado ordem de mercado em 03.01.2011.

04.01.2011 A ordem de mercado 2 foi fechada.

05.01.2011 A ordem de mercado 1 foi fechada.

Na história, a data de 01.02.2011 da ordem de mercado 2 será dada como a data de abertura da última ordem fechada com a última data de abertura.

Na verdade, a data mais recente de abertura (acionado) do último pedido fechado pendente 1 é 03.01.2011.

Essa é a questão, é possível obter a data real de acionamento da ordem, a fim de classificar corretamente as ordens fechadas por sua data de abertura sem que um Consultor Especialista monitore a conta?


Imagine que você está negociando, você tem ordens pendentes, definidas há muito tempo. E aqui você vê que alguns deles acionaram, e depois fecharam após algum tempo. Mas eles serão considerados por seu tempo de colocação "fofinho", mesmo que tenham sido colocados há um ano, mas acionados e fechados apenas hoje. Você quer ver o que foi realmente aberto ou acionado no mercado por último, para que ele seja dado por último, e não tudo o que uma vez foi misturado com o mercado que foi aberto realmente recentemente. Obrigado por sua atenção à minha pergunta.

 

Cavalheiros, podem me dizer onde cometi um erro quando inseri esta função de tempo no meu código EA?

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
   return(0);
  }

O compilador acaba de me inundar de erros.