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

 
evillive:

Por que haveria uma variável extra? O controle direto funciona bem:

Uma variável deve ser criada quando você quiser ver o valor de uma função de diferentes pontos do programa, para que não tenha que chamá-la várias vezes.
A variável é usada para facilitar a compreensão para um recém-chegado. Está claro agora para que serve?
 
Vinin:
Verifique com mais freqüência. Haverá menos perguntas. Haverá um melhor conhecimento.
Ignorar.
 

Boa tarde. Necessidade de fechar de alguma forma uma posição no final do dia (puramente Expert Advisor; bares diários). A modelagem é feita ou por aberturas ou por carrapatos. Ou seja, ou nos contentamos com as aberturas ou tombamos sobre nossas cabeças tentando analisar os dias anteriores em cerca de 15 minutos e pegar o início e o fim do atual. Existe alguma solução para este problema? Vejo várias opções virtualmente hipotéticas:

1) Hacking-fechando uma posição a qualquer preço e a qualquer momento. Suponha-se injusto, mas poderíamos simplesmente fechar a posição ao preço exigido sem perversão.

2) Para simular a abertura e o fechamento dentro de um bar. Isto é, primeiro um carrapato aberto, depois um carrapato fechado.

3) Estabelecer uma ordem que fecha automaticamente em um determinado momento (ou seja, no final do dia).

Qualquer ajuda seria bem-vinda. Obrigado.

 

Um bug?

int OnInit()
  {
   int subwindow = ChartWindowFind(ChartID(),WindowExpertName());
   Print("Подокно запрашиваемого индикатора: ",subwindow);
   
   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }


2015.04.13 20:51:10.710 indi AUDJPY,H1: Subestrutura do indicador solicitado: -1


 
tuner:

Um bug?


2015.04.13 20:51:10.710 indi AUDJPY,H1: Subestrutura do indicador solicitado: -1


Não, não é um bug.

Valor de retorno.

Número da subjanela em caso de sucesso. Zero indica a janela do gráfico principal. Retorna -1 em caso de falha.

 
AlexeyVik:

Não, não é um bug.


Qual é a falha se a função for passada a identificação do gráfico atual onde o indicador está rodando e o nome do indicador atual que está rodando no gráfico atual?
 
tuner:
Qual é a falha se a função passa a identificação do gráfico atual, no qual o indicador está rodando, e o nome do indicador atual que está rodando no gráfico atual?

Se eu o entendi corretamente e você precisa do número da sub janela na qual seu código de teste de indicador anexo funciona, então, com base na descrição da função, é melhor aplicar sua segunda versão.

Código de teste (acrescentei algumas linhas ao seu):

#define  LINE    __LINE__,": "
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int subwindow=ChartWindowFind(ChartID(),WindowExpertName());
   Print(LINE,"Подокно запрашиваемого индикатора: ",subwindow);
   
   int subwindow1=ChartWindowFind();
   Print(LINE,"Подокно запрашиваемого индикатора: ",subwindow1);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+

A ajuda para a função ChartWindowFind() tem um bom exemplo ainda sobre este assunto (em termos de comentários lá também):

//+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором              |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
  {
   int window=-1;
//--- 
   if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      //--- функция вызвана из индикатора,имя не требуется
      window=ChartWindowFind();
     }
   else
     {
      //--- функция вызвана из эксперта или скрипта
      window=ChartWindowFind(0,short_name);
      if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError());
     }
//---
   return(window);
  }
 
DiPach:

Se eu o entendi corretamente e você precisa do número da sub janela na qual seu código de teste de indicador anexo funciona, então, com base na descrição da função, é melhor aplicar sua segunda versão.

Código de teste (acrescentei algumas linhas ao seu):

A função ChartWindowFind() tem um bom exemplo ainda sobre este assunto (em termos de comentários também):

Obrigado pela dica, mas tenho uma tarefa ligeiramente diferente, devido à qual o uso da 2ª variante da função não faz sentido: quero contar o número de indicadores com um nome especificado em todos os gráficos de terminais abertos. A tarefa já foi resolvida, mas quero simplificar o código resultante usandoChartWindowFind() da primeira variante, mas descobri que esta função não funciona não apenas com outras janelas, mas até mesmo com a atual.
 

Boa noite!

Não consigo entender: na função inicial, o compilador requer "retorno" - a função deve retornar um valor".

Que valor deve retornar neste caso?

int start()
{
if (Ordens!=0||Ord > 0)
{
CritCloseBuy();
CritFecharSell();
}
mais
{
CritOpen();
}
retorno;
}

Será esta a razão pela qual OrderClose() não vê uma posição aberta?

 
rapid_minus:

Boa noite!

Não consigo entender: na função inicial, o compilador requer "retorno" - a função deve retornar um valor".

Que valor deve retornar neste caso?

int start()

Esta pode ser a razão pela qual OrderClose() não vê uma posição aberta?

fazer início nulo() e não haverá erro