Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1663

 
artem artem #:

MakarFX, ¡gracias! Ahora no hay una primera orden extra de no señal, pero ahora por alguna razón la primera orden de señal (normal) está entrando 2 velas antes)) Adjunté una captura de pantalla del probador a mi mensaje, pero incluso a pesar de esta primera orden - lo más importante está hecho, muchas gracias de nuevo) Con los magos lo consiguió, entonces voy a hacer una variable externa y cuando voy a adjuntar el explorador a un gráfico específico de un par de divisas, voy a cambiar el número para cada par individualmente.

Miraré la apertura.

No es necesario cambiar el magik, si el símbolo está controlado.

 
Nerd Trader #:

Ya lo he olvidado... y al principio lo hice (está bien que lo haya bloqueado), pero el método de la condición me parecía poco fiable, quería algo más obvio para indicar un cambio de orden.

Bueno, todavía tienes que comprobar las condiciones en cada nuevo tick, si no funcionó en el tick anterior - cambiará en el nuevo tick.

Y el procesamiento de errores debe hacerse.

 
Nerd Trader #:

Ya lo había olvidado... y lo hice al principio (menos mal que me he comprometido), pero la forma de la condición me parecía poco fiable, quería algo más obvio para indicar un cambio de orden.

//+------------------------------------------------------------------+
if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit(), 0))
   ObjectCreate(0,OrderTicket(),OBJ_ARROW_UP,0,Time[0],Bid);
//+------------------------------------------------------------------+
int NameObject()
  {
   int ticket=-1;
   for(int i=0;i<ObjectsTotal();i++)
     {
      ticket=StringToInteger(ObjectName(0,i,0));
     }
   return(ticket);
  }
//+----------------------------------------------------------------------------+
void GetTicketOrder()
  {
   int result=-1;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
     {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               if(OrderTicket() == NameObject())
                  {
                     делай все что хочешь
                  }
              }
           }
        }
     }
  }
 
EVGENII SHELIPOV moneda del depósito, se cierra toda la parrilla de pedidos

Por favor, ayúdenme a cambiar el código para que haya puntos en lugar de Beneficios. Gracias.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
  double p;
  int    i, k=OrdersTotal(), pr=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
          if (OrderType()==OP_BUY) {
            pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
          }
          if (OrderType()==OP_SELL) {
            pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
          }
        }
      }
    }
  }
  return(pr);
}
 
artem artem #:

MakarFX, ¡gracias! Ahora no hay una primera orden extra de no señal, pero ahora por alguna razón la primera orden de señal (normal) está entrando 2 velas antes)) Adjunté una captura de pantalla del probador a mi mensaje, pero incluso a pesar de esta primera orden - lo más importante está hecho, muchas gracias de nuevo) Con los magos lo consiguió, entonces voy a hacer una variable externa y cuando se adjunta el espert a un gráfico de par de divisas en particular, voy a cambiar el número para cada par individualmente.

¿Qué periodo se probó y cuál fue el número de confirmaciones?
 
MakarFX #:

Makar por lo que tengo entendido se debe intentar en lugar de la función CalculiteProfit()

 
EVGENII SHELIPOV #:

Makar por lo que tengo entendido se debe intentar en lugar de la función CalculiteProfit()

y cambiar esto

int op = GetProfitOpenPosInPoint("", -1, Magic ); 
 
MakarFX #:
¿En qué periodo se realizaron las pruebas y cuál fue el número de confirmaciones?

MakarFX, en esa captura de pantalla, que he adjuntado, probado en EUR / USD - M 30 - todos los ticks - 01.08.21 a 03.09.21 - 26 órdenes fueron (pero he cambiado la constante de 4 a 8, decidí mirar a un mayor número de velas)

Si devolvemos la constante a 4 velas, entonces para el mismo periodo - entonces 35 órdenes, pero la primera orden también llega 2 órdenes antes

Archivos adjuntos:
 
MakarFX #:

y lo cambias.

Makar, ¿puedes decirme si sólo hay un orden mínimo y máximo?

 
EVGENII SHELIPOV #:

Makar, ¿puedes decirme si sólo hay un orden mínimo y máximo?

¿Se refiere a "mínimo y máximo" por billete o por precio?