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

 
sibiriyak73:

¿Dónde está el error?

Si hay muchos personajes, entonces hay muchas "aperturas".

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

Si hay muchos personajes, entonces hay muchas "aperturas".

Gracias, amigo. ¿Cómo puedo hacer para que una transacción al día arrancar en el instrumento actual y no tener en cuenta otros instrumentos (EA se mantiene en varios instrumentos)
 
sibiriyak73:
Gracias amigo. Cómo hacerla una operación al día para arrancar en el símbolo actual y no tener en cuenta otros instrumentos (EA se para en varios símbolos)

- buscar en el historial de órdenes por su número mágico y símbolo, si la hora de apertura (¿o cierre?) de la orden corresponde a la fecha actual, entonces salir de OnTick()

- controlar la "nueva barra" de la TF D1


la primera forma - más escritura, pero en el probador, MT4 funcionará muy rápido; la segunda forma - 3 líneas de código, pero en el probador "masticará" el disco duro y el tiempo de prueba será más largo

 
sibiriyak73:
(EA se sitúa en varios instrumentos)

Ah, creo que lo entiendo, si tienes un EA parado en varios instrumentos, entonces sólo tienes que añadir una comprobación de que la orden pertenece al EA.

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

Ah, creo que lo entiendo, si tienes un EA en varios instrumentos, entonces sólo tienes que añadir una comprobación de que la orden pertenece al EA.

Este código abre un gran número de ofertas. La idea es correcta, pero cómo aplicarla correctamente.

 
sibiriyak73:

Este código abre un gran número de operaciones. La idea es correcta, pero cómo aplicarla correctamente.

Necesitas esto

Función isTradeToDay().

Esta función devuelve el indicador de comercio de hoy

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

¿Qué se puede adivinar de un trozo de código aquí?

Poner un control, no más de una vez al día.

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

Chicos ayuda en el asesor necesita para abrir un comercio al día EN LA HERRAMIENTA.

Puedes probar esto

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

Puedes probar esto.

Todo escrito hace mucho tiempo ... hace mucho tiempo.

Este código comprueba lo que ya está en el mercado y lo que está en el historial en caso de que ya esté cerrado hoy.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, 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 (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

¿Qué puedes adivinar de un trozo de código aquí?

Poner un control, no más de una vez al día.

Saludos. El problema es que si el EA ve una operación abierta en la cuenta, no abre más operaciones. Es como "tienes operaciones abiertas en tu cuenta por qué quieres que haga esto". Tengo que explicarle que no se debe abrir más de una operación en ESTA HERRAMIENTA(EUR USD por ejemplo) porque este EA está abierto en pocos símbolos. Creo que sería un error mostrar todo el código (es un código grande con variables declaradas, etc.).