¿Cómo codificar? - página 210

 

Muchas gracias!!! cockeyedcowboy, eso fue realmente genial!!

¡¡Ahora el mensaje de error está lejos!!

Pero el segundo indicador no se dibuja y no sé por qué

Buffer_Ma=iMAOnArray(Buffer_Mom,0,Periode_MA_Momentum,0,MODE_SMA,i);

 

Tienes un problema con el segundo buffer porque no tiene datos para los cálculos.

Intenta calcular TODOS los elementos en Buffer_Mom, luego Buffer_Ma.

Ejemplo:

void start()

{

int counted_bars=IndicatorCounted();

int limit=Bars-counted_bars;

if(counted_bars>0) limit++;

for(int i=0; i<limit; i++)

{

Buffer_Mom=iMomentum(NULL,Timeframe_Momentum,Periode_Momentum,PRICE_CLOSE,i);

}

for( i=0; i<limit; i++)

{

Buffer_Ma=iMAOnArray(Buffer_Mom,0,Periode_MA_Momentum,0,MODE_SMA,i);

}

return(0);

}

Buena suerte.

 

Encontrar el OHLC de una barra específica

¿Puede alguien decirme cómo puedo averiguar el precio de cierre de una barra específica utilizando el código MQL? ¿Puedo referenciar una barra por su hora?

Es decir: precio_de_cierre_de_la_barra = Close("04:59:00 AM") ... ¡si fuera tan fácil!

Gracias

 

¡Hola amigos!

ok tengo otro gran problema...

como codificar esta condicion:

entrar en largo o en corto solo la primera vez

(asi que si tengo muchas señales largas ea entrar solo en la primera vez)

pagare a todos los que me puedan ayudar en esto

este es mi codigo simple para la condicion de compra:

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}
 
Sadly:
¿Puede alguien decirme cómo puedo averiguar el precio de cierre de una barra específica utilizando el código MQL? ¿Puedo referenciar una barra por su hora?

es decir, closing_price_of_bar = Close("04:59:00 AM") ... ¡si fuera tan fácil!

Gracias

Pruebe esto:

precio_de_cierre = iClose(Symbol(),PERIOD_M1,iBarShift(Symbol(),PERIOD_M1,StrToTime("04:59"));

 

Comprar o vender

Hola a todos,

Tengo el EA de compra y el EA de venta que siempre abren más de una posición. Me gustaría que me ayudaran a cambiar o modificar el código para que sólo permita 1(una) posición de compra y 1(una) posición de venta y en 1(una) cuenta.

El SL y el TP estarán usando el precio objetivo, es decir, si el precio de compra ha alcanzado el precio objetivo, cerrará la posición. Lo mismo con el precio de venta.

Agradezco la ayuda de los expertos en código de este foro.

Gracias.

=s21=

Archivos adjuntos:
opensell.mq4  2 kb
 

Comprar y vender

Oooops...

Aquí está el EA de compra.

Archivos adjuntos:
openbuy.mq4  2 kb
 

Hola, si necesitas que sólo se abra un pedido, puedes añadir la siguiente condición: Si (OrdersTotal()==0).

Así que las reglas para las órdenes de compra serán algo así:

if (Order == SIGNAL_BUY && (OrdersTotal==0) && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))

[/CODE]

So you will not get second-third-... orders opened until you current order open.

dr.house7:
hy folks !

ok i have another big problem...

how to code this condition :

enter long or short only first time

(so if i have many following long signal ea enter only at first time)

i'll pay everyone could help me on this

this is my simple code for buy condition:

[CODE]

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}
 
Roger09:
Prueba esto: precio_de_barra_de_cierre = iClose(Symbol(),PERIOD_M1,iBarShift(Symbol(),PERIOD_M1,StrToTime("04:59"));

¡Fabuloso! Tuve que añadir 1 paréntesis de cierre extra para que el intérprete dejara de quejarse de un error, pero funcionó de maravilla.

Gracias, Roger09

 
Avalanche2k:
Hola, si necesitas que sólo se abra una orden, puedes añadir la siguiente condición Si (OrdersTotal()==0).

Así que las reglas para las órdenes de COMPRA serán algo así:

if (Order == SIGNAL_BUY && (OrdersTotal==0) && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))

De esta manera no se abrirá la segunda-tercera-... orden hasta que se abra la orden actual.

gracias Avalancha,

pero no es una solución para mí, porque tengo un TP, no espero hasta la condición opuesta

¿Otra idea? PM me voy a pagar

Razón de la queja: