Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Necesito ayuda con la función iCustom para este EA puede llamar a un indicador personalizado.
Hola a todos,
Me gustaría añadir este (Entry.mq4) indi a este (swb grid 4.1.0.3_EA) EA con
iCustom función para que yo y podríamos utilizar este indicador en la estrategia de la EA.
el EA ya utiliza 3 indicadores MT4 Bandas de Bollinger, Estocástico y RSI y tienen
interruptores , por lo que puede seleccionar cualquiera o todos ellos para ser utilizado , mediante la selección de TRUE o FALSE
y me gustaría añadir este 4º indi(Entry.mq4) al EA.
Agradecería mucho si alguien me pudiera ayudar.
Gracias.
el EA y el indi adjunto abajo.
Noob MQL4 ayuda necesaria para entender esta matriz
Hola, codificadores
¿Alguien podría instruirme en el tema de los arrays?
O tal vez estoy teniendo más problemas para entender este bucle en lo que respecta a esta matriz.
#property copyright "Unfinished POS by Agent86"
double v1[];
double v2[];
double val1;
double val2;
int inicio()
{
while(i>=0)
{
val1=iFractals(NULL, 0, MODE_UPPER,i);
si (val1 > 0)
{
v1=Alto;
}
si no
{
v1=v1;
}
val2=iFractals(NULL, 0, MODE_LOWER,i);
si (val2 > 0)
{
v2=Bajo;
}
si no v2=v2;
i--;
}
return(0);
}
Es un fractal básico, y sin embargo no puedo referirme a ningún elemento del array.
Quiero ser capaz de incrementar i++ de alguna manera y Print (v1); o imprimir el valor anterior al 0 o EMPTY_VALUE.
Si es que voy en la dirección correcta con esto.
Estoy teniendo problemas.
Print (v1): siempre == 0 e imprime 0
Entiendo un poco porque en realidad está haciendo un bucle hasta -1 que == 0
¿Cómo y dónde puedo poner las sentencias Print para poder ver lo que está pasando?
He probado multitud de métodos y he reiniciado i=0 para intentar un bucle alternativo para poder referirme a los elementos v1 pero todos los intentos han fallado.
Básicamente quiero ver los fractales anteriores o marcarlos como A alto, B bajo, etc. para su posible uso futuro en un esquema ABCD tipo de EA
Por ahora, principalmente quiero Imprimir v1 para poder ver lo que está haciendo.
Tal vez podría diseñar algo para seleccionar un Fractal anterior como A_high y/o B_low o algún esquema de este tipo.
¿Estoy en el camino equivocado con esto?
Por favor, aconseja
Gracias
Yo optaría por un bucle FOR en su lugar. Los bucles while pueden llevar a bloqueos si te olvidas de incluir el i--. Como sabes el número exacto de barras, es más fácil de usar, además el i nunca será < 0. Ayuda a evitar confusiones.
For (int i=Barras-1;i>0;i--) {
// código
}
Pruebe a poner todos los valores del array a 0, y luego vuelva a asignar los valores de los indicadores. También, intente un print() directamente después de asignar el valor de su indicador. Vea si realmente devuelve algo en absoluto.
Su mejor apuesta, en mi opinión, es asignar un tamaño a la matriz. Digamos, 1000 posiciones. Es poco probable que necesites esa cantidad, además de que reducirá los cálculos que estás haciendo. Todo lo que necesitas hacer entonces es un bucle a través de las últimas 999 barras a 0 y asignar valores. Creo recordar que MT4 tiene problemas con las iniciaciones de arrays y demás.
Preguntas de la matriz
Yo optaría por un bucle FOR en su lugar. Los bucles while pueden dar lugar a bloqueos si te olvidas de incluir el i--. Dado que usted sabe el número exacto de barras, es más fácil de usar, además de la i nunca será < 0. Ayuda a evitar la confusión.
For (int i=Bars-1;i>0;i--) {
// código
}
Trate de establecer todos los valores de la matriz a 0, y luego volver a través y asignar los valores de los indicadores. También, intente un print() directamente después de asignar el valor de su indicador. Mira si realmente devuelve algo.
Su mejor apuesta, en mi opinión, es asignar un tamaño a la matriz. Digamos, 1000 posiciones. Es poco probable que necesites esa cantidad, además de que reducirá los cálculos que estás haciendo. Todo lo que necesitas hacer entonces es un bucle a través de las últimas 999 barras a 0 y asignar valores. Creo recordar que MT4 tiene problemas con las iniciaciones de arrays y demás.Ok, gracias lo probaré.
Aunque las sentencias while funcionan bien, no me ayudan a obtener los elementos del array que quiero imprimir / ver, etc.
Voy a trabajar en lo que dijiste y hacer algunas pruebas y publicar de nuevo.
Gracias
Yo iría con un bucle FOR en su lugar. Los bucles while pueden llevar a bloqueos si te olvidas de incluir el i--. Como sabes el número exacto de barras, es más fácil de usar, además la i nunca será < 0. Ayuda a evitar confusiones.
For (int i=Bars-1;i>0;i--) {
// código
}
Trate de establecer todos los valores de la matriz a 0, a continuación, volver a través y asignar los valores de los indicadores. También, intente un print() directamente después de asignar el valor de su indicador. Vea si realmente devuelve algo.
Su mejor apuesta, en mi opinión, es asignar un tamaño a la matriz. Digamos, 1000 posiciones. Es poco probable que necesites esa cantidad, además de que reducirá los cálculos que estás haciendo. Todo lo que necesitas hacer entonces es un bucle a través de las últimas 999 barras a 0 y asignar valores. Creo recordar que MT4 tiene problemas con las iniciaciones de arrays y demás.Sigue imprimiendo el array con todas las entradas a 0
Extraño
Argent86,
Hay un par de errores en su código:Esto es lo que está tratando de hacer sin esos problemas
Acceder desde MQ4 a una función dll con: listas de argumentos variables
Hola,
Alguien sabe si es posible: importar una función dll que utiliza como argumento una: lista de argumentos variables
por ejemplo vprintf - Referencia C++
int vprintf ( const char * format, va_list arg );
si es así ¿cómo se haría?
Gracias
MJ
Cómo llamar a una función sin valor de retorno
Hola chicos y chicas.
En algún momento de mi programa me gustaría llamar a una función.
Sin embargo la función no tiene valor de retorno (void). Entonces, ¿cómo puedo llamar a la función,
para que se ejecute el código dentro de la función exactamente en el lugar donde la llamo,
como si estuviera escrito en ese mismo lugar?
Hice un código de ejemplo abajo.. donde compruebo algunos parámetros, y si está bien, quiero ejecutar la función...
Espero que alguien me pueda ayudar con esto, tx de antemano, Jonkie76
//+------------------------------------------------------------------+
//| función de inicio experta ||
//+------------------------------------------------------------------+
int inicio()
{
//----
if (Precio >= PRICE_CLOSE)
llamar a la función ; // En este punto me gustaría llamar a la función, ¿cómo lo hago?
else
Alert("No hacer nada"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNCIONES
//===================================================================+
//----------------------- FUNCIÓN DE CIERRE DE LA ORDEN ----------------------+
void subCloseOrder()
{
int
i,
total = 0,
ticket = 0,
err = 0,
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<NúmeroDeIntentos;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
}
else
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Errores de ocupación
{
Sleep(5000);
continuar;
}
else //Error normal
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}
Es muy simple. Sólo necesitas llamarlo como si devolviera algo, sólo que no necesitas guardar ningún resultado porque no hay ningún resultado con el tipo void. (devuelve nada) Así:
int start()
{
//----
if (Price >= PRICE_CLOSE)
subCloseOrder(); // At this point I'd like to call the function.How do I do that?
else
Alert("Do nothing"); //
//----
return(0);
}
Usa "void" en su lugar. Así:
{
...
//
//
// no need to place return at the end, but if you want then use "just" return, like this
//
//
return;
}Void significa que no va a devolver valor de una función y de esa manera se convierte efectivamente en un procedimiento, no una función
Hola chicos y chicas.
En algún momento de mi programa me gustaría llamar a una función.
Sin embargo, la función no tiene valor de retorno (void). Entonces, ¿cómo puedo llamar a la función?
para que se ejecute el código dentro de la función exactamente en el lugar donde la llamo,
como si estuviera escrito en ese mismo lugar?
Hice un código de ejemplo abajo.. donde compruebo algunos parámetros, y si está bien, quiero ejecutar la función...
Espero que alguien me pueda ayudar con esto, tx de antemano, Jonkie76
//+------------------------------------------------------------------+
//| función de inicio experta ||
//+------------------------------------------------------------------+
int inicio()
{
//----
if (Precio >= PRICE_CLOSE)
llamar a la función ; // En este punto me gustaría llamar a la función, ¿cómo lo hago?
else
Alert("No hacer nada"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNCIONES
//===================================================================+
//----------------------- FUNCIÓN DE CIERRE DE LA ORDEN ----------------------+
void subCloseOrder()
{
int
i,
total = 0,
ticket = 0,
err = 0,
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<NúmeroDeIntentos;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
}
else
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Errores de ocupación
{
Sleep(5000);
continuar;
}
else //Error normal
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}