¿Cómo codificar? - página 163

 

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

=====================

 
coach3131:
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

Archivos adjuntos:
 

Es mejor utilizar

MathAbs(NormalizeDouble(Bid,4)-NormalizeDouble(pivot,4))<Delta*Punto,

Donde Delta=2...5

 
jdun:
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:

double equity_per_lotpoint = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE );

[/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

Razón de la queja: