Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 858

 

Boa tarde.

O indicador na janela mostra até 5 casas decimais.

Ao utilizá-lo em um Expert Advisor através de iCustom(Symbol(), PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0) ele mostra até 4 casas decimais (definidas pelo comando Print).

Como posso ter 5 dígitos no quadro?

 
Imprima com a função DoubleToString e você terá os 5 caracteres que quiser. Se você quiser, você também pode obter 8 caracteres.
 
AlexeyVik:
Imprima usando a função DoubleToString e você terá os 5 dígitos que desejar. Se você quiser, você também pode conseguir 8.
Em outras palavras, os cálculos dos indicadores no Expert Advisor são realizados em 5 dígitos, e Print corta o 4º dígito quando este é exibido no Journal?
 
Craft:
Em outras palavras, os cálculos dos indicadores no Expert Advisor são feitos com 5 casas decimais e Print cortará o resultado para 4 casas decimais quando ele for exibido no Journal?

O resultado do cálculo pode ter até 16 casas decimais se não for normalizado:

Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна.
Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно указанном формате необходимо использовать функцию PrintFormat(). 

A saída do cálculo diretamente via Impressão não é cortada. Há algo mais no código, a normalização, por exemplo.




 

O problema é esse, não há mais nada (normalizações, etc.):

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Imprimir ("g_macd=",g_macd);

O g_MACD tem um valor (do 1º buffer) no indicador até a 5ª casa decimal, enquanto a impressão no log mostra um valor até a 4ª casa decimal, o que não é aceitável.

Como resolver este problema?

 
Craft:

O problema é esse, não há mais nada (normalizações, etc.):

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Imprimir ("g_macd=",g_macd);

O g_MACD tem um valor (do 1º buffer) no indicador até a 5ª casa decimal, enquanto a impressão no log mostra um valor até a 4ª casa decimal, o que não é aceitável.

Como resolver este problema?

Procure em seu código, o problema está em algum lugar lá.

Para testá-lo, eu executei um script simples com chamada WPR e imprimi o resultado da chamada indicadora:

 double wpr1=iWPR(NULL,0,1440,1);
 Print("WPR=",wpr1);

****2015.03.08 01:12:15	2015.03.06 22:59 **** EURUSD,H1: WPR=-99.1902834008098


O próprio indicador, como você sabe, mostra valores com 4 casas decimais em sua janela, mas para os Expert Advisors ele mostra 13 e até 14.

 
Pokrov:

Olá! Por favor, veja o código abaixo, criação do objeto "Seta" no sinal, as setas não são desenhadas no testador, embora o log passe, e também no log na inicialização no testador escreve um erro TestGenerator: erro de dados incomparável (limite de volume 412 em 2014.10.13 17:10 excedido),

E durante os testes gera um erro "Checking USDJPYm,M5 arrow: Error in object creation: code #4200" - mas acho que isto é normal, porque no início o programa descobre que o objeto foi criado, e depois de apagá-lo, o cria novamente. Em geral, ficaria grato por seus comentários às perguntas.

Não julgue estritamente como escrito.


Pessoal, ajudem-me com as setas, por favor!!!

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}
 
Pokrov:

Pessoal, ajudem-me com as setas, por favor!!!

Descubra esta linha.

bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);

Veja onde a seta está desenhada.

 
AlexeyVik:

Descubra esta linha

Veja onde a seta está desenhada.

Agora eu tenho as setas e elas estão se movendo de sinal em sinal de acordo com os pontos,

Posso então analisar o acionamento do sinal no gráfico?

 
Pokrov:

Obrigado, Alexey! ajudou, agora as setas aparecem e passam de sinal em sinal por pontos, mas como devo fazer as setas aparecerem e permanecer em seus lugares em cada sinal?

Posso então analisar o acionamento do sinal no gráfico?

Pare de se mover e desenhe novos.