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
Estoy tratando de aprender MQ4. Mi primer programa simple se supone que debe saltar una alerta cuando 2 MAs se cruzan. No puedo entender por qué
este código no funciona.
Cualquier ayuda será muy apreciada. Gracias de antemano.
extern int Periodo_MA1 = 5;
extern int Periodo_MA2 = 1;
double MA1;
double MA2;
int init()
{
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int inicio()
{
//--------------------------------------------------------------------
MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);
MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);
//--------------------------------------------------------------------
si (MA2 == MA1 )
Alert("El precio es el mismo(",Period_MA2,").");// Alert
devolver;
}Hola Lincoln2012,
Podría revisar el código de este Ma Cross
Estoy tratando de aprender MQ4. Mi primer programa simple se supone que debe hacer saltar una alerta cuando 2 MAs se cruzan. No puedo entender por qué
este código no funciona.
}La clave para codificar un cruce de 2 líneas indicadoras cualesquiera es este concepto
1. Si la línea de la barra actual1>línea2, y la línea de la barra anterior1<línea2, entonces hay un cruce ascendente.
2. Si la línea de la barra actual1línea2, entonces hay un cruce hacia abajo.
hola
El programa de la empresa es un programa de la empresa que se encarga de la gestión de las actividades de la empresa. El objetivo de este proyecto es hacer un indicador simple, pero no sé cómo hacerlo.
su simple indicador simplemente comprueba el valor si el valor de la todos los varible son iguales que dibujar ese punto donde el valor de la todos los partidos de las variables.
mi solución simple
supongamos que tenemos variables
double movingavg1;
double movingavg12;
double movingavg13;
double movingavg14
double movingavg15
doble movingavg16
doble movingavg17
doble movingavg18
doble movingavg19;
doble movingavg10;
double movingavgall;
declaramos la variable solo estoy dando un ejemplo estoy usando iStochastic(1), pero podemos usar para cualquier indicador.
movingavg12=iStochastic(1)
movingavg13=iStochastic(2)
.
.
.
así sucesivamente
ahora
if (movingavg12=movingavg13=movingavg14,....) (poner el valor en la variable "movingavgall") //poner el valor que es igual para vria
dibujar movingavgall en las barras
Aplicación
supongamos que quiero comprobar si la media móvil 3 y la media móvil 5 tienen el mismo valor
incluso este indicador puede ser utilizado con RSI donde el valor de RSI 1 y RSI 2 = 80
y muchos más
incluso si añadimos el MTF que será una ventaja añadida
parece simple por escrito pero no he podido encontrar la solución espero que alguien pueda ayudar
espero que entiendan lo que estoy diciendo
graciasUna vez que tengas los valores a comparar usarías un código similar al siguiente.
Lacomprobación de valores iguales utiliza ==. Un solo = se utiliza para asignar un valor a una variable.
Comprobando más de 1 conjunto debe usar && para significar Y
movingavgall = 0;
si ((a == b) && (b == c) && (c == d)) movingavgall = a;
A continuación, puede comprobar si movingavgall tiene un valor con
if (movingavgall != 0)
{
// haz algo aquí
}
Haz una búsqueda de programación en metatrader usando Google.
Usted debe encontrar varios buenos tutoriales para la programación en MT4.
Un buen libro de programación en C también te ayudará.
Robert Hill alias MrPip
simplificar este código
¡hola a todos!
Estoy tratando de simplificar este código utilizando el comando stringconcatenate de esta manera:
ObjectSetText("uitog1v", StringConcatenate("/\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
a esto:
ObjectSetText("uitog1v", StringConcatenate("/\", uitog1v, "%","/\", uitog2v, "%","/\", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Espero que alguien pueda ayudarme.
Saludos cordiales
doc
trend_alexcud_v_2men.mq4
...
Doc
Si necesitas todos esos elementos, no hay forma más sencilla de escribirlo
¡hola a todos!
estoy tratando de semplificar este código usando el comando stringconcatenate de esta manera
ObjectSetText("uitog1v", StringConcatenate("/\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
a esto:
ObjectSetText("uitog1v", StringConcatenate("/\", uitog1v, "%","/\", uitog2v, "%","/\", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Espero que alguien pueda ayudarme.
Saludos cordiales
doc
trend_alexcud_v_2men.mq4Cómo: Alerta cada 60 segundos
¿Cómo puedo hacer un código que, por ejemplo, me dé una alerta cada 60 segundos?
He creado este código de abajo, pero me da una alerta cada minuto desde que lo adjunto al gráfico y quiero que siga el tiempo del broker para que me alerte por ejemplo cada 60 segundos.
#include
#include
// exported variables
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int ExpectedTime2 = 0;
int init()
{
NDigits = Digits;
ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && true) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
OncePerMinutes2();
}
void OncePerMinutes2()
{
int datetime800 = TimeLocal();
if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1; // reset paused time
}
if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1;
Alert3();
}
}
void Alert3()
{
Alert("One minute gone");
}
int deinit()
{
if (true) ObjectsDeleteAll();
}
Doc Si necesitas todos esos elementos, no hay forma más sencilla de escribirlo
Uhm, mala suerte esta vez, gracias de todos modos.
Saludos cordiales
doc
Hay un problema con la segunda llamada StringConcatenate.
Estás sumando 3 nombres de fuentes diferentes y no habrá un nombre resultante válido.
Robert
¡hola a todos!
Estoy tratando de simplificar este código usando el comando stringconcatenate de esta manera
ObjectSetText("uitog1v", StringConcatenate("/\ ", uitog1v, "%"),12, hr1v, DodgerBlue );
a esto:
ObjectSetText("uitog1v", StringConcatenate("/\", uitog1v, "%","/\", uitog2v, "%","/\", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Espero que alguien pueda ayudarme.
Saludos cordiales
doc
trend_alexcud_v_2men.mq4Necesito ayuda con el EA ... las operaciones no se cierran en el probador
Estoy trabajando en un EA, pero no importa lo que haga, no puedo hacer que cierre las operaciones. El código de mi EA es el mismo que el de los demás, pero no se cierra.
Voy a publicar parte del código de mi EA para que tal vez uno de ustedes codificadores experimentados puede averiguar por qué estoy teniendo este problema. Los vares 'buyTrade' y 'sellTrade' son globales para todo el EA.
NOTA: Sólo quiero UNA operación abierta en cualquier momento, ya sea larga o corta. Las operaciones son "siempre en" por lo que cuando una señal de largo viene, el corto existente debe ser cerrado y viceversa.
No está haciendo esto. Lo que está haciendo es abrir operaciones y luego abre más operaciones... y abre más... y las mantiene abiertas hasta que todas llegan a sus topes.
Gracias de antemano
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);...
Ya que es un código parcial : intente reemplazar symBid con symAsk en el cierre de la venta y symAsk con symBid al cerrar la orden de compra (invierta los precios de cierre, no puede cerrar una venta a precio de oferta y no puede cerrar una compra a precio de demanda)
Estoy trabajando en un EA, pero no importa lo que haga, no puedo hacer que cierre las operaciones. Las abre muy bien, pero cuando quiero cerrarlas, el EA no las cierra.
Voy a publicar parte del código de mi EA para que quizás alguno de vosotros, codificadores experimentados, pueda averiguar por qué tengo este problema. Las variables 'buyTrade' y 'sellTrade' son globales para todo el EA.
NOTA: Sólo quiero UNA operación abierta en cualquier momento, ya sea larga o corta. Las operaciones son "siempre en" por lo que cuando una señal de largo viene, el corto existente debe ser cerrado y viceversa.
No está haciendo esto. Lo que está haciendo es abrir operaciones y luego abre más operaciones... y abre más... y las mantiene abiertas hasta que todas llegan a sus topes.
Gracias de antemano
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);