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

 
законопослушный гражданин #:

Por lo que veo, la diferencia es ésta:

Puedes recorrer la historia desde el principio o desde el final. No hay ninguna diferencia. De todos modos, la función busca la orden con la última hora de cierre. Y si se quiere eliminar o cerrar órdenes, debemos buscar desde el final de la lista. En caso contrario, el bucle se saltará las órdenes.

 
законопослушный гражданин #:

Por lo que veo, la diferencia es la siguiente:

En este caso no hay ninguna diferencia. El ciclo de OrersTotal a 0 es obligatorio sólo en el caso de cerrar posiciones o eliminar órdenes. En otros casos, depende de su gusto.

 
Mihail Matkovskij #:

Puedes recorrer la historia desde el principio o desde el final. No hay ninguna diferencia. De todos modos, la función busca la orden con la hora de cierre más tardía. Y si quiere eliminar o cerrar órdenes, entonces tiene que buscar desde el final de la lista. En caso contrario, el bucle se saltará las órdenes.

Si la función busca la orden con la última hora de cierre, la búsqueda será obviamente más rápida desde el final, en lugar de desde el principio del historial - desde la hora actual hasta la hora pasada.

 
Artyom Trishkin #:

Si la función busca un pedido con la última hora de cierre, la búsqueda será obviamente más rápida desde el final del historial, en lugar de desde el principio del historial - desde la hora actual hasta la hora pasada.

En sentido contrario, la función encontrará más rápido el pedido con la última hora de cierre, no lo cambiará hasta el final del ciclo y devolverá el resultado. En la dirección de avance, buscará entre todas las órdenes y devolverá una de las últimas. La diferencia es que las variables se sobrescribirán en cada pasada del bucle. Sí, hay una diferencia. Pero creo que no es muy significativo. Aunque yo preferiría el bucle en sentido inverso al de avance. A pesar de que la función funcionará de una manera u otra.

 
Hola a todos, ¿hay alguna forma de cambiar entre las ventanas de los gráficos mediante programación, es decir, hacer que cualquier gráfico esté activo desde el programa?
 
Maksim Mihajlov #:
Hola a todos, ¿hay alguna forma de cambiar entre las ventanas de los gráficos mediante programación, es decir, hacer que cualquier gráfico esté activo desde un programa?

Comprueba

CHART_BRINGING_TO_TOP

Mostrar el gráfico encima de todos los demás gráficos

bool

 
Alexey Viktorov #:

Comprueba

CHART_BRINGING_TO_TOP

Mostrar el gráfico encima de todos los demás gráficos

bool

Gracias.

 
Mihail Matkovskij #:

Puedes recorrer la historia desde el principio o desde el final. No hay ninguna diferencia. De todos modos, la función busca la orden con la hora de cierre más tardía. Y si quiere eliminar o cerrar órdenes, entonces tiene que buscar desde el final de la lista. En caso contrario, el bucle se saltará las órdenes.

De todos modos, hice dos EAs completamente idénticos, ¡¡¡Excepto por el conteo de lotes de órdenes!!! y aquí está el resultado:

NO FUNCIONA (es decir, no abre BAY en lugar de SELL)

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
,,,
double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }

TRABAJO ( (es decir, abre BAY en lugar de SELL)


void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
...
double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

De todos modos, hice dos EAs completamente idénticos, ¡¡¡Excepto por el conteo de lotes de orden!!! y aquí está el resultado:

NO FUNCIONA (es decir, no abre BAY en lugar de SELL)

TRABAJO (es decir, abre BAY en lugar de SELL)


Una vez más subrayo la diferencia

1 variante

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))

2 variante

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
 
законопослушный гражданин #:

De todos modos, hice dos EAs completamente idénticos, ¡¡¡Excepto por el conteo de lotes de orden!!! y aquí está el resultado:

NO FUNCIONA (es decir, no abre BAY en lugar de SELL)

TRABAJO ( (es decir, abre BAY en lugar de SELL)


Trate de entender lo que está codificando, en lugar de copiar ciegamenteOrdersTotal,OrdersHistoryTotal,

OrderSelect

pool=MODE_TRADES

[en] Fuente de los datos a seleccionar. Se utiliza cuando el parámetro de selección es SELECT_BY_POS. Puede ser uno de los siguientes valores:

MODE_TRADES (por defecto) - la orden se selecciona entre las órdenes abiertas y pendientes,
MODE_HISTORY - la orden se selecciona entre las órdenes cerradas y eliminadas.

    OrdersTotal - Торговые функции - Справочник MQL4
    OrdersTotal - Торговые функции - Справочник MQL4
    • docs.mql4.com
    OrdersTotal - Торговые функции - Справочник MQL4
    Razón de la queja: