Sin más, se ejecuta primero el primer bloque y luego el segundo. Con otro - o el primero o el segundo.
ooo! la logica esta ausente otra vez!) lo cambiare pronto! si, y sobre la marcha: si escribo en todas partes del texto no con la 4ta sino con la 3ra, asi:
iFractals(Symbol(),PERIOD_H1,MODE_UPPER,3);
No tengo oficios, aunque las barras a la 3ª parecen ser suficientes para que todo funcione, ¿cuál es el problema?
Y en cuanto a la lógica del indicador, estoy un poco confundido. Sé cómo funciona el indicador, sólo necesito el algoritmo para asegurar que ifractals no es igual a cero, y me ofrece para eliminar esta condición, es superfluo? ¿Por qué lo escribo dos veces?
Buenas noches, pido ayuda con un Asesor Experto MACD multidivisa. El EA sigue los criterios de apertura de posiciones correctamente, pero el cierre "en condiciones" no funciona. Ciertamente he empezado a utilizar un trailing stop, pero el cierre correcto no me da tregua.
Este es el aspecto de la parte principal
Y este es el bloque de cierre. Por favor, ayúdenme a encontrar el error.
Perdona que me repita, pero por mucho que me esfuerce, no consigo encontrar el error.
//+------------------------------------------------------------------+string lSymbol;
int init ()
{
lSymbol = Symbol();
return (0);
}
int deinit()
{return(0);}
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
double 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);
Так выглядит оснавная часть, а это злопалучный блок закрытия
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)
{
if(OrderStopLoss()<bid-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))
{
if((OrderStopLoss()>(ask+point*TrailingStop)) || (OrderStopLoss()==0))
{
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.
Desmontar completamente la lógica del indicador.
Sustitúyelo primero.
en
También,
Sin más, se ejecuta primero el primer bloque y luego el segundo. Con otro - o el primero o el segundo.
No tengo oficios, aunque las barras a la 3ª parecen ser suficientes para que todo funcione, ¿cuál es el problema?
Y en cuanto a la lógica del indicador, estoy un poco confundido. Sé cómo funciona el indicador, sólo necesito el algoritmo para asegurar que ifractals no es igual a cero, y me ofrece para eliminar esta condición, es superfluo? ¿Por qué lo escribo dos veces?
Desmontar completamente la lógica del indicador.
Sustitúyelo primero.
en
Además,
Sin más, se ejecuta primero el primer bloque y luego el segundo. Con otro - o el primero o el segundo.
Es posible luchar, y el trabajo del EA puede ser interrumpido. Sólo tenemos que cambiar el enfoque.
¿Cómo?
Al principio del código, recorre todas las órdenes abiertas, busca y asigna los valores de los tickets a las órdenes, ¿o hay alguna otra forma?
Al principio del código, recorre todas las órdenes abiertas, busca y asigna los valores de los tickets a las órdenes, ¿o hay alguna otra forma?
Puede hacer esto si el EA abre una o dos posiciones.
Puede hacerlo, siempre que el asesor abra una o dos posiciones.
El EA es multidivisa, por lo que las operaciones sencillas no siempre parecen resolverse a la vez ((. Y no hay experiencia.
Mi Asesor Experto es multidivisa, y las operaciones sencillas no siempre parecen resolverse a la vez ((. Y no hay experiencia.
Sólo hay que hacer la contabilidad de los pedidos correctamente. Hay muchos ejemplos.
Y la experiencia. La experiencia viene con el territorio. No irá a ninguna parte.
Sólo tiene que asegurarse de que los pedidos se registran correctamente. Hay muchos ejemplos.
Y la experiencia. La experiencia viene con el territorio. No va a ninguna parte.
Gracias por las respuestas, buscaré en los archivos.
Buenas noches, pido ayuda con un Asesor Experto MACD multidivisa. El EA sigue los criterios de apertura de posiciones correctamente, pero el cierre "en condiciones" no funciona. Ciertamente he empezado a utilizar un trailing stop, pero el cierre correcto no me da tregua.
Este es el aspecto de la parte principal
Y este es el bloque de cierre. Por favor, ayúdenme a encontrar el error.
Perdona que me repita, pero por mucho que me esfuerce, no consigo encontrar el error.
He sustituido todo, pero sigue saltando igual por alguna razón...((((((