A julgar pelas consultas do indicador de carrapato, os dados do campo time_msk são um múltiplo de 1000. ou seja, não estamos falando de milissegundos, a resolução é de 1 segundo.
Tenho uma demonstração na Openbroker e uma conta real lá também. No real todos os servidores Access dão o mesmo resultado. bem, e na demonstração é o mesmo. Eu olhei para Si-6.16, RTS-6.16, SBRF-6.16. Todas as mudanças são múltiplos de 1000. Não é assim com você?
juriy5555: Tenho uma demonstração na Openbroker e uma conta real no mesmo lugar. No servidor Access real todos dão o mesmo resultado. bem na demonstração o mesmo. Vejamos Si-6.16, RTS-6.16, SBRF-6.16. Todas as mudanças são múltiplos de 1000. Não é assim?
Neste momento, a consulta SymbolInfoTick retorna zeros na estrutura MqlTick em vez de milissegundos reais (um múltiplo de 1000)
Por favor, aguarde a próxima construção.
PS a pedido CopyTicks milissegundos são dados como está
Fiz o download deste indicador a partir deste tópico para testá-lo. Recebe os últimos 30 ticks exatamente através de CopyTicks. Como opção, talvez eu devesse tentar em um servidor diferente (não um corretor aberto).
>> "são dados zeros em vez de milissegundos reais".
Não são dados zeros, mas sempre os mesmos números com um múltiplo de 1000. (...2064, ...2064, ...3064, ..., ..., ..4064 )
Fiz o download deste indicador a partir deste tópico para testá-lo. Recebe os últimos 30 ticks exatamente através de CopyTicks. Alternativamente, talvez eu devesse tentar em um servidor diferente (não um corretor aberto).
>> "são dados zeros em vez de milissegundos reais".
Não são dados zeros, mas sempre os mesmos números com um múltiplo de 1000. (...2064, ...2064, ...3064, ..., ..., ..4064 )
Em CopyTicks são dados milissegundos reais. Se é 2064, 3064, 4064, isso significa que foi assim. Por que foi assim, não sei.
Eu olhei através de seu código. Qual é o especificador de saída %-4d? time_msc é longo, então apenas d não funciona. Deve ser %I64d.
Sim, desculpe. O código não é meu. O autor do código realmente tem um deslize em StringFormat. Imprimi em cada iteração do loop através de Print (tick.time_msc) . O resultado são todos zeros no final e ainda não recebemos milissegundos. O pedido doCopyTicks persiste.
Sim, desculpe. O código não é meu. O autor realmente tem um bug em StringFormat. Imprimir (tick.time_msc) em cada iteração do laço. O resultado são todos zeros no final e ainda não recebemos milissegundos. O pedidoCopyTicks vai o tempo todo.
Aqui está seu indicador sobre os dados da MetaQuotes Demo
Pergunte a seu corretor sobre ausência de milissegundos em carrapatos
Aqui está seu indicador sobre os dados da MetaQuotes Demo
Pergunte a seu corretor sobre a falta de milissegundos em carrapatos
Ainda não sei o que e para quem escrever, já estou nisso há alguns meses. Espero que o OpenBroker atualize o servidor afinal de contas. ps meu cliente constrói 1340
juriy5555 : Пока не знаю, что и у кому конкретно писать, я в этом несколько месяцев. Буду надеяться, что ОпенБрокер всё таки обновит сервер. ps мой билд клиента 1340
Também tenho uma dúvida, embora um plano um pouco diferente, e também gostaria de saber se as informações transmitidas pelos carrapatos estão corretas.
Uma pergunta sobre volumes reais.
Se você solicitar informações sobre ticks do indicador, o volume real vai para lá no array volume[]. E, em teoria, se você obtiver informações de ticks, o volume acumulado por vela deve corresponder ao valor da matriz volume[].
Aqui está um exemplo de código de teste:
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//--- indicator buffers mapping//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Получение данных по тикуMqlTick tick; // Структура хранения инфо по тикуSymbolInfoTick ( _Symbol ,tick ); // Получение данных по тикуPrint ( "ask: " + DoubleToString (tick.ask, _Digits )+ ", bid: " + DoubleToString (tick.bid, _Digits )+ ", last: " + DoubleToString (tick.last, _Digits )+
", vol: " ,tick.volume, ", flags: " ,tick.flags);
//--- Формирование объемаstaticulong sVol; // Суммарный объем из тиков на свечеif (prev_calculated<= 0 ) // Если первый запуск
sVol=tick.volume; // Запоминаем значение тикаelse
{
if (rates_total>prev_calculated) // Если образовалась новая свеча
{
sVol=tick.volume; // Запоминаем значение объема первого тика
}
else// Если новая свеча не образовалась
sVol+=tick.volume; // Суммируем объем тика с накопленным объемом
}
Print ( "Реальный объем: " ,volume[rates_total- 1 ], ", накопленный объем: " ,sVol);
//--- return (rates_total);
}
//+------------------------------------------------------------------+
Não vamos nos apegar aos sinalizadores por enquanto e assumir que cada tick recebido altera o volume total de sVol (embora, até onde eu saiba, esse não seja o caso).
Estamos aguardando a formação de uma nova vela e observe as entradas no diário. Abertura de corretora, conta real, build 1340, RTS-6.16:
E assim sucessivamente, o volume real do indicador será muito maior que o acumulado. Isso levanta algumas questões para os desenvolvedores:
1. O volume obtido do array volume[] da função OnCalculate() deve ser igual ao volume acumulado obtido dos ticks? Minha opinião, é claro, deveria, caso contrário, por que indicá-la em carrapatos?
2. É correto utilizar a função OnCalculate() para acumular o volume, ou é melhor obter o volume através do OnBookEvent()? A ajuda diz:
O eventoCalcular é gerado apenas para indicadores imediatamente após o envio do evento Init e após qualquer alteração nos dados de preço. Manipulado pela função OnCalculate.
então, em teoria, está correto, mas eu gostaria de ouvir um comentário sobre isso.
3. Os resultados do teste são mostrados SEM análise de sinalizadores. Se analisarmos os sinalizadores, pelo que entendi, você precisa obter volumes de ticks com sinalizadores 24 (mudança simultânea no último e no volume):
TICK_FLAG_LAST - o tick alterou o preço da última negociação
TICK_FLAG_VOLUME - volume alterado de tick
Mas neste caso, o volume acumulado será ainda menor. Gostaria de ouvir os comentários dos desenvolvedores sobre como analisar corretamente os ticks agora (já que todos os campos são gravados) e os sinalizadores estão implementados corretamente? A questão sobre a correção da implementação surgiu porque não notei carrapatos com sinalizadores:
TICK_FLAG_BUY - o tick ocorreu como resultado de uma transação de compra
TICK_FLAG_SELL – ocorreu um tick como resultado de um acordo de venda
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
A julgar pelas consultas do indicador de carrapato, os dados do campo time_msk são um múltiplo de 1000. ou seja, não estamos falando de milissegundos, a resolução é de 1 segundo.
Pergunta: qual foi então o objetivo de ampliar a estrutura do MqlTick?
Não é assim com você?
Tenho uma demonstração na Openbroker e uma conta real no mesmo lugar. No servidor Access real todos dão o mesmo resultado. bem na demonstração o mesmo. Vejamos Si-6.16, RTS-6.16, SBRF-6.16. Todas as mudanças são múltiplos de 1000.
Não é assim?
Neste momento, a consulta SymbolInfoTick retorna zeros na estrutura MqlTick em vez de milissegundos reais (um múltiplo de 1000)
Por favor, aguarde a próxima construção.
PS a pedido CopyTicks milissegundos são dados como está
Fiz o download deste indicador a partir deste tópico para testá-lo. Recebe os últimos 30 ticks exatamente através de CopyTicks. Como opção, talvez eu devesse tentar em um servidor diferente (não um corretor aberto).
>> "são dados zeros em vez de milissegundos reais".
Não são dados zeros, mas sempre os mesmos números com um múltiplo de 1000. (...2064, ...2064, ...3064, ..., ..., ..4064 )
Fiz o download deste indicador a partir deste tópico para testá-lo. Recebe os últimos 30 ticks exatamente através de CopyTicks. Alternativamente, talvez eu devesse tentar em um servidor diferente (não um corretor aberto).
>> "são dados zeros em vez de milissegundos reais".
Não são dados zeros, mas sempre os mesmos números com um múltiplo de 1000. (...2064, ...2064, ...3064, ..., ..., ..4064 )
Os zeros são passados pela função SymbolInfoTick.
Em CopyTicks são dados milissegundos reais. Se estes são 2064, 3064, 4064, isso significa que foi assim. Por que foi assim, não sei.
Eu olhei através de seu código. Qual é o especificador de saída %-4d? time_msc é longo, então apenas d não funciona. Deve ser %I64d.
Os zeros são dados pela função SymbolInfoTick.
Em CopyTicks são dados milissegundos reais. Se é 2064, 3064, 4064, isso significa que foi assim. Por que foi assim, não sei.
Eu olhei através de seu código. Qual é o especificador de saída %-4d? time_msc é longo, então apenas d não funciona. Deve ser %I64d.
Sim, desculpe. O código não é meu. O autor do código realmente tem um deslize em StringFormat. Imprimi em cada iteração do loop através de Print (tick.time_msc) . O resultado são todos zeros no final e ainda não recebemos milissegundos. O pedido doCopyTicks persiste.
Os zeros são dados pela função SymbolInfoTick.
Em CopyTicks são dados milissegundos reais. Se é 2064, 3064, 4064, assim foi. Por que foi assim, não sei.
Veja o seu código. Qual é o especificador de saída %-4d? time_msc - é longo, é por isso que simplesmente d não funciona. Deve ser %I64d.
Indicador alterado do primeiro post - não brinque com StringFormat, deveria ser assim agora:
Sim, desculpe. O código não é meu. O autor realmente tem um bug em StringFormat. Imprimir (tick.time_msc) em cada iteração do laço. O resultado são todos zeros no final e ainda não recebemos milissegundos. O pedidoCopyTicks vai o tempo todo.
Aqui está seu indicador sobre os dados da MetaQuotes Demo
Pergunte a seu corretor sobre ausência de milissegundos em carrapatos
Aqui está seu indicador sobre os dados da MetaQuotes Demo
Pergunte a seu corretor sobre a falta de milissegundos em carrapatos
ps meu cliente constrói 1340
juriy5555 :
Пока не знаю, что и у кому конкретно писать, я в этом несколько месяцев. Буду надеяться, что ОпенБрокер всё таки обновит сервер.
ps мой билд клиента 1340
Também tenho uma dúvida, embora um plano um pouco diferente, e também gostaria de saber se as informações transmitidas pelos carrapatos estão corretas.
Uma pergunta sobre volumes reais.
Se você solicitar informações sobre ticks do indicador, o volume real vai para lá no array volume[]. E, em teoria, se você obtiver informações de ticks, o volume acumulado por vela deve corresponder ao valor da matriz volume[].
Aqui está um exemplo de código de teste:
Não vamos nos apegar aos sinalizadores por enquanto e assumir que cada tick recebido altera o volume total de sVol (embora, até onde eu saiba, esse não seja o caso).
Estamos aguardando a formação de uma nova vela e observe as entradas no diário. Abertura de corretora, conta real, build 1340, RTS-6.16:
E assim sucessivamente, o volume real do indicador será muito maior que o acumulado. Isso levanta algumas questões para os desenvolvedores:
1. O volume obtido do array volume[] da função OnCalculate() deve ser igual ao volume acumulado obtido dos ticks? Minha opinião, é claro, deveria, caso contrário, por que indicá-la em carrapatos?
2. É correto utilizar a função OnCalculate() para acumular o volume, ou é melhor obter o volume através do OnBookEvent()? A ajuda diz:
O evento Calcular é gerado apenas para indicadores imediatamente após o envio do evento Init e após qualquer alteração nos dados de preço. Manipulado pela função OnCalculate.
então, em teoria, está correto, mas eu gostaria de ouvir um comentário sobre isso.
3. Os resultados do teste são mostrados SEM análise de sinalizadores. Se analisarmos os sinalizadores, pelo que entendi, você precisa obter volumes de ticks com sinalizadores 24 (mudança simultânea no último e no volume):
Mas neste caso, o volume acumulado será ainda menor. Gostaria de ouvir os comentários dos desenvolvedores sobre como analisar corretamente os ticks agora (já que todos os campos são gravados) e os sinalizadores estão implementados corretamente? A questão sobre a correção da implementação surgiu porque não notei carrapatos com sinalizadores:
O arquivo do indicador também está no aplicativo.