¿Cómo codificar? - página 179

 
Roger09:
He probado varias veces en la cuenta de Alpari, sin errores. Solo una vez, cuando pongo el script en el directorio de expertos y lo lanzo como EA.

Es porque te pregunté sobre los directorios.

Lo siento.

Creo que he descubierto el problema. Estoy en window vista y suelo hacer "run as administrator". lo he probado sin hacer eso y parece que ahora funciona bien

 

Pasando un Array desde MT4 .mq4 a C++ DLL

Cualquier ayuda por favor.

Estoy teniendo un problema al pasar un solo Array que contiene 8 valores de indicadores a una DLL de C++. Es muy simple pero parece que obtengo -1 cuando llamo a la función

Forexindex() función que en realidad llama a la función importada gepModel ( d [] ) de la DLL . La función ForexIndex debería devolver 0 o 1 desde la DLL.

Sospecho que estoy haciendo algo mal en el archivo .mq4 en el Forexindex() . Cualquier ayuda será muy apreciada. Abajo está el código simple. El archivo DLL de C ++ está bien se compila sin errores por lo que el problema es con el archivo mq4 .

================================MQ4 file====================

#import "JadeClass.dll"

int gepModel( double& d[] );

#importar

int inicio()

{

........

........

........

ForexIndex();

.......

......

......

.....

}

int ForexIndex()

{

int myindex;

double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;

int counted_bars=IndicatorCounted();

if (counted_bars<0) return(-1);

if (counted_bars>0) counted_bars--;

int pos=Barras_contadas;

MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_High = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0);

Rsi = iRSI(NULL,PERIOD_M5,10,0,0);

Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0);

Vol = iVolumen(NULL,PERIOD_M5,0);

while(pos>=0)

{

ind[0] = MA_Close;

ind[1] = MA_High;

ind[2] = MA_Low;

ind[3] = MA_Open;

ind[4] = Macd;

ind[5] = Rsi;

ind[6] = Stoch;

ind[7] = Vol;

myindex = gepModel(ind);

pos--;

}

Print( " Myindex = " , myindex);

return (myindex);

}

=========================DLL Código fuente ===========================

#include "stdafx.h"

#include "JadeClass.h"

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

#define MT4_EXPFUNC __declspec(dllexport)

// El único objeto CJadeClassApp

CJadeClassApp laApp;

MT4_EXPFUNC int __stdcall gepModel(double d[]);

MT4_EXPFUNC int __stdcall gepModel(double d[])

{

.....

.....

.....

.....

}

============================ El archivo Def para el código fuente de la DLL ===================

; JadeClass.def : Declara los parámetros del módulo para la DLL.

LIBRARY "JadeClass"

EXPORTACIONES

; Las exportaciones explícitas pueden ir aquí

gepModel

========================================

 

Necesito ayuda para añadir código para una sola operación por señal

Estoy aprendiendo el código de mq4 y he pasado muchas horas tratando de averiguar cómo codificar una sola operación por señal. He intentado algunas maneras, pero no puedo conseguir que hacer sólo un comercio. Por ejemplo, si el TP es golpeado, colocaría otra operación del mismo lado debido a que la señal sigue siendo buena. Me gustaría que esperara hasta la señal inversa y luego poner en ese comercio. He adjuntado el EA aquí sin ninguno de mis cambios. Gracias de antemano por la ayuda. Marty

Archivos adjuntos:
 
martypatty:
Estoy aprendiendo el código de mq4 y he pasado muchas horas tratando de averiguar cómo codificar sólo una operación por señal. He intentado varias formas pero no puedo conseguir que se haga una sola operación. Por ejemplo, si el TP es golpeado, colocaría otra operación del mismo lado debido a que la señal sigue siendo buena. Me gustaría que esperara hasta la señal inversa y luego poner en ese comercio. He adjuntado el EA aquí sin ninguno de mis cambios. Gracias de antemano por la ayuda. Marty

Descubrí cómo hacer esto recientemente en mql4.com después de tener problemas con demasiadas operaciones abiertas en una barra. Los artículos en mql4 me ayudaron bastante al principio, además tienen una base de datos de código que te da buenos ejemplos para trabajar. Este sitio web tiene una excelente historia de los mensajes y algunos codificadores realmente bueno, sólo tiene que utilizar el servicio de búsqueda y haga clic en el botón de visualización como mensajes, le ahorra buscando a través de páginas y páginas de un tema sólo para la respuesta que usted necesita. En cuanto a su problema sólo tiene que utilizar este código:

int BarsCount=0;

if(Bars<BarsCount)

{

//Code to do once goes here

BarsCount=Bars;

}

[/CODE]

Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.

[CODE]for(i=0;i<=STD_MA_Period+1;i++)

{

STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);

}

Print(STD_MA_Buffer[1]);

PS double STD_MA_Buffer[]; está definido en la sección de variables globales.

 

arreglar mi EA, por favor

tengo alguna idea pero puedo escribirla en código mql4, ¿me pueden ayudar?

este es mi problema

esta es la definición de mi sistema:

A. si ordenes=0 >> OP compra && OP venta

B. hacer la rejilla por la condición + o -

ex. si OPbuy + grid = OPbuy

si OPbuy - grid = OPsell

lo mismo para OPsell

