¿Cómo codificar? - página 257

 

Revise las funciones de tiempo en la ayuda de Metatrader. luego intente algo como esto

if (TimeHour(Time[0]) TradeHourStop)

{

Comment("Trading suspended - outside trade hours");

return(false);

}

donde TimeHourStart y stop son variables externas establecidas por usted. El return(false); saldrá de la función de inicio sin más procesamiento.

Buena suerte,

 

Gracias por la rápida respuesta, Tzuman.

Desafortunadamente, mi programación de MT4 se limita a un constructor de EA en línea en este momento.

¡Esto es justo lo que estaba buscando!

 

Cómo codificar la configuración del color del texto y el tamaño de la fuente de los comentarios..

Hola a todos,

Estoy trabajando en un EA y solo soy un programador principiante...

Y tengo una pregunta en general como codificar el tamaño de la fuente y el color del texto de los comentarios y hacerlo configurable por el usuario. ¿Qué variables externas tengo que crear? ¿Y cómo lo programo?

Sé usar la función de comentarios, por ejemplo así:

if(TextOnScreen == true) Comment("Este texto aparece en la pantalla ");

Pero, ¿cómo programarlo para que el usuario pueda cambiar el tamaño de la letra del texto que aparece en la pantalla y también cómo cambiar el color del texto cambiando la configuración en las opciones del EA?

¿Alguien puede ayudarme con unas líneas de código? Se agradece mucho.

Muchas gracias.

Johan

 
korthouj:
Hola a todos,

Estoy trabajando en un EA y sólo soy un programador principiante...

Y tengo una pregunta en general como codificar el tamaño de la fuente y el color del texto de los comentarios y hacerlo configurable por el usuario. ¿Qué variables externas tengo que crear? ¿Y cómo lo programo?

Sé usar la función de comentarios, por ejemplo así:

if(TextOnScreen == true) Comment("Este texto aparece en la pantalla ");

Pero, ¿cómo programarlo para que el usuario pueda cambiar el tamaño de la letra del texto que aparece en la pantalla y también cómo cambiar el color del texto cambiando la configuración en las opciones del EA?

¿Alguien puede ayudarme con unas líneas de código? Se agradece mucho.

Muchas gracias.

Johan

Necesitas usar objetos gráficos como por ejemplo lables. Como hacer esto - usted puede leer fácilmente en el manual.

 
korthouj:
Hola a todos,

Estoy trabajando en un EA y sólo soy un programador principiante...

Y tengo una pregunta en general como codificar el tamaño de la fuente y el color del texto de los comentarios y hacerlo configurable por el usuario. ¿Qué variables externas tengo que crear? ¿Y cómo lo programo?

Sé usar la función de comentarios, por ejemplo así:

if(TextOnScreen == true) Comment("Este texto aparece en la pantalla ");

Pero, ¿cómo programarlo para que el usuario pueda cambiar el tamaño de la letra del texto que aparece en la pantalla y también cómo cambiar el color del texto cambiando la configuración en las opciones del EA?

¿Alguien puede ayudarme con unas líneas de código? Se agradece mucho.

Muchas gracias.

Johan

Johan,

Estudia el indicador adjunto.

Parte del código es para cuando se utiliza una plantilla.

Lo descubrí por las malas cuando el texto de un par apareció en el gráfico de otro par debido a la plantilla.

Si se necesitan más líneas de texto deberías ser capaz de averiguarlo.

Si no es así, vuelve a postear y te mostraré un ejemplo con múltiples líneas.

Robert

Archivos adjuntos:
 

¿Por qué falla la orden de cierre y cómo limitar la orden n.o.?

Soy un novato en MQL4, acaba de probar un EA de mí mismo, pero parece que no podía cerrar la orden, y se abriría la orden en cada barra hasta freemargin convertirse en 0, entonces sería forzar la parada de todas las órdenes. No sé cómo limitar la orden abierta NO. ¡¿Quién podría decirme, TKS apreciando!

el codigo es el siguiente:

//+------------------------------------------------------------------+

//| Copyright 2005, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp.

//+------------------------------------------------------------------+

#define MAGICMA 20110309

extern double Lotes = 1;

extern double MaximumRisk = 0.02;

extern double DecreaseFactor = 10;

//+------------------------------------------------------------------+

//| Calcula las posiciones abiertas |||.

//+------------------------------------------------------------------+

int CalcularPosicionesActuales(cadena símbolo)

{

int compras=0,ventas=0;

//----

for(int i=0;i<TotalOrdenes();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) buys++;

if(OrderType()==OP_SELL) vende++;

}

}

//---- devuelve el volumen de las órdenes

if(buys>0) return(buys);

si no, return(sells);

}

//+------------------------------------------------------------------+

//| Calcular el tamaño óptimo del lote ||

//+------------------------------------------------------------------+

double LotsOptimized()

{

double lote=Lotes;

int orders=HistoryTotal(); // historial total de órdenes

int losses=0; // número de órdenes con pérdidas sin pausa

//---- seleccione el tamaño del lote

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

Print(MarketInfo(Symbol(), MODE_LOTSIZE));

Print(MarketInfo(Symbol(), MODE_MINLOT));

Print(MarketInfo(Symbol(), MODE_LOTSTEP));

Print(MarketInfo(Symbol(), MODE_MAXLOT));

//---- calcular el número de órdenes de pérdidas sin pausa

if(DecreaseFactor>0)

{

for(int i=órdenes-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("¡Error en el historial!"); break; }

if(OrderSymbol()!=Symbol() | OrderType()>OP_SELL) continue;

//----

if(OrderProfit()>0) break;

if(OrderProfit()<0) losses++;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

//este es un diseño técnico inteligente,pero las perdidas representan la perdida de ganancias,no el dinero puede causar problemas.

//modificarlos sigue como:accountfreemargin()-orderprofit()

}

//---- devuelve el tamaño del lote

if(lot<1) lot=1;

return(lote);

}

