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

 
Andrey Dik:

Sim, obrigado!

Não, mas obrigado de qualquer forma!)
Não pensei que pudesse encravar daquela maneira... :-)))
 

Boa noite.

Ao utilizar iOpen é especificado um turno. Se não houver histórico suficiente para o câmbio especificado, o iOpen do bar mais antigo é devolvido.

Pergunta: Como posso fazer um cheque para um bar com o shifter especificado? E caso não haja história suficiente, não retorne iOpen?

 
Sergey:

Boa noite.

Ao utilizar iOpen é especificado um turno. Se não houver histórico suficiente para o câmbio especificado, o iOpen do bar mais antigo é devolvido.

Pergunta: Como posso fazer um cheque para um bar com o shifter especificado? E no caso de não haver história suficiente, não retorna iOpen?


CopyOpen

A função recebe dados do histórico de preços de abertura de barras para um par de símbolos-período especificado na matriz open_array no valor especificado. Deve-se observar que a contagem dos elementos da posição inicial é feita do presente para o passado, ou seja, a posição inicial igual a 0 significa a barra atual.


Ao copiar uma quantidade desconhecida de dados, recomendamos usar uma matriz dinâmica como matriz de destino, porque se os dados forem menos (ou mais) do que a matriz pode conter, será feita uma tentativa de remodelar a matriz para que os dados solicitados possam ser copiados em sua totalidade.

Se for necessário copiar uma quantidade conhecida de dados, é melhor copiá-la para um buffer alocado estaticamente para evitar alocação desnecessária de memória em geral.

Independentemente da propriedade as_series=verdadeiro ou as_series=falso da matriz receptora, os dados serão copiados para que o elemento mais antigo esteja no início da memória física alocada à matriz. Existem 3 variantes da função.

Referenciamento por posição inicial e número de elementos necessários

intCopyOpen(
nome_símbolo de corda,// nome do símbolo
ENUM_TIMEFRAMEScronograma,// período
intstart_pos,// por onde começar
contagem de int,// quantos copiamos
doubleopen_array[]// matriz para cópia dos preços de abertura
);

Acesso por data de início e número de elementos necessários

intCopyOpen(
nome_símbolo de corda,// nome do símbolo
ENUM_TIMEFRAMEScronograma,// período
data/hora de início,// a partir da qual a data
contagem de int,// quantos copiamos
doubleopen_array[]// matriz para cópia dos preços de abertura
);

Acesso por data de início e data final do intervalo de tempo requerido

intCopyOpen(
nome_símbolo de corda,// nome do símbolo
ENUM_TIMEFRAMEScronograma,// período
data/hora de início,// a partir da qual a data
datahora_de_parada,// até que data
doubleopen_array[]// matriz para cópia dos preços de abertura
);

Parâmetros

símbolo_nome

[em] O símbolo.

cronograma

[em] Período.

start_pos

[em] Número do primeiro elemento a ser copiado.

contar

[em] Número de itens a serem copiados.

hora_de_início

[em] Tempo de barra correspondente ao primeiro elemento a ser copiado.

stop_time

[em] O tempo de barra correspondente ao último elemento.

open_array[]

[fora] Conjunto do tipo duplo.

Valor retornado

O número de elementos de matriz copiados ou -1 no caso de um erro.

Nota

Se o intervalo de dados solicitados estiver totalmente fora dos dados disponíveis no servidor, a função retorna -1. Se forem solicitados dados fora do TERMINAL_MAXBARS (número máximo de barras no gráfico), a função também retornará -1.

Se as séries de tempos solicitadas ainda não foram construídas ou precisam ser baixadas do servidor, a função retornará imediatamente -1.

Ao solicitar dados do Expert Advisor ou um script, o carregamento do servidor será iniciado, se o terminal não tiver esses dados localmente, ou a construção das séries de tempos requeridos será iniciada, se os dados puderem ser construídos a partir do histórico local, mas ainda não estiverem prontos. A função retornará a quantidade de dados que estarão prontos no tempo limite, mas o carregamento do histórico continuará, e o próximo pedido semelhante retornará mais dados.

Ao solicitar dados por data de início e número de itens necessários, somente dados com data menor que (anterior a) ou igual à especificada serão devolvidos. Ao mesmo tempo, o intervalo é especificado e levado em conta para o segundo mais próximo. Isso significa que a data de abertura de qualquer barra, para a qual o valor é devolvido (volume, spread, valor no buffer indicador, preço Aberto, Alto, Baixo, Tempo Fechado ou Tempo Aberto), é sempre igual ou menor do que o especificado.

