[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 284
hoz: Isso não importa. Estou devolvendo um valor absoluto, modulo através do MathAbs
Se você estiver procurando um ponto de entradaMathAbs() introduz uma mancha. Para mim, isso deve ser especificado do começo ao fim, para que fique claro quando e com que tolerância!
Se você estiver procurando o ponto de entradaMathAbs() o torna manchado. Para mim, isso deve ser especificado do começo ao fim, para que fique claro quando e com que tolerância!
Corrigido... De qualquer forma, nenhuma das condições está preenchida.
//+-------------------------------------------------------------------------------------+//| Получение значений МА на указанном баре |//+-------------------------------------------------------------------------------------+double GetMA(int index, int maPeriod)
{
return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+//| Имеет ли место отскок? |//+-------------------------------------------------------------------------------------+void IsRebound(int crossDir[], bool& returnSign[])
{
for (int i = 0; i < 4; i++)
{
if (crossDir[i] == CROSS_NO)
continue;
returnSign[i] = false;
double ema = GetMA(1, g_maPeriod[i]);
// VrPr (ND(MathAbs(ema - Ask)));// VrPr (i_thresholdFromMa * pt);if (crossDir[i] == CROSS_UP)
{
if (ND(Ask - ema) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
{
// VrPr (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt);
returnSign[i] = true;
VrPr (" returnSign["+0+"]"+" = "+ returnSign[0]);
VrPr (" returnSign["+1+"]"+" = "+ returnSign[1]);
VrPr (" returnSign["+2+"]"+" = "+ returnSign[2]);
VrPr (" returnSign["+3+"]"+" = "+ returnSign[3]);
}
}
if (crossDir[i] == CROSS_DN)
{
if (ND(ema - Bid) <= i_thresholdFromMa * pt) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
{
returnSign[i] = true;
VrPr (" returnSign["+0+"]"+" = "+ returnSign[0]);
VrPr (" returnSign["+1+"]"+" = "+ returnSign[1]);
VrPr (" returnSign["+2+"]"+" = "+ returnSign[2]);
VrPr (" returnSign["+3+"]"+" = "+ returnSign[3]);
}
}
}
}
pararetornarSign[i] = true; e consequentemente para a funçãoVrPr (que é a função que emite os dados que eu monitoreio) não é utilizada. Embora a travessia para baixo já tenha começado. Aqui está uma captura de tela, você pode ver que a matrizcrossDir[] é preenchida à medida que cada máquina rápida cruza a lenta.
Observe que 2 rodas cruzaram a mais grossa, e 2 elementos da matriz já atribuíram valor 1. Isso significa que seu valor éCROSS_DN
Se você estiver procurando um ponto de entrada,MathAbs() introduz a confusão. Para mim, isso deve ser especificado do começo ao fim, para que fique claro quando e com que tolerância!
Exceto visualmente, é mais fácil de perceber sem MathAbc() de hábito, mas... não há diferença. Mas nós nos desviamos do tema. Há alguma observação sobre meu código? Afinal, a questão ainda está em aberto...
int i;//аналогично i=0while((TimeCurrent()-time)>1){//то заносим старые значения столько раз, сколько было пропущено секунд минус одинif(FileSeek(hand1e, fpos, SEEK_SET) == false){//перемещаем указатель на новую позицию, которую мы запомнили в FileTell
error = GetLastError();//если ошибкаPrint("out: error(",error,"): ",ErrorDescription(error));//записываем её в лог
flag = false;
return;//и выходим
}else{//выдумываем несуществующую свечу (т.к. тика в эту секунду не было)
time++;
FileWriteInteger(hand1e, time, LONG_VALUE);//TimeCurrent()//выбор выдуманной свечи (секунда, при которой тика не было)://прочерк на Close[]/*
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Open[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//High[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Low[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Close[]
FileWriteDouble (hand1e, 0, DOUBLE_VALUE);//Volume[]
*///свеча без теней/*
FileWriteDouble (hand1e, bid[0], DOUBLE_VALUE);//Open[]
FileWriteDouble (hand1e, bid[0], DOUBLE_VALUE);//High[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Low[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Close[]
FileWriteDouble (hand1e, last.index+1, DOUBLE_VALUE);//Volume[]
*///такая же свеча, как и была (не прочерк и не без теней)FileWriteDouble (hand1e, bid[0], DOUBLE_VALUE);//Open[]FileWriteDouble (hand1e, bid[ArrayMaximum(bid)], DOUBLE_VALUE);//High[]FileWriteDouble (hand1e, ask[ArrayMinimum(ask)], DOUBLE_VALUE);//Low[]FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Close[]FileWriteDouble (hand1e, last.index+1, DOUBLE_VALUE);//Volume[]//конец выбораFileFlush (hand1e);
fpos = FileTell (hand1e);//запоминаем позицию записи в файле
}
}
ArrayResize(bid, 1);//урезаем и обнуляем использованные нмассивыArrayResize(ask, 1);
if(flag==true){
if(tick.time.local==true){//если флаг работы с историей поднят
time = TimeLocal();//работаем с локальным временемwhile(time==TimeLocal()){//пока секунда не прошла
bid[i]=MarketInfo(symbol, MODE_BID);//заносим в индикаторный массив данные тиков
ask[i]=MarketInfo(symbol, MODE_ASK);
i++;
}
}else{//иначе
time = TimeCurrent();//работаем с временем сервераwhile(time==TimeCurrent()){//пока секунда не прошла
bid[i]=MarketInfo(symbol, MODE_BID);//заносим в индикаторный массив данные тиков
ask[i]=MarketInfo(symbol, MODE_ASK);
i++;
}
}
}
//Вышли из цикла, т.к. время изменилось. Заносим в файл:if(FileSeek(hand1e, fpos, SEEK_SET) == false){//перемещаем указатель на новую позицию, которую мы запомнили в FileTell
error = GetLastError();//если ошибкаPrint("out: error(",error,"): ",ErrorDescription(error));//записываем её в лог
flag = false;
return;//и выходим
}else{
int last.index=ArraySize(ask)-1;
FileWriteInteger(hand1e, time, LONG_VALUE);//TimeCurrent()FileWriteDouble (hand1e, bid[0], DOUBLE_VALUE);//Open[]FileWriteDouble (hand1e, bid[ArrayMaximum(bid)], DOUBLE_VALUE);//High[]FileWriteDouble (hand1e, ask[ArrayMinimum(ask)], DOUBLE_VALUE);//Low[]FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Close[]FileWriteDouble (hand1e, last.index+1, DOUBLE_VALUE);//Volume[]FileFlush (hand1e);
fpos = FileTell (hand1e);//запоминаем позицию записи в файле
}
Comentários sobre o código.
1. Não fez a seleção da caixa de troca em velas virtuais para economizar tempo da CPU, em vez disso comentou seções com seleção (já que a seleção é feita para necessidades específicas uma vez antes da compilação).
2. No trabalho com hora local (off-line que é) não me lembro. No loop"while(time===TimeLocal()){/ até que um segundo tenha passado", suspeito que deve haverMarketInfo no FileWriteDouble (parece-me o topo de um idiota). Se você me disser o que pareceria mais lógico lá, eu ficarei grato.
3. A construção de um autor
if(flag == true)
{
if(tick.time.local == true)
{
time = TimeLocal();
}
else{
time = TimeCurrent();
}
5. Para otimização, você pode teoricamente usar as funções de arquivo WinAPI e escrever imediatamente no histórico em um bloco de 44 bytes (comprimento da estrutura MarketInfo ou o que quer que esteja em .hst).
6. Remoção completa do modelo de tempo de escrita do autor para a célula Time[]. Pela mesma razão, na cabeça enquanto loop não há verificação para TimeLocal(), apenas para TimeCurrent().
Isso não importa. Estou devolvendo um valor absoluto, modulo através do MathAbs
Se você estiver procurando um ponto de entradaMathAbs() introduz uma mancha. Para mim, isso deve ser especificado do começo ao fim, para que fique claro quando e com que tolerância!
Se você estiver procurando o ponto de entradaMathAbs() o torna manchado. Para mim, isso deve ser especificado do começo ao fim, para que fique claro quando e com que tolerância!
Corrigido... De qualquer forma, nenhuma das condições está preenchida.
pararetornarSign[i] = true; e consequentemente para a funçãoVrPr (que é a função que emite os dados que eu monitoreio) não é utilizada. Embora a travessia para baixo já tenha começado. Aqui está uma captura de tela, você pode ver que a matrizcrossDir[] é preenchida à medida que cada máquina rápida cruza a lenta.
Observe que 2 rodas cruzaram a mais grossa, e 2 elementos da matriz já atribuíram valor 1. Isso significa que seu valor éCROSS_DN
O que significa que a condição
if (crossDir[i] == CROSS_DN)
e depois...
Se você estiver procurando um ponto de entrada,MathAbs() introduz a confusão. Para mim, isso deve ser especificado do começo ao fim, para que fique claro quando e com que tolerância!
Também com quem e por quê.
Quem mais e por quê.
Exceto visualmente, é mais fácil de perceber sem MathAbc() de hábito, mas... não há diferença. Mas nós nos desviamos do tema. Há alguma observação sobre meu código? Afinal, a questão ainda está em aberto...
Não.
Boa tarde a todos!
Estou testando USD/JPY em MT-4 da Alpari.
Fiz o download do histórico de 1 minuto do USD/JPY
Nota: Após carregar no arquivo de cotações do histórico de minutos, clique duas vezes em "1 minuto".
A lista de citações de um minuto não aparece na janela do Arquivo de Citações do Banco de Dados por algum motivo.
1 hora TF.
Todos os carrapatos
Período 01.01.2000. - 01.01.2013.
No final dos testes, a guia REPORTS mostra uma barra vermelha e diz que a qualidade da simulação é de 25%.
Eu testei o mesmo período com os mesmos parâmetros ......mas separadamente para cada mês
e para cada mês mostra barra verde e qualidade de simulação de 90%.
Depois testei o mesmo período, mas o dividi em 2 partes iguais 2000-2006 e 2006-2013.
Para cada parte, a barra é verde e a qualidade da simulação é de 90%.
PERGUNTA
O que eu deveria fazer para que a qualidade dos testes por um período de 13 anos em geral também fosse de 90%?
Obrigado
Certo. Acho que já terminei. Aqui está o coletor de carrapatos retrabalhados com sua embalagem em segundas velas.
Foi:
Tornou-se:
Comentários sobre o código.
1. Não fez a seleção da caixa de troca em velas virtuais para economizar tempo da CPU, em vez disso comentou seções com seleção (já que a seleção é feita para necessidades específicas uma vez antes da compilação).
2. No trabalho com hora local (off-line que é) não me lembro. No loop"while(time===TimeLocal()){/ até que um segundo tenha passado", suspeito que deve haverMarketInfo no FileWriteDouble (parece-me o topo de um idiota). Se você me disser o que pareceria mais lógico lá, eu ficarei grato.
3. A construção de um autor
Eu o declarei logo no final do init().
4. No início do init() arrays dinâmicos
em vez de variáveis usadas.
5. Para otimização, você pode teoricamente usar as funções de arquivo WinAPI e escrever imediatamente no histórico em um bloco de 44 bytes (comprimento da estrutura MarketInfo ou o que quer que esteja em .hst).
6. Remoção completa do modelo de tempo de escrita do autor para a célula Time[]. Pela mesma razão, na cabeça enquanto loop não há verificação para TimeLocal(), apenas para TimeCurrent().
7. O que mais você sugere para otimizar o código?