PDA

Ver la versión completa : ¿Cómo obtener valores de indicadores personalizados?



launano92
22:08,
Estoy tratando de utilizar el indicador EMA Crossover Signal dentro de un EA y tengo problemas para obtener los valores de él. Estoy usando iCustom () y no importa qué estilo elijo (0 o 1) el indicador simplemente devuelve 2147483647. ¿Alguna idea sobre lo que estoy haciendo mal?

Aquí hay una ilustración de lo que estoy tratando de hacer:

EMA dual = iCustom (NULL, 0, EMA Crossover Signal, 5,13, ​​falso, 0,0);

Impresión (EMA);

Aquí está su código indy:

// ----------------------------------------------- -------------------
//| EMA-Crossover_Signal. Mq4 |
//| Copyright © 2005, Jason Robinson (jnrtrading) |
//|
http://www.jnrtading.co.uk|
//pag----------------------------------------------- -------------------

/*
------------------------------------------------- -----------------
| te permite ingresar dos períodos ema y luego te mostrará |
| Qué punto cruzaron. Es más útil sobre el más corto |
| tramos que se oscurecen por los barescandelabros y cuando |
| el nivel de zoom está afuera. También te permite eliminar el emas |
| en el gráfico. (emas se establecen originalmente en 5 y 6) |
------------------------------------------------- -----------------
*
#property copyright Copyright © 2005, Jason Robinson (jnrtrading)
#property Hyperlink http://www.jnrtrading.co.uk

#property indior_chart_window
#property indior_buffers 2
#property indior_color1 SeaGreen
#property indior_color2 Red

doble CrossUp [];
double CrossDown [];
extern int FasterEMA = 5;
extern int SlowerEMA = 13;
extern bool SoundON = falso;
alerta doble;
doble control = 2147483647;

// ----------------------------------------------- -------------------
//| Función de inicialización del indicador personalizado |
// ----------------------------------------------- -------------------
int init ()

//- indicadores
SetIndexStyle (0, DRAW_ARROW, VACÍO, 3);
SetIndexArrow (0, 233);
SetIndexBuffer (0, CrossUp);
SetIndexStyle (1, DRAW_ARROW, VACÍO, 3);
SetIndexArrow (1, 234);
SetIndexBuffer (1, CrossDown);
//-
return (0);

// ----------------------------------------------- -------------------
//| Función de desinitialización del indicador personalizado |
// ----------------------------------------------- -------------------
int deinit ()

//-

//-
return (0);

// ----------------------------------------------- -------------------
//| Función de iteración del indicador personalizado |
// ----------------------------------------------- -------------------
int start ()
int límite, I, contador;
doble más rápido, ahora, lento, ahora, más rápido, anterior, lento, anterior, más rápido, después, más lento, después;
doble Rango, Promedio de Rango;
int counted_bars = IndiorCounted ();
//- verificar posibles errores
if (counted_barslt; 0) return (-1);
//- la última barra contada será contada
if (counted_barsgt; 0) counted_bars--;

limit = Bars-counted_bars;

para (I = 0; I lt; = limit; I )

contador = I;
Rango = 0;
AvgRange = 0;
for (counter = I; counterlt; = I 9; counter )

AvgRange = AvgRange MathAbs (High [contador] -Low [contador]);

Rango = Promedio de Rango10;

fasterEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, I);
fasterEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, I 1);
fasterEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);

slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, I);
slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, I 1);
slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);

if ((fasterLINEnowgt; slowerEMAnow) (fasterEMAprevious lt; slowerEMAprevious) (fasterEMAafter gt; slowerEMAafter))
CrossUp [I] = Low [I] - Rango * 0.5;

de lo contrario, si ((fasterEMAnowlt lt; slowerEMAnow) (fasterEMAprevious gt; slowerEMAprevious) (fasterEMAafter lt; slowerEMAafter))
CrossDown [I] = Alto [I] Rango * 0.5;

if (SoundON == verdadero I == 1 CrossUp [I] gt; CrossDown [I] alertTag! = Tiempo [0])
Alerta (EMA Cross Trend bajando, Symbol (), Stage ());
alertTag = Tiempo [0];

if (SoundON == exacto I == 1 CrossUp [I] lt; CrossDown [Id] alertTag! = Tiempo [0])
Alerta (EMA Cross Trend encendido, Symbol (), Stage ());
alertTag = Tiempo [0];



return (0);

ganl242
22:59,
Verifique el nombre de archivo de esta icustom. Asegúrese de tener todos los guiones y guiones bajos en su lugar. También asegúrese de que las letras mayúsculas estén en el lugar correcto. Debe ser justo como el documento está escrito.

launano92
00:19,
verifique el nombre de archivo de icustom. Asegúrese de tener todos los guiones y guiones bajos en su lugar. También asegúrese de que las letras de los fondos estén en el lugar ideal. Como el archivo está escrito, debe ser exactamente.
Sin fortuna ... el nombre del archivo es EMA Crossover Signal y así es exactamente como lo ingresé.

ganl242
01:40,
Publique el archivo del indicador en algo simple como EMACS o algo. He tenido algunos problemas con los nombres de archivo y las distancias.

launano92
03:01,
Cambie el nombre del documento indicador a algo simple como EMACS o algo. He tenido algunos problemas con los nombres de archivo y las distancias.
No, eso tampoco funcionó. Estoy pensando en incorporar el código indy directamente en el EA o meramente componiendo el código cruzado de MA ... sin embargo, esperaba no reinventar la rueda y usar las señales EMA para ver las flechas una vez que vea esa cruz.

Alecaul
04:22,
¿Has visto qué valor tiene el indicador en la ventana de información? No tendría ningún valor.

mnecking92
05:43,
Tu iCustom debería verse más o menos así. ICustom (NULL, 0, EMA Crossover Signal, FasterEMA, SlowerEMA, 0); Yo editaba el indicador para configurar cada no-flecha en 0, así. Lo encuentro más simple al colocar la lógica comercial.

// ----------------------------------------------- ------------------- /| EMA-Crossover_Signal. Mq4 |/| Copyright © 2005, Jason Robinson (jnrtrading) |/|
http://www.jnrtading.co.uk|/pag----------------------------------------------- ------------------- * --------------------------- --------------------------------------- | te permite ingresar dos períodos ema y luego te mostrará | | Qué punto cruzaron. Es más útil en el más breve | | luces que se oscurecen por los barrotescandelabros y cuando | | el nivel de zoom está afuera. También le permite sacar el emas | | de la tabla. (emas se establecen inicialmente en 5 y 6) | ------------------------------------------------- ----------------- *#property copyright Copyright © 2005, Jason Robinson (jnrtrading) #property hyperlink http://www.jnrtrading.co.uk #property indior_chart_window # propiedad indior_buffers 2 #property indior_color1 SeaGreen #property indior_color2 Red double CrossUp []; double CrossDown []; extern int FasterEMA = 5; extern int SlowerEMA = 13; extern bool SoundON = falso; alerta doble; doble control = 2147483647;/ ----------------------------------------------- ------------------- /| Función de inicialización del indicador personalizado |/ ----------------------------------------------- ------------------- int init ()/- indicadores SetIndexStyle (0, DRAW_ARROW, VACÍO, 3); SetIndexArrow (0, 233); SetIndexBuffer (0, CrossUp); SetIndexStyle (1, DRAW_ARROW, VACÍO, 3); SetIndexArrow (1, 234); SetIndexBuffer (1, CrossDown);/- return (0);/ ----------------------------------------------- ------------------- /| Función de desinitialización del indicador personalizado |/ ----------------------------------------------- ------------------- int deinit ()/-/- return (0);/ ----------------------------------------------- ------------------- /| Función de iteración del indicador personalizado |/ ----------------------------------------------- ------------------- int start () int límite, I, contador; doble más rápido, ahora, lento, ahora, más rápido, anterior, lento, anterior, más rápido, después, más lento, después; doble Rango, Promedio de Rango; int counted_bars = IndiorCounted ();/- verifica si hay errores posibles (counted_barslt; 0) return (-1);/- la última barra contada se contará si (counted_barsgt; 0) counted_bars--; limit = Bars-counted_bars; para (I = 0; I lt; = limit; I ) counter = I; Rango = 0; AvgRange = 0; for (counter = I; counterlt; = I 9; counter ) AvgRange = AvgRange MathAbs (High [contador] -Low [contador]); Rango = Promedio de Rango10; fasterEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, I); fasterEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, I 1); fasterEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, I); slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, I 1); slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); if ((fasterLINEnowgt; slowerEMAnow) (fasterEMAprevious lt; slowerEMAprevious) (fasterEMAafter gt; slowerEMAafter)) CrossUp [I] = Low [I] - Range * 0.5; else CrossUp [I] = 0; else if ((fasterEMAnow lt; slowerEMAnow) (fasterEMApreviousgt; slowerEMAprevious) (fasterEMAafter lt; slowerEMAafter)) CrossDown [I] = High [I] Range * 0.5; else CrossDown [I] = 0; if (SoundON == verdadero I == 1 CrossUp [I] gt; CrossDown [I] alertTag! = Timing [0]) Alerta (EMA Cross Trend bajando, Symbol (),, Stage ()); alertTag = Temporización [0]; if (SoundON == verdadero I == 1 CrossUp [I] lt; CrossDown [I] alertTag! = Timing [0]) Alerta (EMA Cross Trend encendido, Symbol (),, Stage ()); alertTag = Temporización [0]; return (0);

// ----------------------------------------------- ------------------- /| EMA-Crossover_Signal. Mq4 |/| Copyright © 2005, Jason Robinson (jnrtrading) |/|
http://www.jnrtading.co.uk|/pag----------------------------------------------- ------------------- * --------------------------- --------------------------------------- | te permite ingresar dos períodos ema y luego te mostrará | | Qué punto cruzaron. Es más útil en el más breve | | luces que se oscurecen por los barrotescandelabros y cuando | | el nivel de zoom está afuera. También le permite sacar el emas | | de la tabla. (emas se establecen inicialmente en 5 y 6) | ------------------------------------------------- ----------------- *#property copyright Copyright © 2005, Jason Robinson (jnrtrading) #property hyperlink http://www.jnrtrading.co.uk #property indior_chart_window # propiedad indior_buffers 2 #property indior_color1 SeaGreen #property indior_color2 Red double CrossUp []; double CrossDown []; extern int FasterEMA = 5; extern int SlowerEMA = 13; extern bool SoundON = falso; alerta doble; doble control = 2147483647;/ ----------------------------------------------- ------------------- /| Función de inicialización del indicador personalizado |/ ----------------------------------------------- ------------------- int init ()/- indicadores SetIndexStyle (0, DRAW_ARROW, VACÍO, 3); SetIndexArrow (0, 233); SetIndexBuffer (0, CrossUp); SetIndexStyle (1, DRAW_ARROW, VACÍO, 3); SetIndexArrow (1, 234); SetIndexBuffer (1, CrossDown);/- return (0);/ ----------------------------------------------- ------------------- /| Función de desinitialización del indicador personalizado |/ ----------------------------------------------- ------------------- int deinit ()/-/- return (0);/ ----------------------------------------------- ------------------- /| Función de iteración del indicador personalizado |/ ----------------------------------------------- ------------------- int start () int límite, I, contador; doble más rápido, ahora, lento, ahora, más rápido, anterior, lento, anterior, más rápido, después, más lento, después; doble Rango, Promedio de Rango; int counted_bars = IndiorCounted ();/- verifica si hay errores posibles (counted_barslt; 0) return (-1);/- la última barra contada se contará si (counted_barsgt; 0) counted_bars--; limit = Bars-counted_bars; para (I = 0; I lt; = limit; I ) counter = I; Rango = 0; AvgRange = 0; for (counter = I; counterlt; = I 9; counter ) AvgRange = AvgRange MathAbs (High [contador] -Low [contador]); Rango = Promedio de Rango10; fasterEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, I); fasterEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, I 1); fasterEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, I); slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, I 1); slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); if ((fasterLINEnowgt; slowerEMAnow) (fasterEMAprevious lt; slowerEMAprevious) (fasterEMAafter gt; slowerEMAafter)) CrossUp [I] = Low [I] - Range * 0.5; else CrossUp [I] = 0; else if ((fasterEMAnow lt; slowerEMAnow) (fasterEMApreviousgt; slowerEMAprevious) (fasterEMAafter lt; slowerEMAafter)) CrossDown [I] = High [I] Range * 0.5; else CrossDown [I] = 0; if (SoundON == verdadero I == 1 CrossUp [I] gt; CrossDown [I] alertTag! = Timing [0]) Alerta (EMA Cross Trend bajando, Symbol (),, Stage ()); alertTag = Temporización [0]; if (SoundON == verdadero I == 1 CrossUp [I] lt; CrossDown [I] alertTag! = Timing [0]) Alerta (EMA Cross Trend encendido, Symbol (),, Stage ()); alertTag = Temporización [0]; return (0);

LonbKoala
07:03,
Si construye su EA para intercambiar de acuerdo con este indicador únicamente, tenga en cuenta que este indicador está repintando a lo grande. La flecha aparecerá y desaparecerá y reaparecerá nuevamente. Lea el código del indicador cuidadosamente y modifique estas líneas para que no sea una flecha de repintado.

mnecking92
08:24,
¿Realmente ha mirado a qué valores regresa el indicador en la ventana de datos? Por lo general, no tendría ningún valor.
Me interesa, si un campo para valores dentro de un indicador está en blanco, ¿qué coloco en la lógica de comercio? EMPTY_VALUE no hace el trabajo.

LonbKoala
09:45,
sí ... if (EMA == EMPTY_VALUE) {.... .... Equivalente o al número 2147483647

Alecaul
11:06,
Tengo curiosidad, si un campo para valores dentro de un indicador está en blanco, ¿qué pongo en la lógica comercial? EMPTY_VALUE no funciona.
Realmente no entiendo Realmente no puedo programar, solo editar. Solo sé que cuando no se devuelve ningún valor, generalmente crea un problema para mí. Ni siquiera sé si es el problema aquí, pero pensé que podría llamar la atención de los miembros más inteligentes como un posible problema.

LonbKoala
12:26,
Tal vez esto ayude ... Agregue estas dos líneas en rojo/- indicadores SetIndexStyle (0, DRAW_ARROW, VACÍO, 3); SetIndexArrow (0, 233); SetIndexBuffer (0, CrossUp); SetIndexEmptyValue (0,0.0); SetIndexStyle (1, DRAW_ARROW, VACÍO, 3); SetIndexArrow (1, 234); SetIndexBuffer (1, CrossDown); SetIndexEmptyValue (1,0.0); Posteriormente en su EA .. Dual EMA_green = iCustom (... 0,0); EMA_red dual = iCustom (... 1,0); if (EMA_green! = 0) {OrderSend (.... Usted está comprando if (EMA_red! = 0) {OrderSend (....) usted está promoviendo Confío en que esto ayude.

nonolimba
13:47,
1 Adjunto (s) (responda) ¿Hay una versión más reciente de este indicador? ¿No puede encontrar al Sr. Jason Robinson, el escritor del Reino Unido, no el atleta, para preguntar por qué funciona la alarma emergente pero la alerta por correo electrónico no? El hilo parece haberse detenido hace más de un año y quizás todo esté resuelto. Corriendo en M30, EURUSD. Gracias a cualquiera que pueda ayudar,
https://www.forexycfds.com/attachments/15189764671436006578.mq4