[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 376

 
Reshetov:

OrdersTotal() da el número de posiciones ya abiertas, es decir, se puede utilizar para comprobar si ya hay una posición abierta o no.

Utilizo la función Terminal() del tutorial cuando cierro posiciones, siempre que Mas_Ord_New[0][0]!=0. Pero tenemos otra tarea aquí: debemos crear una bandera que prohíba operar por la señal actual si una orden ya ha sido abierta por ella. Estoy tratando de usar banderas, pero me he equivocado de alguna manera.

  
static bool buy_1=true;
   
if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
       }


   
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
       buy_l=true;
 

Parny necesita ayuda ¿Qué es?

2012.09.10 18:40:20 '6257743': orden de compra de 5,00 EURUSD de apertura a 1,27816 sl: 1,27791 tp: 1,27876 falló [S/L o T/P inválidos].

También por qué el precio y el stop loss es el mismo:

Precio 1,25618 Stop Loss 1,25618 Take Profit 1,25698


Take Profit 60 pips

Stop Loss 20

 

Hola. Tengo una pregunta sobre los indicadores personalizados. La descripción de iCustom dice:

doble iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Cálculo del indicador personalizado especificado. El indicador personalizado debe ser compilado (archivo con extensión EX4) y colocado enel directorio terminal_experts\indicators.
símbolo - Nombre del símbolo, sobre cuyos datos se calculará el indicador. NULL significa símbolo actual.
marco temporal - Período. Puede ser uno de los períodos del gráfico. 0 significa el período del gráfico actual.
nombre - Nombre del indicador personalizado.
... - Lista de parámetros (si es necesario). Los parámetros transmitidos deben corresponder al orden de declaración y al tipo de variables externas (extern) del indicador personalizado.
modo - Índice de la línea indicadora. Puede ser de 0 a 7 y debe corresponder al índice, utilizado por una de las funciones SetIndexBuffer.
turno - Índice del valor obtenido del búfer del indicador (desplazamiento relativo a la barra actual en el número de períodos especificado hacia atrás).

Pregunta: cómo obtener el valor de "shift" (cuando se llama al indicador con un shift, éste utiliza los valores como sin él, es deciriCustom(NULL, 0, "nombre",pam1,0,1)= iCustom(NULL, 0, "nombre",pam1,0,100), pero si llamo al indicador hace 100 barras, tendrá un valor diferente de iCustom(NULL, 0, "nombre",pam1,0,100). El indicador es simple, utiliza 5 valores de Cierre anteriores, toma su promedio.

Le agradeceré su ayuda.

 
paladin80:
Ha ajustado la desviación de la línea principal a 0 (cero). Debería ser superior a cero.
Reshetov:
¿Pondrías también la desviación en negativo?


¡Gracias, camaradas! ¡Exactamente! Estaba demasiado ocupado trabajando y no tenía ni idea. Ojalá hubiera podido pulsar el botón de agradecimiento, para no multiplicar. )

Por cierto, sería útil recomendar a los novatos que pasen parámetros a los indicadores a través de variables con nombres elocuentes. Hasta ahora lo he hecho, esta vez me he perdido algo.

 

¡Buenas noches a todos!

Quería hacer la misma pregunta y tomé la función de aquí https://www.mql5.com/ru/forum/131859

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}

Me da errores--->

Todas las variables de la función están definidas dentro de ella... ¿qué pasa?

lo copié, lo pegué. --->

   if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
   
   
 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 
DanLett:

Ahí no hay errores:

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), CLR_NONE);
          }
        }
      }
    }
  }
}
Pero, sólo hay que especificar un color, por ejemplo -CLR_NONE.
 

Y parece que tienes esto "colgado en el aire":

  if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
En realidad, tal condición (High[2]==High[1 ]) o tal(Close[2]==High[1 ]) o tal(High[2]==Open[1 ]) es rara. Observa el gráfico, ¿cuántas de estas coincidencias encontrarás?

En cuanto a la lógica de la eliminación de la orden, ... - también sufre, en definitiva.

 

copié el código de aquí y creé un nuevo proyecto (EA) pegué el código -> compilé

Extrañamente, sigue dando los mismos errores...

 
DanLett:

copié el código de aquí y creé un nuevo proyecto (EA) pegué el código -> compilé

Extrañamente, sigue dando los mismos errores...

Intenta eliminar todo excepto esta función y compila. ¿Habrá algún error? Guárdalo antes de borrarlo.
 

He estado operando manualmente, eurusd 5 min, compruébalo si tienes tiempo....

Quiero construir un EA basado en esta estrategia, sólo necesito cerrar las operaciones con la condición _2 :), no puedo entenderlo, incluso tengo una función de cierre y me da errores todo el tiempo .....