//+------------------------------------------------------------------+

//| Comprobar las condiciones de la orden abierta ||.

//+------------------------------------------------------------------+

void CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2;

int res;

//---- ir a operar sólo para los primeros tiks de la nueva barra

if(Volume[0]>1) return;

//---- obtener la media móvil

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//---- condiciones de venta

si (m1<m3-0.0002)

{

ticket1=Enviar orden(Símbolo(),OP_VENTA,1,Oferta,5,Demanda+105*Punto,0, "Mi orden #1",MAGICMA,0,Rojo);

devolver;

}

si (m2<m4-0.0001)

{

ticket2=Enviar orden(Símbolo(),OP_SELL,1,Oferta,5,Demanda+105*Punto,0, "Mi orden #2",MAGICMA,0,Amarillo);

devolver;

}

//---- condiciones de compra

si ( m1>m3+0.0002)

{

ticket1=Envío de orden(Símbolo(),OP_BUY,1,Oferta,5,Oferta-105*Punto,0, "Mi orden #1",MAGICMA,0,Azul);

devolver;

}

si (m2>m4+0.0001)

{

ticket2=Envío de orden(Símbolo(),OP_BUY,1,Demanda,5,Oferta-105*Punto,0, "Mi orden #2",MAGICMA,0,Verde);

devolver;

}

//----

}

//+------------------------------------------------------------------+

//| Comprobar las condiciones de cierre de la orden ||

//+------------------------------------------------------------------+

void CheckForClose()

{

double m1,m2,m3,m4;

//---- ir a negociar sólo para los primeros tiks de la nueva barra

if(Volume[0]>1) return;

//---- obtener la media móvil

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//----

for(int i=0;i<TotalPedidos();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()!=MAGICMA | OrderSymbol()!=Symbol()) continue;

//---- comprobar el tipo de pedido

if(OrderType()==OP_BUY)

{

if(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

romper;

}

if(m2<m4+0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

}

if(OrderType()==OP_SELL)

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan);

romper;

}

if(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon);

break;

}

}

}

//----

}

//+------------------------------------------------------------------+

//| Función de inicio |

//+------------------------------------------------------------------+

void start()

{

//---- comprueba el historial y las operaciones

if(Bars<55 || IsTradeAllowed()==false) return;

//---- calcular las órdenes abiertas por el símbolo actual

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();

else CheckForClose();

//----

}

//+------------------------------------------------------------------+

 

Detectar la versión de Windows

¿Alguien sabe una manera fácil de averiguar qué versión de Windows MT4 se está ejecutando utilizando sólo una llamada a la API de Windows.

¿Puede alguien decirme cómo hacer que esto funcione?

#importar "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#importar

Función GetVersionEx (Windows)

Gracias

 

Se necesita ayuda. Pequeño ajuste a mi CCI Divergence EA

Tengo un EA de CCI Divergence que utiliza un indicador de CCI Divergence personalizado en la carpeta de Indicadores en MT4 para determinar cuándo colocar una operación.

Lo que quiero hacer es utilizar un indicador de divergencia de estocástico personalizado (que tengo) en su lugar.

No sé cómo cambiar el código del EA para dirigirlo al Indicador de Divergencia Estocástica en la carpeta de indicadores.

En las entradas del EA creo que tengo que reemplazar:

extern int CCI_Period = 10;

con

extern int Stoch_K = 5;

extern int Stoch_D = 3;

extern int Stoch_Slowing = 3;

En la parte principal del código encontré el área que apunta al indicador de divergencia CCI personalizado en la carpeta de indicadores:

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, 0, 2);

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, 1, 2);

Sé que tengo que cambiar "CCI_Divergence_Indicator" por "Stochastics_Divergence_Indicator" que es el nombre del indicador de divergencia stochastics personalizado en la carpeta Indicadores. Y tengo que quitar el CCI_Period y el 9.

Pero no sé cómo añadir el Stoch_K, Stoch_D y Stoch_Slowing a esta parte del código.

He intentado cambiarlo por mi cuenta, pero entonces el EA no se abre.

¿Alguien sabe cómo codificar esta parte del código para que el indicador de divergencia estocástica pueda reemplazar al indicador de divergencia cci?

Le pagué a un programador para que creara el EA, pero está muy ocupado con los proyectos de otros clientes. Así que cuando se trata de cambios / correcciones menores que no tiene tiempo para hacerlo para mí - al menos no de inmediato. Así que por eso estoy preguntando aquí.

El indicador de divergencia CCI tiene demasiadas señales falsas. El indicador de divergencia del estocástico es mucho mejor. Por eso quiero hacer el cambio.

Gracias de antemano.

 

Ayuda por favor

Tengo una línea de código que me alertará cuando el precio de 1 barra (ya sea 1m 5m 189m) se mueve 200 pips en 1 barra. pero no puedo por la vida de mí averiguar cómo configurarlo para alertar sólo dirección específica. aquí es..

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); /Esto funciona bien.

Pero quiero ser capaz de distinguir entre un 200 pip UP y 200 pip DOWN. He leído, preguntado en foros, he estado en salas de chat, y me he vuelto loco durante 3 días.

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");