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
Período de tiempo del gráfico
¿Cuál es el código para saber en qué período de tiempo está funcionando el gráfico? Así puedo cambiar la configuración de las variables para cada período de tiempo.
if(?????) . . .
Dave
¿Cuál es el código para saber en qué período de tiempo se está ejecutando el gráfico? Así puedo cambiar la configuración de las variables para cada período de tiempo.
if(?????) . . .
Dave[/PHP]
or:
switch(Period())
{
case PERIOD_M1:
...
break;
case PERIOD_M5:
...
break;
...
}
[/PHP]
Sometime it maybe easier to work with indices:[PHP]
int tfIndex = ArrayBsearch({PERIOD_M1, PERIOD_M5, PERIOD_M15, ...}, Period());
Example : how to display the period by the string you want:[PHP]
int Periods[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, ...};
string sPeriods[] = {" M1", " M5", " M15", " M30", " Hourly", " 4 hours", " Daily", " Weekly"...};
int tfIndex = ArrayBsearch(Periods, Period());
comment(Symbol() + sPeriods[tfIndex]);
¡Gracias Michel!
¡Espero que este EA que estoy creando sea el indicado! ¡Su ayuda es muy apreciada!
Dave
¡hola!
puede alguien aquí ayudarme a añadir esta función. Hacerlo para cerrar el comercio cuando la barra se ha completado o en otra palabra para hacer que se cierre el comercio cuando la próxima barra aparece. ( no importa el comercio es el beneficio o la pérdida )
extern int SystemMagicNumber=197;
extern double TakeProfit = 100;
extern double StopLoss = 500;
extern double Lots=0.1;
extern double TrailingStop = 0;
extern int MaxBuyTrades=5;
extern int MaxSellTrades=5;
int inicio()
{
if( HavePosThisBar(SystemMagicNumber)==false
&&iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,1)<iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,1)
&& iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,2)>iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,2)
&& SellPositionsCount()<MaxSellTrades
)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",SystemMagicNumber,0,Red);
return(0);
}
if( HavePosThisBar(SystemMagicNumber)==false
&& iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,1)>iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,1)
&& iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,2)<iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,2)
&& BuyPositionsCount()<MaxBuyTrades
)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",SystemMagicNumber,0,Blue);
return(0);
}
for(int cnt=TotalOrdenes()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderType()==OP_SELL)
{
si (TrailingStop>0){
if (OrderOpenPrice()-Ask>TrailingStop*Point)
{
if (OrderStopLoss() == 0 || OrderStopLoss()>(Ask+Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Purple);
return(0);
}
}
}
}
if (OrderType()==OP_BUY)
{
si (TrailingStop>0){
if (Bid-OrderOpenPrice()>TrailingStop*Point)
{
if (OrderStopLoss()<(Bid-Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Yellow);
return(0);
}
}
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool HavePosThisBar(int magic)
{
int cnt;
bool Resultado=false;
for(cnt=0; cnt<=OrdersHistoryTotal()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == magic) && Time[0]<=OrderOpenTime())
{
Resultado=true;
romper;
}
for(cnt=0; cnt<=TotalPedidos()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == magic) && Time[0]<=OrderOpenTime())
{
Resultado=true;
romper;
}
return(Resultado);
}
int ComprarPosicionesCuenta()
{
int Resultado=0;
for(int cnt=0; cnt<=TotalOrdenes()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == SystemMagicNumber) &&
(OrderType()==OP_BUY)
)
{
Resultado++;
}
return(Resultado);
}
int VenderPosicionesCuenta()
{
int Resultado=0;
for(int cnt=0; cnt<=TotalOrdenes()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == SystemMagicNumber) &&
(OrderType()==OP_SELL)
)
{
Resultado++;
}
return(Resultado);
}
¡hola!
puede alguien ayudarme a añadir esta función. Hacer que se cierre la operación cuando se complete la barra o en otra palabra hacer que se cierre la operación cuando aparezca la siguiente barra (no importa si la operación es de ganancia o de pérdida).
Para detectar una nueva barra hay varias soluciones:
1)
2)
3)
Better, but again, restarting the terminal may produce wrong behaviors.
So my opinion is that the best is to write the lifetime max of each order into the order itself, using the "Comment" field :[PHP]OrderSend(..., ""+(Time[0] + Period()*60), ..);. Esta es una buena solución porque si tienes varias órdenes que cerrar, tienes todo el tiempo necesario para hacerlo.
gracias michel por la respuesta.
Lo intentaré, pero ¿qué debo poner en el comentario?
gracias michel por la respuesta, lo intentaré, pero ¿qué debo poner en el comentario?
Ponga la hora a la que quiere cerrar el pedido. El campo Comentario debe ser una cadena, por eso hay ""+ delante del valor. por ejemplo:
""+(Time[0] + Period()*60) // begin of the next bar on the current timeframe
""+(TimeCurrent() + 2*360 + 30*60) // 2 hours 30 minutes after the openning
""+(iTime(NULL,PERIOD_D1,0) + 23*360 + 45*60) // today at 23:45 (server time)
""+(iTime(NULL,PERIOD_W1,0) + (PERIOD_W1 - 10)*60) // next friday at 23:50Gracias
Si es necesario, comprueba primero que estás más tarde de las 8 de la mañana:
Then, find the max and min of the current day. (if its ok for you, its easier than from 8 am): [PHP]double Max = iHigh(Symbol(), PERIOD_D1, 0);
double Min = iLow(Symbol(), PERIOD_D1, 0);
int Range = (Max - Min) / Point;
if(Range > 90) return;
...
Hola,
Disculpa por tardar tanto en decir "gracias".
Aprecio su ayuda.
Gracias de nuevo.
Shek
Para detectar una nueva barra hay varias soluciones:
1)
2)
3)
So my opinion is that the best is to write the lifetime max of each order into the order itself, using the "Comment" field :
i got the error below.what does ot mean?
[PHP]'>' - different types in comparison F:\Program Files\MetaTrader - FXOpen\experts\EMA_10.mq4 (88, 22)
I make it like this
for the send order
[PHP]OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-25*Point,Ask+TakeProfit*Point, ""+(Time[0] + Period()*60),SystemMagicNumber,0,Blue);y para la orden de cierre
[PHP]if(TimeCurrent() > OrderComment())
{
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, CLR_NONE);
}y tengo el error que se muestra arriba.
¿Es correcto?
mi error, lo siento.
Esto debería funcionar: