Ooh! Erro 130 aparece no diário de bordo. Estas são as paradas erradas, não são? MAS a nova parada de perda é 1.3282. O limite de perda no momento atual é 1,3275 (este também é o preço de abertura do pedido) e a cotação atual é 1,3297. Onde está o erro?
Mas eu tenho feito o que você está fazendo há cinco dias e já comecei a pensar à noite.
É mais fácil dizer quem não pensa à noite, se for ao contrário. Eu tenho a mesma situação. Além disso, ninguém me incomoda durante a noite. A propósito, li uma vez que, tipo, o cérebro pensa melhor à noite. É como se os cientistas descobrissem...
artmedia70: DoubleToStr(número,dígito) é para você
Muito obrigado! Eu precisava dele para comparar as características das velas (mais, menos, etc.) Eu o parafusei - ele funciona. Só não consegue entender como compara o tipo de string de dados? ou o dobro para string não traduz número para string? :-D
PS. Não funciona em indicador - apenas em roteiro... Quando eu chamar Alto[i] - somente 4 casas decimais aparecerão.
Estou escrevendo:
Alerta ("doubletostr High = ", DoubleToStr(High[1],5)); if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5)) { Alerta ("Mais"); } if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5)) { Alerta ("Menor");
}
Trabalha, ele escreve o resultado com cinco dígitos, sobre/subcontagens. O problema é que no indicador o conjunto de cordas não aparece no gráfico. Portanto...
Eu não entendo os desenvolvedores - por que eles tinham que complicar tanto as coisas? Por que se mostrar tantos dígitos na tabela, não vai riscar a função chamada com cinco dígitos? Talvez haja uma solução simples?
Estou lutando com uma função que deveria retornar True se a última posição no mercado fosse fechada com lucro, e False se não fosse fechada com prejuízo. Se esta função retornar True, então todas as posições (tanto as pendentes como as de mercado) são fechadas.
Eis o que saiu:
//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+bool isCloseByTakeLastOpenPos(int delta)
{
datetime lastOrderCloseTime = 0, // Время закрытия последнего открытого ордера
lastOOTHist = -1; // Время открытия последнего открытого ордера из историиfor (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют..if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия..
{
lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в историиint j = i;
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
else
{
lastOOTHist = OrderOpenTime();
Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
}
}
else
{
// Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
return(false);
}
for(int h=OrdersTotal()-1; h>=0; h--)
{
if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue;
if (lastOOTHist < OrderOpenTime()) return(false); // Выбранная рыночная позиция открыта позже закрытой по тейку
}
else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
}
return (true);
}
Artyom acima sugeriu onde eu tinha um bug. Eu o reescrevi para mim. Ainda não é a variante final, mas... já está bastante clara. Depois de dirigir o Expert Advisor, percebi imediatamente que as posições restantes não estavam fechadas e não estão sendo fechadas de forma alguma. Comecei a desenterrar qual era a razão. Eu recomendei um par de funções e percebi que está neste bloco:
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
else
{
lastOOTHist = OrderOpenTime();
Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
}
}
else
{
Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
return(false);
}
O comentário é acionado o tempo todo, exatamente:
Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
Eu o comentei, dirigi. Percebeu-se que este comentário:
Nunca aciona de forma alguma, mesmo quando há uma posição fechada por último. O que poderia estar errado?
Meus pensamentos, embora possa estar errado... Talvez você precise colocar este bloco
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
else
{
lastOOTHist = OrderOpenTime();
Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
}
}
else
{
// Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
return(false);
}
colocá-lo também no loop? Caso contrário, quem sabe em que direção o transbordo irá. A variável j conterá o número do índice da posição e não está explicitamente especificada em que direção a busca irá.
Estou lutando com uma função que deveria retornar True se a última posição no mercado fosse fechada com lucro, e False se não fosse fechada com prejuízo. Se esta função retornar True, então todas as posições (tanto as pendentes como as de mercado) são fechadas.
Eis o que saiu:
Artyom acima sugeriu onde eu tinha um bug. Eu o reescrevi para mim. Ainda não é a variante final, mas... já está bastante clara. Depois de dirigir o Expert Advisor, percebi imediatamente que as posições restantes não estavam fechadas e não estão sendo fechadas de forma alguma. Comecei a desenterrar qual era a razão. Eu recomendei algumas funções e percebi que a razão está neste bloco:
O comentário é acionado o tempo todo, exatamente:
Eu o comentei, dirigi. Percebeu-se que este comentário:
Nunca aciona de forma alguma, mesmo quando há uma posição fechada por último. O que poderia estar errado?
Meus pensamentos, embora possa estar errado... Talvez você precise colocar este bloco
colocá-lo também no loop? Caso contrário, quem sabe em que direção o transbordo irá. A variável j conterá o número do índice da posição e não está explicitamente especificada em que direção a busca irá.
A variável j deve ser explicitamente inicializada no início da função com um valor negativo. Experimente. Eu ainda não procurei mais.
Onde, nesta função, você lê o StopLoss do último fechado? Não há nada ali.
Vão dormir, todos! É sempre melhor pela manhã! É 1:00 da manhã! Boa noite! E a Artem já dormiu!
Há cinco dias eu faço o que você está fazendo e já comecei a pensar à noite. Boa noite.
Olá. Por que na variável pré-definida "Ponto", os zeros não estão definidos no log de teste de estratégia, no final, números redondos?
Пример:
static double lBUY;
lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.
if(lBUY==0.01)
{
Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);
}
Eu sou siberiano, sim. Perto de Krasnoyarsk.
Sibiryak, então, quase, zamlYak)).
Mas eu tenho feito o que você está fazendo há cinco dias e já comecei a pensar à noite.
É mais fácil dizer quem não pensa à noite, se for ao contrário. Eu tenho a mesma situação. Além disso, ninguém me incomoda durante a noite. A propósito, li uma vez que, tipo, o cérebro pensa melhor à noite. É como se os cientistas descobrissem...
Olá. Por que na variável pré-definida "Ponto", os zeros não estão definidos no log de teste de estratégia, no final, números redondos?
Пример:
static double lBUY;
lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.
if(lBUY==0.01)
{
Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);
}
E o que o Alert realmente produz?
DoubleToStr(número,dígito) é para você
Muito obrigado! Eu precisava dele para comparar as características das velas (mais, menos, etc.) Eu o parafusei - ele funciona. Só não consegue entender como compara o tipo de string de dados? ou o dobro para string não traduz número para string? :-D
PS. Não funciona em indicador - apenas em roteiro... Quando eu chamar Alto[i] - somente 4 casas decimais aparecerão.
Estou escrevendo:
Alerta ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5))
{
Alerta ("Mais");
}
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alerta ("Menor");
}
Trabalha, ele escreve o resultado com cinco dígitos, sobre/subcontagens. O problema é que no indicador o conjunto de cordas não aparece no gráfico. Portanto...
...escrita:
Alerta ("Duplo Alto Normalizado = ", NormalizeDuplo(Alto[1],5));
Não funciona - o resultado é > 1.1234
Eu não entendo os desenvolvedores - por que eles tinham que complicar tanto as coisas? Por que se mostrar tantos dígitos na tabela, não vai riscar a função chamada com cinco dígitos? Talvez haja uma solução simples?
Estou lutando com uma função que deveria retornar True se a última posição no mercado fosse fechada com lucro, e False se não fosse fechada com prejuízo. Se esta função retornar True, então todas as posições (tanto as pendentes como as de mercado) são fechadas.
Eis o que saiu:
Artyom acima sugeriu onde eu tinha um bug. Eu o reescrevi para mim. Ainda não é a variante final, mas... já está bastante clara. Depois de dirigir o Expert Advisor, percebi imediatamente que as posições restantes não estavam fechadas e não estão sendo fechadas de forma alguma. Comecei a desenterrar qual era a razão. Eu recomendei um par de funções e percebi que está neste bloco:
O comentário é acionado o tempo todo, exatamente:
Eu o comentei, dirigi. Percebeu-se que este comentário:
Nunca aciona de forma alguma, mesmo quando há uma posição fechada por último. O que poderia estar errado?
Meus pensamentos, embora possa estar errado... Talvez você precise colocar este bloco
colocá-lo também no loop? Caso contrário, quem sabe em que direção o transbordo irá. A variável j conterá o número do índice da posição e não está explicitamente especificada em que direção a busca irá.
Estou lutando com uma função que deveria retornar True se a última posição no mercado fosse fechada com lucro, e False se não fosse fechada com prejuízo. Se esta função retornar True, então todas as posições (tanto as pendentes como as de mercado) são fechadas.
Eis o que saiu:
Artyom acima sugeriu onde eu tinha um bug. Eu o reescrevi para mim. Ainda não é a variante final, mas... já está bastante clara. Depois de dirigir o Expert Advisor, percebi imediatamente que as posições restantes não estavam fechadas e não estão sendo fechadas de forma alguma. Comecei a desenterrar qual era a razão. Eu recomendei algumas funções e percebi que a razão está neste bloco:
O comentário é acionado o tempo todo, exatamente:
Eu o comentei, dirigi. Percebeu-se que este comentário:
Nunca aciona de forma alguma, mesmo quando há uma posição fechada por último. O que poderia estar errado?
Meus pensamentos, embora possa estar errado... Talvez você precise colocar este bloco
colocá-lo também no loop? Caso contrário, quem sabe em que direção o transbordo irá. A variável j conterá o número do índice da posição e não está explicitamente especificada em que direção a busca irá.