C. si beneficio > 0 && beneficio > beneficio mínimo ( bloqueo de beneficio )

detener cualquier orden ( OP compra || OP venta ) y mover la equidad de arrastre o el punto de beneficio

D. cerrar por beneficio puede ser por equidad o por punto

E. formato .mq4 porque quiero saber donde esta mi error

tengo problemas en el punto B. por favor ayudenme

 
mazgen:
Tengo alguna idea pero puedo escribirlo en código mql4, ¿pueden ayudarme?

este es mi problema

esta es la definición de mi sistema:

A. si órdenes=0 >> OP comprar && OP vender

B. hacer la rejilla por la condición + o -

ex. si OPbuy + grid = OPbuy

si OPbuy - grid = OPsell

lo mismo para OPsell

C. si beneficio > 0 && beneficio > beneficio mínimo ( bloqueo de beneficio )

detener cualquier orden ( OP compra || OP venta ) y mover la equidad de arrastre o el punto de beneficio

D. cerrar por beneficio puede ser por equidad o por punto

E. formato .mq4 porque quiero saber donde esta mi error

Tengo un problema en el punto B. Por favor, ayúdame

¿Qué hay de enviar el código fuente en lugar de ex4?

 
figurelli:
¿Qué hay de enviar el código fuente en lugar de ex4?

sólo muéstrame cómo codificarlo,

esta es mi última declaración detallada

arreglar este.rar

Espero que pueda entender mi EA, el problema que el bucle en OP vender por qué?

 

Pregunta sobrela línea de tendencia

Nuevo en la codificación y sólo haciendo cosas para practicar, quería detener una línea de tendencia en la barra actual. Lo que se me ocurrió fue simplemente cambiar el color de la misma en la barra actual al color de fondo. En esencia, sólo la mezcla de la línea más allá de la barra en el fondo y hacer que desaparezca en ese punto.

Así que ahora pregunto a los expertos cuál es la forma correcta de hacerlo. Sé que hay muchas maneras de lograr lo mismo, así que sólo estoy buscando para ver algunas otras ideas sobre lo que podría haber hecho, en un esfuerzo por aprender más.

Gracias

 

Comportamiento muy extraño del código MQL

Hola a todos,

Versión de Metatrader: 4.00 Build 224 (15 de mayo de 2009)

Versión de Metaeditor: 4.00 Build 224 (14 de mayo de 2009)

Me he encontrado con un error muy extraño en MQL que me tiene completamente desconcertado, tanto que estoy revisando TODO mi código antiguo para asegurarme de que está escrito para evitar este problema.

Espero que alguien pueda arrojar algo de luz sobre lo que exactamente está pasando aquí.

Aquí está el código, un simple indicador que esencialmente no hace nada. Sin embargo en la sección init() he colocado una llamada a 2 funciones cuando el periodo del gráfico es H1.

Las dos funciones son idénticas en todos los aspectos menos en uno. Una tiene definida una matriz int estática y la otra tiene definida una matriz int no estática. Todo lo que hacen las funciones es imprimir el tamaño de su matriz definida localmente, asignar algunos valores a los elementos de la matriz y luego imprimirlos.

#property indicator_chart_window

void afunc() {

int i;

int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc array["+i+"]="+array);

}

}

void afunc_static() {

int i;

static int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc_static array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc_static array["+i+"]="+array);

}

}

int init() {

if (Period() == PERIOD_H1) {

afunc();

afunc_static();

}

return(0);

}

int deinit() {

return(0);

}

int start() {

return(0);

}

Si miras el código no debería haber ninguna circunstancia en la que las dos funciones se comporten de forma diferente una de otra.

Sin embargo, si adjunto el indicador a un gráfico M5 y luego cambio al marco temporal H1 obtengo la siguiente salida.

2009.05.23 18:12:47 afunc EURUSD,H1: initialized

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[1]=101

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[0]=100

2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] size=4

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[3]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0

2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] size=0

2009.05.23 18:12:47 afunc EURUSD,M5: uninit reason 3

2009.05.23 18:12:47 afunc EURUSD,M5: deinitialized

2009.05.23 18:12:45 afunc EURUSD,M5: inicializado

2009.05.23 18:12:43 afunc EURUSD,M5: cargado con éxito

Fíjate que aunque he definido 'int array[4]' en afunc() el tamaño de ese array es realmente CERO y no puedo asignar valores a los elementos del array. Esta función obviamente no funciona como se esperaba.

Fíjate que he definido 'static int array[4]' en afunc_static() y el tamaño se muestra correctamente como 4 al igual que los valores que he asignado a los elementos del array. Esta función funciona bien.

En resumen. Si defines una matriz no estática en una función y si esa función no es llamada por tu indicador, entonces podrías tener un problema.

Si posteriormente cambia el marco de tiempo del gráfico y luego llama a la función, el tamaño de cualquier matriz definida localmente en la función será cero, independientemente de lo que haya definido el tamaño de las matrices.

La única manera de evitar este problema, por lo que puedo ver, es asegurarse de que cualquier matriz definida localmente en sus funciones se define como una matriz estática. Es una locura, pero no veo otra forma de evitar el problema.

Agradecería cualquier comentario sobre este tema.

Saludos,

Laurence.

Archivos adjuntos:
afunc.mq4  1 kb
 
Razón de la queja: