Perguntas de um "boneco" - página 162

 
Karlson:
DBL_MAX estará presente.
:-)
 

Porque é que o nandl deficiente não é devolvido, apesar de a deficiência ter sido removida?

   int       indicator_handle=iCustom(
   NULL,
   PERIOD_CURRENT,
   "Examples\\ZigzagColor"
   );
   Print(indicator_handle);
   bool  a=IndicatorRelease(
   indicator_handle//,
   );
   Print(a);
   Print(indicator_handle);

A primeira impressão é 10, a segunda impressão é verdadeira, a terceira impressão é novamente 10. Escorregar um minuto - ainda 10.

Penso que deveria ser -1(INVALID_HANDLE). Estou a pensar mal?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Silent:

Porque é que o nandl deficiente não regressa, apesar de a deficiência ter sido removida?

A primeira impressão é 10, a segunda impressão é verdadeira, a terceira impressão é novamente 10. Escorregar um minuto - ainda 10.

Penso que deveria ser -1(INVALID_HANDLE). Estou a pensar de forma incorrecta?

Os indicadores apagados não são retirados imediatamente fisicamente, mas após uma pausa (talvez alguns minutos), no caso do mesmo ou outro programa os reabrir (opção de caching).

Na maioria dos casos, isto é conveniente. O problema só ocorrerá se o ciclo ler buffers de um grande conjunto de indicadores (tão grandes que nem todos podem caber na memória de uma só vez).

// Apenas neste caso faz todo o sentido divulgar indicadores no programa.

// Todas as outras variantes de utilização da função IndicatorRelease() são "racialmente erradas", porque os indicadores são libertados no final do trabalho de qualquer forma.

Daí, o paradoxo: a função é inútil porque o caching mata completamente todos os casos de uso kosher.

Neste caso, Renat uma vez fez uma promessa de fazer uma variante de "libertação instantânea", mas aparentemente ainda está muito ocupado. ;)

--

Esta é mais ou menos a primeira parte da resposta (sem a qual a segunda seria incompreensível).

Agora sobre INVALID_HANDLE. Como vejo, as funções de libertação de objectos dinâmicos, bem como o operador de eliminação, não atribuem o valor INVALID_HANDLE ao ponteiro em si; apenas removem objectos para os quais o cabo aponta. Apenas funções de alocação de memória (novo operador também) atribuem forçosamente valores INVALID_HANDLE a ponteiros em caso de falha, pelo que a forma correcta de verificar a validade do ponteiro é a função CheckPointer() que literalmente olha através da tabela do sistema de punhos à procura de um objecto e devolve o tipo de punho se o objecto for encontrado ou 0 se não o for.

Esperemos que a lógica de lidar com apontadores (pegas) seja agora um pouco mais clara. Assim como os resultados do seu exemplo. Lá tudo está correcto: o indicador é um objecto de acesso em grupo, não é fisicamente removido ao primeiro apito (por isso mesmo CheckPointer() devolverá um valor não zero), para não mencionar a falha de esperar obter o valor INVALID_HANDLE na variável ponteiro depois de o passar para IndicatorRelease() por valor.

 

O artigo Encomendas, Posições e Negócios no MetaTrader 5 dá o exemplo de que"Cada negócio é baseado numa ordem em particular, masuma ordem pode gerar múltiplos negócios. Por exemplo, uma ordem de compra de 10 lotes pode ser executada através de várias transacções sucessivas com execução parcial". O meu entendimento é que se eu quiser abrir uma posição para, por exemplo, 10 lotes, então várias transacções podem aparecer na história. De acordo com a minha estratégia, 1 e 2 posições na mesma direcção, o meu Expert Advisor (MT4) abre com o lote 1.0, e depois o terceiro e depois o lote 2.0. Em MT5 pode acontecer que a abertura da 1ª posição na história apareça, por exemplo, 2 ou mais transacções. 2 ou mais ofícios podem aparecer na história. Quando desejar abrir uma 2ª posição, o Conselheiro Especialista irá percorrer a história e descobrir que será a 3ª posição. E vai abrir o lote errado. Isto é um pouco irritante.

Talvez alguém saiba como resolver este problema ou dar-me uma ligação.

 
MetaDriver:

Obrigado, exactamente o que precisa.

// nelp by nelp for dummies - é o que é necessário nos artigos.

 

Estou a tentar criar um indicador que utiliza dois períodos de tempo diferentes, por exemplo M5 (actual no ecrã) e H1. Como sincronizar os preços entre estes diferentes períodos de tempo? Por exemplo, ao calcular o último valor do indicador no M5, quero bombear automaticamente os preços a partir de H1 do mesmo tempo (ou seja, a barra zero em ambos os períodos de tempo após o ArraySetAsSeries corresponde à última vez actual, como no OnTick, mas não a última barra no ecrã). Se não existir tal possibilidade e se devermos verificar os tempos da barra manualmente, devemos adicionar uma função de sincronização, como no OnTick, para os indicadores.

Tentei testá-lo no testador - é uma coisa boa. Porque é que o último valor calculado não é guardado no ecrã?

 
gpwr:

Estou a tentar criar um indicador que utiliza dois períodos de tempo diferentes, por exemplo M5 (actual no ecrã) e H1. Como sincronizar os preços entre estes diferentes períodos de tempo? Por exemplo, ao calcular o último valor do indicador no M5, quero bombear automaticamente os preços a partir de H1 do mesmo tempo (ou seja, a barra zero em ambos os períodos de tempo após o ArraySetAsSeries corresponde à última vez actual, como no OnTick, mas não a última barra no ecrã). Se não existir tal possibilidade e se devermos verificar os tempos da barra manualmente, devemos adicionar uma função de sincronização, como no OnTick, para os indicadores.

Tentei testá-lo no testador - é uma coisa boa. Porque é que os valores previamente calculados não são guardados no indicador?

Utilize uma das sobrecargas da função CopyXXXX()

Ao depurar, fazer uma verificação em que direcção os dados são copiados (se mais de 1 for copiado).

Обращение по начальной дате и количеству требуемых элементов

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );
 
 
Urain:

Utilizar uma das sobrecargas do CopyXXXX()

Ao depurar, fazer uma verificação em que direcção os dados são copiados (se mais de 1 for copiado).

Já está. Obrigado.
 

Olá!

Poderia dizer-me o código do indicador que desenha o máximo e o mínimo nos gráficos de minutos actuais do dia anterior?

SPS!

 

Há muito tempo que não se vê =).

Digamos que sim. Há algum momento no tempo. Por exemplo D'03.07.2005 13:48:12'.

Como posso saber a hora do bar (de um certo período) que inclui este período de tempo?

Seria bom se houvesse uma função como esta:

datetime УзнатьВремяБараПоВремениПользователя (datetime времяПользователя, ENUM_TIMEFRAMES периодБаров) 

... E que devolveria um valor negativo se não houvesse comércio nessa altura.

Bem, desembucha, será que existe tal função?