Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 858

 

Buenas tardes.

El indicador de la ventana muestra hasta 5 decimales.

Al utilizarlo en un Asesor Experto a través de iCustom(Symbol(), PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0) muestra hasta 4 decimales (establecidos por el comando Print).

¿Cómo puedo conseguir 5 dígitos en el tablero?

 
Imprime con la función DoubleToString y obtendrás los 5 caracteres que quieres. Si lo desea, también puede obtener 8 caracteres.
 
AlexeyVik:
Imprime usando la función DoubleToString y obtendrás los 5 dígitos que quieres. Si quieres, también puedes conseguir 8.
En otras palabras, los cálculos del indicador en el Asesor Experto se realizan sobre 5 dígitos, e Imprimir corta el cuarto dígito cuando se muestra en el Diario?
 
Craft:
En otras palabras, los cálculos de los indicadores en el Asesor Experto se realizan con 5 decimales e Imprimir recortará el resultado a 4 decimales cuando se muestre en el Diario?

El resultado del cálculo puede tener hasta 16 decimales si no está normalizado:

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

La salida del cálculo directamente a través de Print no se corta. Hay algo más en el código, la normalización, por ejemplo.




 

Esa es la cuestión, no hay nada más (normalizaciones, etc.):

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

Imprimir ("g_macd=",g_macd);

g_MACD tiene un valor (del 1er búfer) en el indicador al 5º decimal, mientras que Print en el registro muestra un valor al 4º decimal, lo que no es aceptable.

¿Cómo resolver este problema?

 
Craft:

Esa es la cuestión, no hay nada más (normalizaciones, etc.):

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

Imprimir ("g_macd=",g_macd);

g_MACD tiene un valor (del 1er búfer) en el indicador al 5º decimal, mientras que Print en el registro muestra un valor al 4º decimal, lo que no es aceptable.

¿Cómo resolver este problema?

Mira en tu código, el problema está en alguna parte.

Para probarlo, ejecuté un sencillo script con la llamada WPR e imprimí el resultado de la llamada al indicador:

 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


El propio indicador, como sabes, muestra valores con 4 decimales en su ventana, pero para Expert Advisors muestra 13 e incluso 14.

 
Pokrov:

Hola! Por favor, mira el código de abajo, la creación del objeto "Flecha" en la señal, las flechas no se dibujan en el probador, aunque el registro pasa, y también en el registro en el inicio en el probador escribe un error TestGenerator: error de datos no coincidentes (límite de volumen 412 en 2014.10.13 17:10 superado),

Y durante las pruebas da un error "Checking USDJPYm,M5 arrow: Error en la creación del objeto: código #4200" - pero supongo que esto es normal, porque al principio el programa encuentra que el objeto fue creado, y después de borrarlo, lo crea de nuevo. En general, le agradecería sus comentarios a las preguntas.

No juzgue estrictamente como está escrito.


¡¡¡Amigos, ayúdenme con las flechas, 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:

¡¡¡Amigos, ayúdenme con las flechas, por favor!!!

Imagínate esta línea.

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

Mira dónde está dibujada la flecha.

 
AlexeyVik:

Calcula esta línea

Mira dónde está dibujada la flecha.

Ahora tengo las flechas y se mueven de señal a señal según los puntos,

¿Puedo entonces analizar la activación de la señal en el gráfico?

 
Pokrov:

Gracias, Alexey! Me ayudó, ahora las flechas aparecen y se mueven de señal a señal por puntos, pero ¿cómo debo hacer para que las flechas aparezcan y permanezcan en sus lugares en cada señal?

¿Puedo entonces analizar la activación de la señal en el gráfico?

Deja de moverte y dibuja otros nuevos.
Razón de la queja: