Ayuda a la codificación - página 212

 
zoroxzyad:
ican utilizar lwma así que si quiero que el período sea 30 en el casco lo mv debo poner en el gráfico dos ma o sólo uno con howmuch período iam no es bueno en matemáticas y gracias muy muy hombre en su esfuerzo

zoroxzyad

No puedes utilizar sólo la media móvil. Debes usar la fórmula del post anterior

 

¿Hay ya algún manual para el nuevo Metatrader 4?

¿O alguna vez harán uno?

 
techmac:
¿Hay ya algún manual para el nuevo metatrader 4? ¿O es que alguna vez harán uno?

Que yo sepa, no. Supongo que habrá alguno (en algún momento del desarrollo)

 

Mladen, se adjunta un indicador que modificó para mostrar las señales de cruce en el gráfico principal.

Este código es de la nueva versión.

arrUp[CB] = EMPTY_VALUE;

arrDn[CB] = EMPTY_VALUE;

state[CB] = state[CB+1];

if (TrendBuffer[CB]>LoBuffer[CB]) state[CB] = 1;

if (TrendBuffer[CB]<LoBuffer[CB]) state[CB] = -1;

if (state[CB]!=state[CB+1])

{

if (state[CB]== 1) arrUp[CB] = Low[CB] -iATR(NULL,0,10,CB)/2.0;

if (state[CB]==-1) arrDn[CB] = High[CB]+iATR(NULL,0,10,CB)/2.0;

}

¿Hay una manera fácil de explicar cómo este código inserta las señales?

Gracias.

Archivos adjuntos:
 
michaelB:
Mladen, adjunto un indicador que modificaste para mostrar las señales de cruce en el gráfico principal.

Este código es de la nueva versión...

arrUp[CB] = EMPTY_VALUE;

arrDn[CB] = EMPTY_VALUE;

state[CB] = state[CB+1];

if (TrendBuffer[CB]>LoBuffer[CB]) state[CB] = 1;

if (TrendBuffer[CB]<LoBuffer[CB]) state[CB] = -1;

if (state[CB]!=state[CB+1])

{

if (state[CB]== 1) arrUp[CB] = Low[CB] -iATR(NULL,0,10,CB)/2.0;

if (state[CB]==-1) arrDn[CB] = High[CB]+iATR(NULL,0,10,CB)/2.0;

}

¿Hay una manera fácil de explicar cómo este código inserta las señales?

Gracias.

Michael

Busca un cruce de valores en dos buffers : TrendBuffer y LoBuffer. Marca cuál es el estado actual de los dos : si TrendBuffer > LoBuffer pone el estado a 1 y si TrendBuffer < LoBuffer pone el estado a -1.

Ahora, cuando el estado de la barra actual es diferente al estado de la barra anterior, significa que hay un cruce. Y entonces dibuja una flecha en el gráfico

 

¡También profesor molesto de nuevo, por favor, poner este indicador convertido en indicadores MT4, gracias!

colorbars_hlc.mq5

Archivos adjuntos:
 
mladen:
Michael

Busca un cruce de valores en dos buffers : TrendBuffer y LoBuffer. Marca cuál es el estado actual de los dos : si TrendBuffer > LoBuffer pone el estado a 1 y si TrendBuffer < LoBuffer pone el estado a -1.

Ahora, cuando el estado de la barra actual es diferente al estado de la barra anterior, significa que hay un cruce. Y entonces se dibuja una flecha en el gráfico

OK, eso explica TrendBuffer y LoBuffer.

¿Pero cómo funcionan arrUp y arrDn?

Por qué las señales aparecen en ciertas velas y no en todas.

Gracias de nuevo.

 
michaelB:
OK, eso explica TrendBuffer y LoBuffer.

¿Pero cómo funcionan arrUp y arrDn?

Por qué las señales aparecen en ciertas velas y no en todas.

Gracias de nuevo.

michael

imagina una secuencia como esta (1 cuando TrendBuffer > LoBuffer, -1 cuando TrendBuffer < LoBuffer)

11111111-1-1-1-1-1-1-1-111111111

