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
Pregunta sobre el iCCI
Soy nuevo en MQL4 y estoy tratando de obtener el valor anterior de CCI. He intentado usar la función iCCI con un valor de Shift de 1, pero no me da el valor anterior. ¿Cómo puedo hacerlo sin guardar el valor actual en una variable? Estoy tratando de determinar la dirección del CCI.
Gracias por su ayuda.
El código se basa en el tic, por lo que si no hay tic en ese momento, entonces el código perderá la comprobación del tiempo. No creo que se pueda llegar al segundo exacto sin algún tipo de bucle que se ejecute constantemente.
Ayuda con la edición de EA
Estoy tratando de averiguar esto ... ¿puede usted por favor ayuda?
MB Trading - Acciones Opciones Futuros Forex Online Discount Trading
He cambiado esto:
OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
return(0);
A:
int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
Sleep(1500);
OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);
=================================== ======
Estoy recibiendo estos errores:
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: ticket no válido para la función OrderModify
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend error 131
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify error 4051
=====================
Estoy tratando de entender esto... ¿pueden ayudarme por favor?
MB Trading - Acciones Opciones Futuros Forex Online Discount Trading
He cambiado esto:
OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
return(0);
A:
int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
Sleep(1500);
OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);
=================================== ======
Estoy recibiendo estos errores:
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: ticket no válido para la función OrderModify
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend error 131
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify error 4051
=====================Su problema está en el tamaño del lote (volumen) en su declaración de envío de orden. que devuelve un -1 debido al error. el veriable del billete no contiene un número de billete que contiene la bandera de error de -1 que desencadenó los otros errores con la función ordermodify. Debe corregir la variable de tamaño de lote mylotsi, para que contenga un valor aceptable. en segundo lugar debe comprobar el valor de retorno en la variable ticket para ver que no contiene una bandera de error antes de llamar a la rutina ordermodify.
keit
Posición máxima del EA
¿puede alguien añadir posiciones máximas para este EA
¿o dejar que se ejecute una sola posición?
gracias de antemano
Es mejor utilizar
MathAbs(NormalizeDouble(Bid,4)-NormalizeDouble(pivot,4))<Delta*Punto,
Donde Delta=2...5
Podría alguien decirme el código para el stop loss y el tp. Necesito añadirlo a este EA.
este SL y TP oculto
int TakeProfit=20; // 20 pips take profit
int StopLoss =40; // 40 pips stoploss
int Slippage = 3;
int MagicNumber=1;
int i;
int start(){
//----- exit @ TP
if((ScanTrades()>=1)&& (ProfitInPips()>=TakeProfit)){
//----- This part will close all open orders and delete pending trades
for(i = OrdersTotal()-1; i >=0; i--)
{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);
if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
}
//------exit @ SL
if((ScanTrades()>=1)&& (ProfitInPips()<= -StopLoss)){
//----- This part will close all open orders and delete pending trades
for(i = OrdersTotal()-1; i >=0; i--)
{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);
if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
}
return (0);
}
//----------- Call functions
int ScanTrades()
{
int Tot = OrdersTotal();
int Numb = 0;
for(int cnt=0; cnt<=Tot-1; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) Numb++;
}
return(Numb);
}
double ProfitInPips()
{
RefreshRates();
double Prof=0;
int i;
int totalOrders=OrdersTotal();
for(i=0;i<totalOrders;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber)
{
if(OrderType()==0)
{
Prof+=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
}
if(OrderType()==1)
{
Prof+=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);
}
}
}
return(Prof);
}
Digamos que tengo unas cuantas órdenes de compra y de venta
Lo que quiero hacer es :
- Salir de todas las operaciones de la "cesta" a 5 pips más que el precio de equilibrio de las operaciones abiertas
Lo que estoy tratando de hacer en el primer bucle for es encontrar el valor de las operaciones abiertas + swap y convertirlo en pips, y esta es la parte donde me estoy atascando
He intentado algunas ideas pero he llegado a un callejón sin salida, sé que el problema está en la primera declaración for pero no puedo resolverlo, cualquier ayuda es muy apropiada
SymbolPL = 0;
OrdLots = 0;
Equity = 0;
MinPro = 5;
for(i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{if(OrderType() == OP_BUY) OrdLots += OrderLots();
if(OrderType() == OP_SELL) OrdLots -= OrderLots();
Equity += OrderProfit() + OrderSwap();
}
}
MinPro= MathRound (MathAbs(Equity /OrdLots)+MinPro);
//--- Count the open trades
int i;
int count=0;
for(i=0;i<OrdersTotal();i++)
{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber && OrderType()<2)
{ count++;
}
}
//--- find the profit in pips of the open trades
RefreshRates();
double profits=0,openPrice=0,points=0;
string sym="";
int i;
int totalOrders=OrdersTotal();
for(i=0;i<totalOrders;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber)
{
sym=OrderSymbol();
openPrice=OrderOpenPrice();
if(OrderType()==0)
{
profits+=(MarketInfo(sym,MODE_BID)-openPrice)/MarketInfo(sym,MODE_POINT);
}
if(OrderType()==1)
{
profits+=(OrderOpenPrice()-MarketInfo(sym,MODE_ASK))/MarketInfo(sym,MODE_POINT);
}
}
}
//--- Close when the open trades are 5 pips more than the breakeven price
if (count>1 && profits>MinPro )
{
for(i = OrdersTotal()-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Plum);
}
}
}
Creo que se puede utilizar una constante "equity_per_lotpoint", que se calcularía como:
[/PHP]
and then you'd have what you need after the first loop, with:
[PHP]if ( Equity > 5 * equity_per_lotpoint * MathAbs( OrdLots ) ) { ...
Gracias Ralph pero me faltaría el swap , y quiero incluir el beneficio/pérdida del swap en el cierre de la decisión de las órdenes