Hola, he rediseñado el EA estándar de Macd Sample, añadiendo capacidades multidivisas. El problema es que aunque abre las operaciones como multidivisa, sólo las cierra en función de los beneficios o del trailing stop, aunque el cierre después de cambiar la condición también está escrito en el EA. Pido ayuda a nuestra comunidad :)
//+------------------------------------------------------------------+//| MACD Sample_1.mq4 |//| Corp. |//| http:// |//+------------------------------------------------------------------+externdouble Lots = 0.1;
externdouble TrailingStop = 50;
externdouble MACDOpenLevel=3;
externdouble MACDCloseLevel=2;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+string lSymbol;
int init(){lSymbol=Symbol(); return(0);}
int deinit(){return(0);}
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent; //значения индикаторовdouble SignalPrevious,bid,ask,point,digits;
int cnt, ticket, total; //вычисляемые значения
total=SymbolOrdersTotal(lSymbol);
if(total<1)
{
bid = MarketInfo(lSymbol,MODE_BID);
ask = MarketInfo(lSymbol,MODE_ASK);
point = MarketInfo(lSymbol,MODE_POINT);
digits= MarketInfo(lSymbol,MODE_DIGITS);
// on a chart of less than 100 barsif(Bars<100)
{
Print("bars less than 100");
return(0);
}
// to simplify the coding and speed up access// data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
// no opened orders identifiedif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibilityif(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<=SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*point) )
{
ticket=OrderSend(lSymbol,OP_BUY,Lots,ask,3,0,0,"macd sample new",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()," as ", lSymbol);
}
elsePrint("Error opening BUY order :",GetLastError()," as ", lSymbol);
return(0);
}
// check for short position (SELL) possibilityif(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>=SignalPrevious &&
MacdCurrent>(MACDOpenLevel*point) )
{
ticket=OrderSend(lSymbol,OP_SELL,Lots,bid,3,0,0,"macd sample new",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()," as ", lSymbol);
}
elsePrint("Error opening SELL order : ",GetLastError()," as ", lSymbol);
return(0);
}
return(0);
}
// it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==lSymbol) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>=SignalPrevious &&
MacdCurrent>(MACDCloseLevel*point))
{
OrderClose(OrderTicket(),OrderLots(),bid,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
else// go to short position
{
// should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<=SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*point))
{
OrderClose(OrderTicket(),OrderLots(),ask,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
return(0);
}
int SymbolOrdersTotal(string lSymbol)
{
int Res=0;
int total=OrdersTotal();
for (int i=0;i<total;i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==lSymbol)
{
Res++;
}
}
}
return(Res);
}
// the end.
Chicos, me podéis decir cómo solucionar esto, antes todo iba bien - los informes se guardaban en opera... Ahora está vomitando en la ventana al intentar guardar un informe de probador de estrategias.
Problema resuelto. Lo he descubierto. Mi ordenador empezó a abrir archivos html con wordpress por alguna razón... Me he convertido a Opera y todo funciona como debería.
Buenas tardes. Algunos consejos para un principiante.
Cómo corregir el EA "tradingexpert.mq4" del tutorial MQL4. Si quisiera abrir una nueva orden en esa dirección, y el EA estaría esperando una señal del indicador para abrir en la dirección opuesta.
Me dijeron que usara la función alias KimIV - "GetTypeLastClosePos()". He intentado aplicarlo, pero las operaciones no se abren. Por favor, aconséjeme cómo corregir el EA. Aquí está el código con mis cambios resaltados en rojo.
Por favor, aconsejar, he escrito un EA, no hay errores, en el probador de la estrategia que las pruebas, pero no va a operar en una cuenta demo. ¿Cuál es el problema?
Chicos, podéis decirme cómo solucionar esto, antes todo iba bien - los informes se guardaban en opera... Ahora está vomitando en la ventana al intentar guardar un informe de probador de estrategias.
Problema resuelto. Lo he descubierto. Mi ordenador empezó a abrir archivos html con wordpress por alguna razón... Me he convertido a Opera y todo funciona como debería.
¿Tal vez tus archivos html se abren con el bloc de notas por defecto? prueba a mirar en el panel de control en la pestaña de programas por defecto
link1: Por favor, aconsejar, he escrito un EA, no hay errores, en el probador de la estrategia que las pruebas, pero no va a operar en una cuenta demo. ¿Cuál es el problema?
y me pregunto quién me está respondiendo telepáticamente ;)
tal vez en el código es necesario añadir una condición que la cuenta es una demo
Tengo la pista, pero no puedo mostrar el código.
Entonces el único consejo que te puedo dar es que pongas Prints en todos los lugares potencialmente problemáticos, y nos des los logs del EA no comercial. A menos que, por supuesto, puedas averiguar las huellas por ti mismo.
Chicos, me podéis decir cómo solucionar esto, antes todo iba bien - los informes se guardaban en opera... Ahora está vomitando en la ventana al intentar guardar un informe de probador de estrategias.
Problema resuelto. Lo he descubierto. Mi ordenador empezó a abrir archivos html con wordpress por alguna razón... Me he convertido a Opera y todo funciona como debería.
Buenas tardes. Algunos consejos para un principiante.
Cómo corregir el EA "tradingexpert.mq4" del tutorial MQL4. Si quisiera abrir una nueva orden en esa dirección, y el EA estaría esperando una señal del indicador para abrir en la dirección opuesta.
Me dijeron que usara la función alias KimIV - "GetTypeLastClosePos()". He intentado aplicarlo, pero las operaciones no se abren. Por favor, aconséjeme cómo corregir el EA. Aquí está el código con mis cambios resaltados en rojo.
Chicos, podéis decirme cómo solucionar esto, antes todo iba bien - los informes se guardaban en opera... Ahora está vomitando en la ventana al intentar guardar un informe de probador de estrategias.
Problema resuelto. Lo he descubierto. Mi ordenador empezó a abrir archivos html con wordpress por alguna razón... Me he convertido a Opera y todo funciona como debería.
¿Tal vez tus archivos html se abren con el bloc de notas por defecto? prueba a mirar en el panel de control en la pestaña de programas por defecto
Por favor, aconseje cómo escribir la condición "si el último tipo de orden cerrada fue OP_BUY" en MQL4.
Por favor, aconsejar, he escrito un EA, no hay errores, en el probador de la estrategia que las pruebas, pero no va a operar en una cuenta demo. ¿Cuál es el problema?
Para estas cuestiones hay una rama especial)))
aha x ))))))
Me pregunto quién me está respondiendo telepáticamente ;)
Tal vez usted necesita para agregar alguna condición para el código, que la cuenta es una demo
Recibí tu sugerencia, pero el código, por desgracia, no puede sacarlo (
aha x ))))))
y me pregunto quién me está respondiendo telepáticamente ;)
tal vez en el código es necesario añadir una condición que la cuenta es una demo
Tengo la pista, pero no puedo mostrar el código.