Porque é que estás a lutar? Porque não fazemos algo útil juntos?
Stanislav publicou um guião fantasticamente útil em KB. Cria facilmente arquivos com ficheiros MQL e recursos.
Tenho um EA com centenas de ficheiros mqh. Usando o script posso agora facilmente transferir a minha EA para o código fonte, controlar as versões e partilhar com outros.
This script allows you to assemble a zip-file of your MQL5-program with all dependencies automatically. The dependencies are: included source files via #include directive (both modes of absolute () and relative ("") references are supported); icons linked by #property icon directive; resources (images, sounds, and other types) embedded by...
Anton Shpilyuk:
2) Циклом-перебором до тех пор пока дата не будет совпадать(минус - скорость работы)
это так?
Sobre o tema "obter índice de barras por copiratos do tempo".
Horror, é mesmo! A tarefa era obter as barras de tempo M1 no indicador, embora o indicador em si funcione no período de tempo M5.
1. tivemos de inicializar o prazo desejado em OnCalculate() para carregá-lo antes do início do indicador (após a inicialização o FirstStartFlag = falso;). Lembre-se, nos indicadores, se não estiver carregada, dará -1 ou não totalmente carregada, por isso verificamos quanto está carregada, se não for suficiente, vamos para o início doregresso(0);
declarar taxas MqlRates de array[]; no início, ondecnt_bars*5; - recalcular o número de barras M5 em M1
//--- загрузка данных М1 таймфрейма для поминутной экспирации в оптимизаторе if(FirstStartFlag)
{
int count = cnt_bars*5;
int copied=CopyRates(_Symbol,PERIOD_M1,0,count,rates);
if(copied>0)
{
if(debug) Print("Скопировано баров: "+IntegerToString(copied)+", надо было "+IntegerToString(count));
if(copied<count)
{
Print("Не удалось получить достаточно исторических данных, ждем");
return(0);
}
}
else
{
Print("Не удалось получить исторические данные, ждем");
return(0);
}
ArraySetAsSeries(rates,true);
}
Depois disso, actualizamos os dados históricos sobre M1 no corpo da função requerida sempre que efectuamos cálculos:
//--- загрузка актуальных данных М1 таймфрейма для поминутной экспирации в оптимизаторе int count = cnt_bars*5;
copied=CopyRates(_Symbol,PERIOD_M1,0,count,rates);
if(copied>0)
{
Print("cnt_Statist() Скопировано баров: "+IntegerToString(copied)+", надо было "+IntegerToString(count));
if(copied<count)
{
Print("cnt_Statist() Не удалось получить достаточно исторических данных");
}
}
else
{
Print("cnt_Statist() Не удалось получить исторические данные");
}
ArraySetAsSeries(rates,true);
Além disso, no laço de barras M5, fazemos um laço embutido de procura do índice da barra M1 correspondente,sendo o tempo[s] a barra M5 actual do intervalo de tempo em cálculo:
E depois usamos este índice para encontrar os dados necessários da barra M1, no meu caso são taxas[IndexRates-5].tempo e taxas[IndexRates-k-4].fechar
Graças a Deus, este loop aninhado atravessa as barras rapidamente, mesmo numa história de 90 dias. Mas gostaria de poder pesquisar o índice de barras nas taxas de matriz[].tempo usando a função de pesquisa binária ArrayBsearch
Константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Breve síntese do insecto: Quando há herança de classe A <= B <= C <= D e duas funções de sobrecarga são implementadas, por exemplo, uma com o parâmetro A* e outra com o parâmetro B*, Ao passar um objecto C* ou D* para tal função, o MQL causa um erro de compilação de "chamada ambígua para função sobrecarregada".
Pergunta: Haverá uma solução mais sensata para este insecto idiota do que a apresentada acima?
Sergey Dzyublik: O MQL está a desmoralizar-se pouco a pouco:
Breve síntese do insecto: Quando há herança de classe A <= B <= C <= D e duas funções são implementadas, por exemplo, uma para A* e uma para B*, Ao passar um objecto C* ou D* para tal função, o MQL causa um erro de compilação de "chamada ambígua para função sobrecarregada".
Pergunta: Haverá uma solução mais sensata para este insecto idiota do que a acima referida?
Bem, o STL não é transposto um a um. É necessário analisar atentamente as especificidades aqui. A forma mais fácil é escrever toda a funcionalidade possível nos métodos abstractos numa classe base ou interface, e nos descendentes - ou implementação ou =delte. Neste caso, é necessário passar indicações ou referências do mesmo tipo para os métodos da classe base. Embora exista um mal inevitável sob a forma de uma mesa virtual, mas é melhor organizar a arquitectura de tal forma que não haja ramificações dispendiosas via dynamic_cast em qualquer lugar.
Porque é que estás a lutar? Porque não fazemos algo útil juntos?
Stanislav publicou um guião fantasticamente útil em KB. Cria facilmente arquivos com ficheiros MQL e recursos.
Tenho um EA com centenas de ficheiros mqh. Usando o script posso agora facilmente transferir a minha EA para o código fonte, controlar as versões e partilhar com outros.
Obrigado. Vou tentar decompor e verificar as opções com os eventos do gráfico.
Dê uma vista de olhos ao tópico, tratado recentemente em pormenor -https://www.mql5.com/ru/forum/327888
Anton Shpilyuk: 2) Циклом-перебором до тех пор пока дата не будет совпадать(минус - скорость работы) это так?Sobre o tema "obter índice de barras por copiratos do tempo".
Horror, é mesmo! A tarefa era obter as barras de tempo M1 no indicador, embora o indicador em si funcione no período de tempo M5.
1. tivemos de inicializar o prazo desejado em OnCalculate() para carregá-lo antes do início do indicador (após a inicialização o FirstStartFlag = falso;). Lembre-se, nos indicadores, se não estiver carregada, dará -1 ou não totalmente carregada, por isso verificamos quanto está carregada, se não for suficiente, vamos para o início doregresso(0);
declarar taxas MqlRates de array[]; no início, ondecnt_bars*5; - recalcular o número de barras M5 em M1
Depois disso, actualizamos os dados históricos sobre M1 no corpo da função requerida sempre que efectuamos cálculos:
Além disso, no laço de barras M5, fazemos um laço embutido de procura do índice da barra M1 correspondente,sendo o tempo[s] a barra M5 actual do intervalo de tempo em cálculo:
E depois usamos este índice para encontrar os dados necessários da barra M1, no meu caso são taxas[IndexRates-5].tempo e taxas[IndexRates-k-4].fechar
Graças a Deus, este loop aninhado atravessa as barras rapidamente, mesmo numa história de 90 dias. Mas gostaria de poder pesquisar o índice de barras nas taxas de matriz[].tempo usando a função de pesquisa binária ArrayBsearch
Breve síntese do insecto:
Quando há herança de classe A <= B <= C <= D
e duas funções de sobrecarga são implementadas, por exemplo, uma com o parâmetro A* e outra com o parâmetro B*,
Ao passar um objecto C* ou D* para tal função, o MQL causa um erro de compilação de "chamada ambígua para função sobrecarregada".
Pergunta: Haverá uma solução mais sensata para este insecto idiota do que a apresentada acima?
Aqui vamos com mais "Porquê MQL != C++"...
Porquê comentar algo se não se chegou ao fundo da questão?
Porquê comentar algo se não se chegou ao fundo da questão?
Porque há muito tempo abri um tópico para tais esclarecimentos (porque ninguém como vós o poderia fazer sozinho).
E depois que a diferença de línguas não tem nada a ver com erros ou bugs!
O MQL está a desmoralizar-se pouco a pouco:
Breve síntese do insecto:
Quando há herança de classe A <= B <= C <= D
e duas funções são implementadas, por exemplo, uma para A* e uma para B*,
Ao passar um objecto C* ou D* para tal função, o MQL causa um erro de compilação de "chamada ambígua para função sobrecarregada".
Pergunta: Haverá uma solução mais sensata para este insecto idiota do que a acima referida?
Bem, o STL não é transposto um a um. É necessário analisar atentamente as especificidades aqui. A forma mais fácil é escrever toda a funcionalidade possível nos métodos abstractos numa classe base ou interface, e nos descendentes - ou implementação ou =delte. Neste caso, é necessário passar indicações ou referências do mesmo tipo para os métodos da classe base. Embora exista um mal inevitável sob a forma de uma mesa virtual, mas é melhor organizar a arquitectura de tal forma que não haja ramificações dispendiosas via dynamic_cast em qualquer lugar.