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
...
Echa un vistazo a este post : https://www.mql5.com/en/forum/174385/page12
Se trata de un problema similar y se puede utilizar ese mismo countOpenedOnACurrentBar
para limitar la apertura de una sola operación por crossover
Hola amigos, soy un novato. Tengo una estrategia simple. Yo sólo scalping cuando EMA crossover. Sólo tomo un comercio en cada cruce. Necesito un código que puede tomar el comercio sólo un comercio en cada cruce de EMA. Por favor......
Simplemente el código de cruce de EMA necesita........
Muchas gracias, MLADEN...
Acabo de comprobar su función. Se ve bien. También necesito algo de ayuda. Tengo necesidad de añadir RSI(50) valor con EMA crossover....¿Cómo puedo...?
Pares: GBP/USD & EUR/USD
Marco de tiempo: 15min,1 hora y superior;
-------------------------------
COMPRA: EMA 5 Cruzar EMA 12 al alza, RSI mayor de 50
VENDER: EMA 5 Cruzar EMA 12 a la baja, RSI menor de 50
(sólo una operación en cada cruce de EMA)
Espero respuesta. Por favor .......
Puedes hacerlo de dos maneras.
Una forma (directamente en el EA) podría ser algo así :
Usted tiene toda la información necesaria : la línea gris es la "tendencia". Las líneas verdes y rojas pueden usarse como puntos de entrada y reentrada. Puedes "optimizarlo" visualmente en un instante, y luego usar esos parámetros en el EA (una "optimización" mucho más rápida visualmente que el doloroso "cambiar parámetros, ejecutarlo, ver lo que tienes y luego lo mismo una y otra vez". Y es bastante fácil llamarlo desde el EA. Sería así :
Así que en definitiva, siempre recomiendo utilizar un indicador de uso de un Ea. Incluso puedes cambiar la lógica del Ea sin tocarlo simplemente alterando y refinando el código de tus indicadores, en cuyo caso el EA es "sólo" un marco para las órdenes y la gestión del dinero (ya que las señales vienen del indicador), lo que en mi opinión es una forma más eficiente de utilizar los EAs. Adjuntando también el indicador, para que usted decida qué forma (la directa o la "por indicador") quiere utilizar en su Ea
PD: en los ejemplos anteriores, las pruebas se realizan en la barra actual (aún abierta). Si desea probar la barra cerrada, sustituya el 0 y el 1 por el 1 y el to en las llamadas a iCustom(),iMa() e iRSI()
Muchas gracias, MLADEN...
Acabo de comprobar su función. Se ve bien. También necesito algo de ayuda. Necesito añadir el valor de RSI(50) con el cruce de EMA....¿Cómo puedo...?
Pares: GBP/USD & EUR/USD
Marco de tiempo: 15min,1 hora y superior;
-------------------------------
COMPRA: EMA 5 Cruzar EMA 12 al alza, RSI mayor de 50
VENDER: EMA 5 Cruzar EMA 12 a la baja, RSI menor de 50
(sólo una operación en cada cruce de EMA)
Estoy esperando la respuesta. Por favor, .......¿Saldo del día 1 del mes?
Gidday He estado sentado aquí tratando de averiguar si hay una manera de extraer el saldo inicial para el 1 de mes para una visualización en pantalla.
Lo que estoy tratando de hacer es obtener la diferencia porcentual entre el saldo del día 1 y el saldo actual.
Tengo la diferencia porcentual total.
(Saldo - Depósito)/Depósito*100
Me gustaría añadir una diferencia mensual.
(Saldo - 1º)/1º*100
Cualquier consejo o código real sería genial.
Saludos
Beno
Gracias de nuevo, MALADEN...
Gracias por tu indicador y tus consejos. Acabo de tratar de seguir su instrucción. Pero como soy inexperto en mq4, no pude hacerlo................
AQUÍ ESTÁ MI..............
------------------------------------
-----------------------------------
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#propiedad indicator_color2 PaleVioletRed
#propiedad indicator_color3 DarkGray
#propiedad indicator_width1 2
#propiedad indicator_width2 2
#propiedad indicador_mínimo -1.1
#property indicador_máximo +1.1
extern int EmaFast = 5;
extern int EmaSlow = 12;
extern int EmaPrice = PRICE_CLOSE;
extern int RsiPeriod = 14;
extern int RsiPrice = PRICE_CLOSE;
double signup[];
double signdn[];
double trend[];
extern double TakeProfit=15,0;
extern double Lots=0.1;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int inicio()
{
int count,counted_bars=IndicatorCounted();
if(counted_bars < 0) return(-1);
if(barras_contadas>0) barras_contadas--;
int límite = MathMin(Bares-barras contadas,Bares-1);
int cnt, ticket, total;
double trendc = iCustom(NULL,0, "ema + rsi binary",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);
double trendp = iCustom(NULL,0, "ema + rsi binary",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,1);
si (trendc!=trendp)
total = OrdersTotal();
if(total < 1)
{
if (trendc== 1) //... señal de compra
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de COMPRA : ",GetLastError());
return(0);
}
if (trendc==-1) //... señal de venta
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
}
return(0);
}
---------------------------------------
---------------------------------------
Necesito tu ayuda....
Me disculpé a u si me aspecto más a u como usted cayó perturbar. Pero yo realmente impotente ...
Estoy esperando la respuesta. Por favor, .......
...
Intente usar algo como esto :
forMonth es el mes hacia atrás para el que desea ver el saldo 0 siendo el mes actual. A continuación, calcula cuál era el saldo en el primer día del mes requerido. La función tendrá en cuenta los depósitos y retiros también (OrderType() == 6) por lo que debería funcionar bien.
Gidday He estado sentado aquí tratando de averiguar si hay una manera de extraer el saldo inicial para el 1 de mes para una visualización en pantalla.
Lo que estoy tratando de hacer es obtener la diferencia porcentual entre el saldo del día 1 y el saldo actual.
Tengo la diferencia porcentual total.
(Saldo - Depósito)/Depósito*100
Me gustaría añadir una diferencia mensual.
(Saldo - 1º)/1º*100
Cualquier consejo o código real sería genial.
Saludos
Beno...
No se pueden gestionar órdenes desde el indicador. Usted puede manejar las órdenes sólo de las secuencias de comandos o EAs (que es el caso que usted está buscando). El código de tu post es un indicador.
Los ejemplos que he publicado son para ser utilizado desde un EA (por lo que he entendido que ya tiene un EA en el que desea limitar el número de órdenes y desea probar las condiciones ema y rsi para las entradas).
Gracias de nuevo, MALADEN...
Gracias por tu indicador y consejos. Yo sólo trato de seguir su instrucción. Pero como soy inexperto en mq4, no pude hacerlo................
AQUÍ ESTÁ MI..............
------------------------------------
-----------------------------------
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#propiedad indicator_color2 PaleVioletRed
#propiedad indicator_color3 DarkGray
#propiedad indicator_width1 2
#propiedad indicator_width2 2
#propiedad indicador_mínimo -1.1
#property indicador_máximo +1.1
extern int EmaFast = 5;
extern int EmaSlow = 12;
extern int EmaPrice = PRICE_CLOSE;
extern int RsiPeriod = 14;
extern int RsiPrice = PRICE_CLOSE;
double signup[];
double signdn[];
double trend[];
extern double TakeProfit=15,0;
extern double Lots=0.1;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int inicio()
{
int count,counted_bars=IndicatorCounted();
if(counted_bars < 0) return(-1);
if(barras_contadas>0) barras_contadas--;
int límite = MathMin(Bares-barras contadas,Bares-1);
int cnt, ticket, total;
double trendc = iCustom(NULL,0, "ema + rsi binary",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);
double trendp = iCustom(NULL,0, "ema + rsi binary",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,1);
si (trendc!=trendp)
total = OrdersTotal();
if(total < 1)
{
if (trendc== 1) //... señal de compra
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de COMPRA : ",GetLastError());
return(0);
}
if (trendc==-1) //... señal de venta
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
}
return(0);
}
---------------------------------------
---------------------------------------
Necesito tu ayuda....
Me disculpé a u si me aspecto más a u como usted cayó perturbar. Pero yo realmente impotente ...
Estoy esperando la respuesta. Por favor, .......Gracias por la respuesta, MLADEN,
Lo siento, creo que me dijiste que pusiera ese código en un nuevo EA.
Sólo me falta entender su respuesta....
SÍ. Tienes razón....
Tengo EA y quería modificar. Con alguna condición nueva.......
mi condición es :
------------------------------------------------------
COMPRA: EMA 5 Cross EMA 12 al alza, RSI mayor de 50
VENTA: EMA 5 Cross EMA 12 a la baja, RSI menor de 50
Salida: con un pequeño Take-Profit
(sólo una operación en cada cruce de EMA)
aquí mi EA.....
---------------------
---------------------
extern double Lots=0.1;
extern int TakeProfit=5;
extern int StopLoss=5;
extern int RSIPos=50
extern int RSINeg=50;
extern int deslizamiento=2;
extern int abandono=101;
datetime bartime=0;
int bartick=0;
double p;
int cnt=0;
int OrdersPerSymbol=0;
double bullMA3=0;
double bearMA7=0;
double RSI=0;
bool RSIPOS=0;
bool RSINEG=0;
double TP
double SL;
int init()
{
if (Symbol()=="AUDUSD") {TakeProfit= 60; StopLoss= 23; abandon=103;}
if (Symbol()=="EURAUD") {TakeProfit= 95; StopLoss=141; abandon=33;}
if (Symbol()=="EURCHF") {TakeProfit= 81; StopLoss= 77; abandon=97;}
if (Symbol()=="EURGBP") {TakeProfit= 11; StopLoss= 77; abandon=108;}
if (Symbol()=="EURJPY") {TakeProfit= 38; StopLoss= 75; abandon=183;}
if (Symbol()=="EURUSD") {TakeProfit=35; StopLoss= 35; abandon=5;}
if (Symbol()=="GBPCHF") {TakeProfit= 79; StopLoss= 98; abandon=113;}
if (Symbol()=="GBPJPY") {TakeProfit= 13; StopLoss= 98; abandon=117;}
if (Symbol()=="GBPUSD") {TakeProfit= 55; StopLoss=100; abandon=69;}
if (Symbol()=="USDCAD") {TakeProfit= 66; StopLoss= 76; abandon=106;}
if (Symbol()=="USDCHF") {TakeProfit=117; StopLoss= 78; abandon=111;}
if (Symbol()=="USDJPY") {TakeProfit= 53; StopLoss= 74; abandon=110;}
}
int deinit()
{
}
int inicio()
{
p=Punto;
// Comprobación de errores y recuento de barras
if(AccountFreeMargin()<(200*Lots)) {Print("-----NO MONEY"); return(0);}
if(Bars<100) {Print("-----NO BARS "); return(0);}
if(bartime!=Time[0]) {bartime=Time[0]; bartick++;}
bullMA3=iMA(Symbol(),0,3,0,MODE_EMA,PRICE_CLOSE,1);
bearMA7=iMA(Symbol(),0,7,0,MODE_EMA,PRICE_CLOSE,1);
RSI=iRSI(Símbolo(),0,2,PRECIO_CIERRE,2);
if(RSI>RSIPos) {RSIPOS=true; RSINEG=false;}
if(RSI<RSINeg) {RSIPOS=false; RSINEG=true;}
OrdersPerSymbol=0;
for(cnt=TotalOrdenes();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if( OrderSymbol()==Symbol() )
{
OrdersPerSymbol++;
}
}
if(OrdersPerSymbol==0)
{
if(bullMA3>(bearMA7+p) && RSINEG)
{
SL=Ask-(StopLoss*p);
TP=Ask+(TakeProfit*p);
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP, "BUY "+CurTime(),0,0,White);
bartick=0;
}
if(bullMA3<(bearMA7-p) && RSIPOS)
{
SL=Bid+(StopLoss*p);
TP=Bid-(TakeProfit*p);
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP, "SELL "+CurTime(),0,0,Red);
bartick=0;
}
}
if(OrdersPerSymbol==1 && bartick==abandon)
{
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),Lots,Bid,Slippage,White);
SL=Bid+(StopLoss*p);
TP=Bid-(TakeProfit*p);
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP, "SELL "+CurTime(),0,0,Red);
bartick++;
}
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),Lots,Ask,Slippage,Red);
SL=Ask-(StopLoss*p);
TP=Ask+(TakeProfit*p);
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP, "BUY "+CurTime(),0,0,White);
bartick++;
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if( OrderSymbol()==Symbol() )
{
if(OrderType()==OP_BUY)
{
if (OrderMagicNumber()==0)
{
if( Bid-OrderOpenPrice() > 3*Punto )
{
OrderClose(OrderTicket(),Lots,Bid,0,White);
return(0);
}
}
}
if(OrderType()==OP_SELL)
{
if (OrderMagicNumber()==0)
{
if( OrderOpenPrice()-Ask > (3*Point) )
{
OrderClose(OrderTicket(),Lots,Ask,0,Red);
return(0);
}
}
}
}
}
return(0);
}
-------------------
---------------------
¿Cómo puedo modificarlo....? Esperando respuesta. Por favor.......
dipu
En cuanto a las entradas, esta funciona bien
Ahora ten cuidado con las salidas ya que de la forma en que lo escribiste estás cerrando las órdenes demasiado pronto También el broker de 5 dígitos está cuidado ahora también, y las entradas están trabajando como deberían. El periodo por defecto para el rsi está fijado en 14 (no sé cuál quieres usar, en el código usas el periodo 2 pero probablemente sea demasiado corto). Los periodos Ema son por defecto 5 y 12. También, está probando una barra cerrada ahora (espera hasta que la barra se cierre y si entonces la señal de compra o venta existe, entra la orden)
Gracias por la respuesta, MLADEN,
lo siento, no es una información clara.......
COMPRA: EMA 5 Cross EMA 12 al alza, RSI[14] mayor de 50
VENTA: EMA 5 Cross EMA 12 a la baja, RSI[14] menor de 50
Salida: con un pequeño TP/Sl....(5pip)
(solo una operación en cada cruce de EMA)
Acabo de probarlo y os informaré del resultado ....
Puede que también se modifique.. o no..
Gracias de nuevo por su ayuda.....