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 chamo Alto[i] - recebo apenas 4 casas decimais nele.
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 tiveram que complicar tanto as coisas? Por que, se ele mostra tantos dígitos na tabela, não vai riscar a função chamada com cinco dígitos? Talvez haja uma solução simples?
artmedia70: 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.
Hmm. Até agora a mesma coisa. Aqui nós temos:
//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+bool isCloseByTakeLastOpenPos(int delta)
{
datetime lastOrderCloseTime = 0, // Время закрытия последнего открытого ордера
lastOOTHist = -1; // Время открытия последнего открытого ордера из историиint j = -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(); // ..последней закрытой позиции в истории
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);
}
É compreensível... agora...) Mas a questão é que eu preciso de alguma forma desenterrar um quinto dígito para os cálculos(
Se o DoubleToStr() não é bom para ele, então este idioma não tem tal característica? Os desenvolvedores não previram isto?
Os cálculos utilizam ainda mais dígitos do que você pensa. Se você quiser ver com a precisão que deseja, use DoubleToStr(). Você não verá isso de outra forma.
Cavalheiros programadores! Favor aconselhar como combinar um EA com um indicador?
Por exemplo, peguei um simples bot mo_bidir.mq4 que negocia usando seu próprio algoritmo e quero que ele continue abrindo negócios usando seu próprio algoritmo, mas após o sinal de 3 МА.
O que eu preciso é que o Expert Advisor continue negociando em 5 minutos e que o indicador dê sinais do prazo diário ou de 4 horas, e eu quero ser capaz de mudar os prazos nas configurações do bot.
Bom dia a todos os comerciantes. Talvez esta questão já tenha sido discutida, mas alguns EAs do codebase não estão compilando em novas construções, o compilador jura que é uma versão descompilada. Mas isso parece ser um absurdo, as versões nunca foram descompiladas
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 chamo Alto[i] - recebo apenas 4 casas decimais nele.
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 tiveram que complicar tanto as coisas? Por que, se ele mostra tantos dígitos na tabela, não vai riscar a função chamada com cinco dígitos? Talvez haja uma solução simples?
Fica ainda mais interessante:
traduzir
Alerta ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));
Escrito: 1,32169 - OK.
Converter de volta para um valor numérico usando StrToDouble:
Alerta ("iFractals StrToDoubledoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));
Resultado: 1.3217
Deve haver um memorando com Jackie Chan onde ele não entenda o chip).
E o que o Alert realmente produz?
Diz 0,01, mas na verdade é 0...0100.
Fica ainda mais interessante:
traduzir
Alerta ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));
Escrito: 1,32169 - OK.
Converter de volta para um valor numérico usando StrToDouble:
Alerta ("iFractals StrToDoubledoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));
Resultado: 1.3217
Deve haver um memorando com Jackie Chan onde ele entendeu mal o chip).
DoubleToStr() é usado para emitir mensagens com a precisão que você deseja. Impressão padrão (), Alerta(), etc., imprimir em 4 dígitos.
Quando você quer ver um número com a precisão desejada, é quando você usa DoubleToStr(), não nos cálculos.
Você não precisa traduzir nada para frente e para trás ... ;)
Diz 0,01 mas o valor real é 0...0100.
Saída então 100 * ponto = 100 * 0,00001 = 0,001pp (se para cinco dígitos)
O valor do lBUY foi alterado acima. Portanto, na minha opinião, a condição:
Não será cumprida. E, portanto, o valor do lBUY permanecerá o mesmo.
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.
Hmm. Até agora a mesma coisa. Aqui nós temos:
DoubleToStr() é usado para emitir mensagens com a precisão que você deseja. Impressão padrão(), Alerta(), etc., imprimirá 4 dígitos.
Quando você quer ver um número com a precisão desejada, é quando você usa DoubleToStr(), não nos cálculos.
Você não precisa traduzir nada para frente e para trás ... ;)
É compreensível... agora...) Mas a questão é que eu preciso de alguma forma desenterrar um quinto dígito para os cálculos(
Se o DoubleToStr() não é bom para ele, então este idioma não tem tal característica? Os desenvolvedores não previram isto?
Hmm. É o mesmo até agora. Aqui estamos nós:
É compreensível... agora...) Mas a questão é que eu preciso de alguma forma desenterrar um quinto dígito para os cálculos(
Se o DoubleToStr() não é bom para ele, então este idioma não tem tal característica? Os desenvolvedores não previram isto?
Cavalheiros programadores! Favor aconselhar como combinar um EA com um indicador?
Por exemplo, peguei um simples bot mo_bidir.mq4 que negocia usando seu próprio algoritmo e quero que ele continue abrindo negócios usando seu próprio algoritmo, mas após o sinal de 3 МА.
Por exemplo, em um sinal - Três Médias em Movimento:
FastEMA>MediumEMA>SlowEMA (tendência acima) - bot compra
FastEMA<MediumEMA<SlowEMA (tendência down) - bot vende
Inp_Signal_ThreeEMA_FastPeriod = 8;
Inp_Signal_ThreeEMA_MediumPeriod = 38;
Inp_Signal_ThreeEMA_SlowPeriod = 48;
O que eu preciso é que o Expert Advisor continue negociando em 5 minutos e que o indicador dê sinais do prazo diário ou de 4 horas, e eu quero ser capaz de mudar os prazos nas configurações do bot.