Las flechas tienen que ser dibujadas sólo cuando 1 se convierte en -1 o cuando -1 se convierte en 1 (cuando el "estado" cambia). Por eso hay una línea que lo comprueba (esta línea : if (state[CB] !=state[CB+1]) ). Así, cuando el estado cambia, la flecha se dibuja, de lo contrario la flecha no necesita ser dibujada en absoluto

 

Hola mladen,

espero que tengas tiempo tan cerca de fin de año.

El código de abajo tiene relación con la última pregunta que me hicieron. Se arrastra 0,8 pips para una orden después de que el objetivo de 2 pips en el plus.

¿Pero cómo puedo cambiarlo para que compruebe todas las órdenes y las arrastre individualmente?

Muchas gracias. Gran trabajo que haces aquí.

int start()

{

//----

if (OrdersTotal() == 0) {

isStopLoss = false;

}

for(int i=0; i<=OrdersTotal(); i++) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if(OrdersTotal() == 0) {

continue;

}

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(isStopLoss == true) {

if(OrderType() == OP_BUY) {

if(iClose(Symbol(), 0, 0) >= (OrderOpenPrice()+inProfitStopLoss*Point)) { // Zieht bei 2.0 Pips nach! - 200 = 2.0 Pips

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) >= (lastStopLoss+trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss+trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+inProfitStopLoss*Point,0,0,0);

if(OrderStopLoss() >= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

} else if(OrderType() == OP_SELL) {

if(iClose(Symbol(), 0, 0) <= (OrderOpenPrice()-inProfitStopLoss*Point)) {

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) <= (lastStopLoss-trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss-trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-inProfitStopLoss*Point,0,0,0); // 200 ursprünglich

if(OrderStopLoss() <= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

}

lastStopLoss = OrderStopLoss();

continue;

}

if(OrderType() == OP_BUY) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-initialStopLoss*Point,0,0,0);

} else if(OrderType() == OP_SELL) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+initialStopLoss*Point,0,0,0);

}

lastStopLoss = OrderStopLoss();

}

//----

return(0);

}
 
arroganzmaschine:
Hola mladen,

espero que tenga tiempo tan cerca del final del año.

El código de abajo tiene relación con la última pregunta que me hicieron. Se arrastra 0,8 pips para una orden después del objetivo de 2 pips en el plus.

¿Pero cómo puedo cambiarlo para que compruebe todas las órdenes y las arrastre individualmente?

Muchas gracias. Gran trabajo que haces aquí.

int start()

{

//----

if (OrdersTotal() == 0) {

isStopLoss = false;

}

for(int i=0; i<=OrdersTotal(); i++) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if(OrdersTotal() == 0) {

continue;

}

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(isStopLoss == true) {

if(OrderType() == OP_BUY) {

if(iClose(Symbol(), 0, 0) >= (OrderOpenPrice()+inProfitStopLoss*Point)) { // Zieht bei 2.0 Pips nach! - 200 = 2.0 Pips

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) >= (lastStopLoss+trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss+trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+inProfitStopLoss*Point,0,0,0);

if(OrderStopLoss() >= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

} else if(OrderType() == OP_SELL) {

if(iClose(Symbol(), 0, 0) <= (OrderOpenPrice()-inProfitStopLoss*Point)) {

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) <= (lastStopLoss-trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss-trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-inProfitStopLoss*Point,0,0,0); // 200 ursprünglich

if(OrderStopLoss() <= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

}

lastStopLoss = OrderStopLoss();

continue;

}

if(OrderType() == OP_BUY) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-initialStopLoss*Point,0,0,0);

} else if(OrderType() == OP_SELL) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+initialStopLoss*Point,0,0,0);

}

lastStopLoss = OrderStopLoss();

}

//----

return(0);

}

arroganzmaschine

Revisa la forma en que se gestionan los trailing stops en el EA desde este post : https://www.mql5.com/en/forum/181334. Creo que te puede ayudar ya que tiene todos los elementos (incluyendo la comprobación de errores) que se necesitan para manejar trailing stop loss