Ao solicitar dados no intervalo de datas especificado, somente os dados que estiverem dentro do intervalo solicitado serão devolvidos, e o intervalo é especificado e levado em consideração para o segundo mais próximo. Isto significa que o tempo de abertura de qualquer barra para a qual um valor é devolvido (volume, spread, valor no buffer indicador, preço Aberto, Alto, Baixo, Tempo Fechado ou Tempo Aberto), está sempre dentro do intervalo solicitado.

Assim,se o dia atual da semana for sábado, então ao tentar copiar os dados no horário semanal, especificando start_time=Last Tuesday e stop_time=Last Friday, a função retornará 0, já que o horário de abertura do horário semanal sempre cai no domingo, mas nenhuma barra semanal se enquadra no intervalo especificado.

Se precisarmos obter o valor correspondente à barra inacabada atual, podemos usar a primeira forma da chamada especificando start_pos=0 e count=1.

 

Saudações.

Cavalheiros, podem me dizer como fazer uma condição de cruzamento de níveis de preços com 1-2-3 zeros no final?

 
Andrey Sokolov:

Saudações.

Cavalheiros, podem me dizer como fazer uma condição de cruzamento de níveis de preços com 1-2-3 zeros no final?


Ao comparar o valor do preço passado e atual com este nível, se o nível estiver entre estes valores, então houve uma travessia.
 
Sergey Gritsay:

Ao comparar o passado e o preço atual com este nível, se o nível estiver entre estes valores, então ocorreu uma travessia.


Como posso especificar esses níveis para comparação?

Ou - como posso especificar que o número deve ter o número certo de casas decimais? Não por arredondamento, mas por eliminação.

 
Andrey Sokolov:


E como eu escrevo esses níveis para comparação?

Ou - como posso especificar que o número deve ter o número certo de casas decimais? Não por arredondamento, mas por eliminação.

Aqui está a função de busca.

//===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel(int ne=100, string symb="0") {
 if(symb=="0") symb=Symbol();
 static double LastBid;
 double _Level=0, PriceStep=0, bid=0, point=0;
 bid=dBid(symb);
 point=dPoint(symb);
  if(LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level=MathRound(bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
  return(_Level);
 }
Comment( GetUniversalLevel(50) );
 

Sergey Gritsay,Vitaly Muzichenko lhe agradece.

Também me foi sugerida a função MathFloor() - Retorna o valor numérico inteiro mais próximo do fundo.

 
Vitalie Postolache:

Digite o MySQL.
Cavando...interessante...talvez daqui a alguns meses eu esteja rindo das minhas perguntas atuais, mas ainda no início da viagem...

Sergey Gritsay:
Para este fim você precisa criar um servidor fora de seu computador local e transmitir dados através deste servidor. Para MT um indicador ou um Expert Advisor deve ser escrito para processar estes dados, ou terminais devem ser colocados em algum servidor VPS e lá você deve configurar uma copiadora de comércio de sua conta para as contas de seus amigos. Outra opção é copiar suas negociações executadas em determinados níveisatravés do serviço desinais. Em geral, você deve considerar sua capacidade financeira para encomendar o software apropriado.


MosheDayan:

Deixe-me lembrá-lo da pré-história. Tenho um indicador diário que obtém dados do csv e os exibe (níveis horizontais) em um gráfico. Criei um servidor a partir de meu laptop doméstico (é fraco mas não preciso de cálculos lá e me dará csvs e eles são muito pequenos). No servidor para a conexão de teste despejou-se o motor de fórum habitual - tudo parece ser visível do exterior. Ajuda com conselhos. Isso deve estar no servidor para ler a partir dele arquivos csv indicadores? Isto é, como o indicador se comunica com o banco de dados csv? Pode encher o servidor fTP do motor ou outra coisa e pode para a MT precisar abrir algumas portas especiais? Ou eu me enganei na direção em geral? Obrigado


Amigos, posso fazer-lhes outra pergunta? É possível não carregar um laptop doméstico, mas usar, ligar o indicador com arquivos csv, armazenamento gratuito de arquivos em nuvem como, por exemplo, Yandex.Disk ou Облако@mail.ru ou Box.net etc. Obrigado
 
Vitaly Muzichenko:

Aqui está a função do buscador

OdBid e odPoint precisam ser inseridos separadamente?