[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 291

 
Gracias a todos! Lo he resuelto... Primero lo hice sin IndicatorBuffers(2); y no funcionó...
 

Ayuda por favor tener un asesor para romper a través de los fractales. Recogí buenos parámetros sólo tiene que añadir que establece una gran cantidad de martingala (2 más cuando se pierde).O dar el poder en el asesor sólo se duplicará el lote sin esperar a 2 para ejecutar (si está disponible).Aquí es un asesor:

//+------------------------------------------------------------------+

|| Fractales.mq4 |

//| TO |

//| http://www.forex-tradexperts-to.narod.ru |

//+------------------------------------------------------------------+

#property copyright "TO"

#enlace de propiedad "http://www.forex-tradexperts-to.narod.ru"





#include <WinUser32.mqh>.


extern int TP_Fract_3=300;

extern int SL_Fract_3=200;

extern int TP_Fract_11=500;

extern int SL_Fract_11=300;

extern bool comprar_Fract_3=true;

extern bool vender_Fract_3=true;

extern bool comprar_Fract_11=true;

extern bool vender_Fract_11=true;

extern bool podtvergdenie=false;

extern int tofract=10;

extern double lotes=0.1;

extern int ID = 5452;


cadena com;

doble pliego;


int init()

{

com=DoubleToStr(ID,0);

spread=MarketInfo(Symbol(),MODE_SPREAD)*Punto;

return(0);

}


int deinit()

{

return(0);

}


datetime t1,t2=0;


bool order(double price,int type,string c,int m)

{

int i;

for(i=Total de pedidos()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)return(false);

if(i==0)return(true);

}

if(OrdersTotal()==0)return(true);

}


int inicio()

{

int i,ret;

t1=Tiempo[0];

si(t1!=t2)

{

int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1);

int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1);

int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1);

int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1);

if( fract_buy_3==3 && buy_Fract_3==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,Alto[fract_buy_3]+tofract*Punto-SL_Fract_3*Punto,Alto[fract_buy_3]+tofract*Punto+spread+TP_Fract_3*Punto,5);

for(i=Total de pedidos()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);

romper;

}

if(i==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))

{

si(podtvergdenie)

{

ret=MessageBox("Señal en "+Símbolo()+" H1 BUYSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);

}

}

}

if( fract_sell_3==3 && sell_Fract_3==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);

for(i=Total de pedidos()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red);

romper;

}

if(i==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))

{

si(podtvergdenie)

{

ret=MessageBox("Señal en "+Símbolo()+"H1 SELLSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5);

}

}

}

if( fract_buy_11==11 && buy_Fract_11==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,Alto[fract_buy_11]+tofract*Punto-SL_Fract_11*Punto,Alto[fract_buy_11]+tofract*Punto+spread+TP_Fract_11*Punto,21);

for(i=Total de pedidos()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue);

romper;

}

if(i==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))

{

si(podtvergdenie)

{

ret=MessageBox("Señal en "+Símbolo()+"H4 BUYSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);

}

}

}

if( fract_sell_11==11 && sell_Fract_11==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);

for(i=Total de pedidos()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red);

romper;

}

if(i==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))

{

si(podtvergdenie)

{

ret=MessageBox("Señal en "+Símbolo()+"H4 BUYSTOP "+"{¿Set Order?", "Señal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lotes,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21);

}

}

}

t2=Tiempo[0];

}

return(0);

}

Soy malo escribiendo en ruso, ¡lo siento!

 
AppaRat:

No se me da bien escribir en ruso, ¡lo siento!

Ni siquiera sabes insertar código. No quiero leer esto.
 

Dime quién puede ayudar con el bloque Klimov, el problema es que no devuelve el valor del último cerrado, sino el valor del último cerrado por la condición

por lo que a 2 condiciones

bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

devuelve ambos valores True,

cómo hacer que devuelva sólo la última orden cerrada y no la última por un condicional,

Aquí está el código que añadí comprobación por lotes para mi comodidad

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}



//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
FoxUA:

Dime quién puede ayudar con el bloque Klimov, el problema es que no devuelve el valor del último cerrado, sino el valor del último cerrado por la condición

por lo que a 2 condiciones

devuelve ambos valores True,

cómo hacer que devuelva sólo la última orden cerrada y no la última por un condicional,

He añadido una comprobación de lotes al código para mi comodidad


¿Ha añadido la comprobación de los lotes a esta función? Ahora comprueban las últimas posiciones cerradas con el lote pasado, y el lote es probablemente siempre igual a cero, o un número entero. La variable ll debe ser de tipo double. De todos modos, ¿por qué necesitamos comprobar el lote aquí?

Escribe lo que quieres conseguir, y ellos te lo dirán :)

 

Sí, ¿y por qué el lote es una int? El lote siempre ha sido doble.

Podrías hacer esto, cuando te quede un pedido, determinar qué pedido queda y buscar el contrario.

 
FoxUA:

Dime quién puede ayudar con el bloque Klimov...

No duplique los mensajes en diferentes hilos, es una mala forma.
 
artmedia70:

¿Comprobar los lotes en la función añadida por ti mismo? Ahora comprueban las últimas posiciones cerradas con el lote pasado, y el lote es probablemente siempre igual a cero, o un número entero. La variable ll debe ser de tipo double. De todos modos, ¿por qué necesitamos comprobar el lote aquí?

Escribe lo que quieres conseguir, y ellos te lo dirán :)

Ya lo he conseguido todo, pero hay un fallo, es que en un momento determinado me sale un pedido que no necesito,

Intenté cambiarlo a int, originalmente era double pero se me olvidó devolverlo, y si uso una función separada sin comprobación de lote, el resultado no cambia, así que tal vez no lo comprobé correctamente, ayúdenme a entender qué pasa con este error

este es el aspecto de la solicitud

вот так работает без проблем 
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);

при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

начинает возвращять True не по одному а по двум запросам 
BuyTakeLotB и BuystopLotA



 
Roger:

Sí, ¿y por qué el lote es una int? El lote siempre ha sido doble.

Podrías hacer esto, cuando te quede un pedido, determinar qué pedido queda y buscar el contrario.


no es tan sencillo porque las condiciones de apertura pueden ser 2 en la venta, y entonces esta búsqueda no encontrará nada
 
granit77:
No duplique los mensajes en diferentes hilos, es una mala forma.

Lo siento, me esforzaré más en recordar borrar los mismos mensajes de diferentes hilos,