[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 222

 
smartemiy:

Estimados profesionales

Les pido ayuda.

Tengo un robot de comercio que hace 20-80 operaciones cada uno. No puedo entender que depende de la empresa de corretaje?

En lugar de uno - pone 100 unidades.

Por favor, ¡¡¡ayuda!!!

La función de inicio se ejecuta en cada tick y si la condición de apertura de la orden se cumple, se abrirá una nueva orden en cada tick.

Poner límites al número máximo de órdenes abiertas o a una orden por barra, etc.

 
splxgf:

La función de inicio se ejecuta en cada tick, y si se cumple la condición de abrir una orden, se abrirá una nueva orden en cada tick.

Poner límites al número máximo de órdenes abiertas o a una orden por barra, etc.

Muchas gracias por la respuesta.

Splxgf , yo también estaba pensando en eso:

int init()
{  RefreshRates();
   if (NumberOfOrders()>15) return(0); // если число открытых ордеров превышает число 15, тогда советние не торгует
   if (OpenStop()>30) return(0);       // если число отложеных ордеров превышает число 15, тогда советние не торгует
}

NumberOfOrders es un f-from que cuenta el número de órdenes abiertas. OpenStop - f-op cuenta el número de órdenes pendientes.

La condición de apertura de la orden se cumple y el EA pone cualquier número de órdenes en una fila.

>splxgf: Esta es una variante del código que detiene el Asesor Experto cuando se supera el número de operaciones. ¿Cómo escribo para que se realice un pedido cuando se active la condición?

 

init sólo se ejecuta una vez https://docs.mql4.com/ru/basis/functions/special

int MaxOpenOrders=15;

int start()
  { 
    //bla-bla
    if (((OrderOpenPrice()-pAsk) >= -60 || OrdersTotal()<MaxOpenOrders) //открываем новые если количество открытых и отложенных ордеров не превышает 15
    OrderSend...
  

De hecho, hay un tutorial en https://book.mql4.com/ru/

Si quiere que la condición se active sólo una vez, es más complicado

 
¡Caballeros! Alguien puede responder a mi pregunta sobre el netbook y el módem 3G (en la página 221). Gracias de antemano.
 
splxgf:

init sólo se ejecuta una vez https://docs.mql4.com/ru/basis/functions/special

De hecho, hay un tutorial en https://book.mql4.com/ru/

Si quieres que la condición se active sólo una vez, es más complicado.

Gracias.

Lo investigaré.

 

Busqué en la base de datos y no pude encontrarlo, pero tal vez no estaba buscando lo suficiente.

Decidme, queridos, ¿tenéis algo parecido?

El algoritmo es sencillo: un análogo de una cuadrícula en la que se abre una orden cada n pips (compra o venta, según la dirección del precio). Las órdenes se abren hasta que haya un beneficio de m pips. Cuando se alcanza este valor, se cierran todas las órdenes y todo vuelve a empezar.

Gracias de antemano por su atención.

 
Zhunko:
La tarea consistía en guardar el historial descargado en los archivos del historial. Durante el proceso de descarga, todo el historial se mantiene en la memoria. Después de cerrar la ventana de MT4 se inicia el almacenamiento en los archivos utilizando las herramientas de MT4. No es un proceso rápido.

Vadim, resolví el problema de ahorro de esta manera:

if(Bars<7000)
  {
    int handle, bar, wParam;
    handle=WindowHandle(Symbol(),Period());
    switch(Period())
            {
                  case PERIOD_M1:  wParam = 33137; break;
                  case PERIOD_H1:  wParam = 33135; break;
                  case PERIOD_D1:  wParam = 33134; break;
            }
    for(bar=1;bar<7000;bar=+100)
      {
        Comment(Bars);
        PostMessageA(handle,WM_KEYDOWN,VK_HOME,0); Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_COMMAND,33135,0);  Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_KEYDOWN,VK_HOME,0); Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_COMMAND,33134,0);  Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_KEYDOWN,VK_HOME,0); Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_COMMAND,33137,0);  Comment(Bars); Sleep(10000); 
        bar=Bars;
        RefreshRates();
        if(Bars>=7000) {PostMessageA(handle,WM_KEYDOWN,VK_END,0); StartProfit();} //обязательный выход, иначе просто остается и подкачивает данные
        
      }
   }

Gracias al salto entre marcos temporales, el historial se guarda simultáneamente en varios marcos temporales (en este caso es 1 minuto, 1 hora y 1 día). Así, no es necesario apagar el terminal, pero la carga no es muy rápida, la velocidad es de aproximadamente 1 minuto (en estas condiciones) para un par de divisas, es decir, si lo iniciamos para muchas divisas, el terminal se colgará durante media hora. El Asesor Experto comienza a utilizar los datos históricos sin recargar el terminal.

 
forexnew:

Vadim, he resuelto el problema de la conservación de esta manera:

Gracias al salto entre marcos temporales, el historial se guarda simultáneamente para varios marcos temporales (en este caso es 1 minuto, 1 hora y 1 día). Así, no es necesario apagar el terminal, pero la carga no es tan rápida, la velocidad es de aproximadamente 1 minuto (en estas condiciones) para un par de divisas, es decir, si lo iniciamos para muchas divisas, el terminal se colgará durante media hora. El Asesor Experto comienza a utilizar los datos históricos sin recargar el terminal.

Tengo lo mismo sólo que muchas veces más fiable. Al cambiar el TF, el historial no se guarda en los archivos. Sólo al descargar el terminal.

A veces el propio terminal guarda el historial pero no tiene nada que ver con el TFswitching.

 
Zhunko:

Tengo lo mismo sólo que muchas veces más fiable. Al cambiar el TF, el historial no se guarda en los archivos. Sólo cuando el terminal está descargado.

A veces el terminal comienza a guardar el historial por sí mismo, pero no está relacionado con el cambio de TF.

¿Cómo puedo configurarlo para que descargue sólo algunos plazos (no todos): minutos, 1 hora y días?

Así: string sTimeFrame = {"M1", "H1", "D1"}; // La cadena que enumera el TF que se va a escanear.

No descargará más de 2000 barras en un minuto pero mi Asesor Experto necesita más de 7000. Después de descargar con este script, mi Asesor Experto lo terminará.

¿Está diseñado así, no se descargan todos los bares?

 

Hola querida comunidad.

Tengo un problema así. Estoy utilizando el indicador "Bandas de Bollinger" en mi plantilla (iBands - https://docs.mql4.com/ru/indicators/iBands) y uno de sus parámetros - desviación (desviación estándar) se define allí como int. ¿Es posible cambiarlo por el doble? En MT4, en la sección "Indicadores personalizados", hay otras Bandas de Bollinger (marcadas como "Bandas") donde la desviación se define como doble . Pero, ¿cómo insertarlo en MQL4? No está incluido en el conjunto estándar de indicadores incorporados, ¿verdad? No tengo ni idea de cómo utilizarlo en MQL4.