¿Cuál debería ser el vaso de los precios? - página 12

 
El retraso en el lanzamiento de la secadora se debe a que hay que fabricar un nuevo tipo de motor. Beaker, como aplicación autónoma que funciona como un motor independiente, necesita proporcionar una API de usuario, de lo contrario, como programa cerrado, su valor será mucho menor. Los motores que he hecho en el pasado dependían completamente de los comandos del usuario y no tenían funcionalidad propia. El nuevo tipo de motor, debe funcionar de forma independiente, así como controlado desde el exterior. Ahora estoy resolviendo este problema.
 

Hoy se ha dado otro importante paso adelante. El motor puede ahora funcionar como una aplicación independiente, sincronizando sus valores de parámetros con la aplicación de usuario conectada a él. La aplicación está conectada como antes, pero ahora puede solicitar valores establecidos por la funcionalidad del motor. El motor como programa independiente puede acumular su funcionalidad y ampliar la API proporcionada a las aplicaciones.

En el caso de la pila de precios, - se ha convertido en una aplicación independiente (que terminaré mañana, pasado mañana), y funciona como un indicador. Utilizando la conexión, los usuarios pueden recuperar los valores de esta copa y anularlos, devolviéndolos a la copa de forma modificada. Por ejemplo: El precio en uno de los campos de cristal ha sido analizado por el código del usuario y resulta ser el nivel de algún indicador importante. El usuario envía su marcador de cadena a ese campo y aparecerá junto a ese precio. Esto abre nuevas e interesantes posibilidades para el desarrollo tanto de motores como de programas de usuario.

SZZ. Los eventos del deslizador de la interfaz gráfica de usuario, que antes sólo se enviaban a la aplicación, ahora también los recibe internamente el motor y el manejo paralelo de los eventos se realiza en ambos extremos: en el motor (según mi código) y en la aplicación del usuario (según el código del usuario). Al hacer clic en el botón se activa tanto la funcionalidad del motor como la de la aplicación conectada.
 
Otra cosa que falta en la copa es el beneficio si se cierra ahora en el mercado, es decir, la contabilización del llenado de la copa - relevante para las posiciones un poco más grandes que las pequeñas (por ejemplo, 100-150 lotes).
 
¿Habrá teclas de acceso rápido?
 
Andrey Gladyshev:
¿Habrá teclas de acceso rápido?
Por supuesto.
 
Aleksey Vyazmikin:
Otra cosa que falta en la copa es el beneficio si se cierra ahora en el mercado, es decir, llenar la copa - relevante para las posiciones un poco más grandes que pequeñas (por ejemplo, 100-150 lotes).
Cuenta del llenado de la copa. Me lo pensaré después del lanzamiento de la versión básica, para no retrasar.
 
La copa del precio estará lista. La documentación de la conexión de la API estaba muy retrasada. Escribir la documentación en su propio lenguaje de marcado requiere mucho tiempo. Y también hay que hacer la documentación del bombo. Y el propio vaso. Y al mismo tiempo optimizar el código, el constructor, corregir errores y añadir características. Por eso es tan largo. Pero entonces todo será más rápido y veloz.
 
¿En qué idioma está escrito el programa?
¿Cuál es la velocidad real de procesamiento de los datos entrantes?
¿Cómo se asignan los datos a los niveles de precios?
¿Es un bucle for o hay una variable con datos para cada nivel?
El hecho de haber elegido el tipo de vista del cristal como en los terminales occidentales es correcto.
Sugeriría añadir a la copa, la gestión de órdenes OCO vinculadas hasta tres niveles.
Y en general se puede tomar cualquier muelle funcional del mercado occidental y ver lo que se implementa en él.
O vea cómo se implementa el accionamiento del scalper QScalp.
 
Roman:
¿En qué idioma está escrito el programa?
¿Cuál es la velocidad real de procesamiento de los datos entrantes?
¿Cómo se distribuyen los datos por niveles de precios?
¿En un bucle for o para cada nivel tiene su propia variable con datos?
El hecho de haber elegido el tipo de vista del cristal como en los terminales occidentales es correcto.
Sugeriría añadir al vaso, la gestión de las ofertas OCO vinculadas hasta tres niveles.

1. El programa está escrito en dos idiomas. El lenguaje de base es MQL5, y sobre él, mi lenguaje de marcado.

2. Se distribuye de la misma manera que se envía. Me refiero a las celdas correctas. Es difícil de explicar con palabras. Te enviaré el código más tarde. Por supuesto, tuve que sudar para introducir los datos en las celdas correctas, pero este problema se resolvió.

3. Añadiré todo lo que se me pida y que tenga sentido e importancia.
 

Este es el código para distribuir los datos en las celdas de mi vaso:

void On_DOM_Event()
{
 int t = 0;
 //----------------------------
 MqlTick last_tick;
 SymbolInfoTick(Symbol(),last_tick);
 //----------------------------
 MarketBookGet(NULL,priceArray); 
 //----------------------------
 double p = 0;
 long   ask_size = 0, bid_size = 0;
 int    s = ArraySize(priceArray);
 //----------------------------
 if(s > 0)
   {
    //-------------------------   ---
    for(int i1 = 0; i1 < 100; i1++)prices[i1]  = NULL;
    for(int i1 = 0; i1 < 100; i1++)ask_vol[i1] = NULL;
    for(int i1 = 0; i1 < 100; i1++)bid_vol[i1] = NULL; 
    //----------------------------
    int Closest_to_ask = 0;
    //----------------------------
    for(int a1 = 0; a1 < s; a1++)
      {
       if(
              priceArray[a1].price == last_tick.ask
          || (priceArray[a1].price < last_tick.ask && (((a1 + 1 < s) && priceArray[a1 + 1].price >= last_tick.bid) || (a1 + 1 == s)))
         )
         {
          Closest_to_ask = a1;
          break;
         } 
      } 
    //----------------------------
    for(int a2 = Closest_to_ask; a2 >= 0; a2--)
      { //Alert("t ",t,"  a2  ",a2);
       prices[49-t]  =  Normalize_Double(priceArray[a2].price,_Digits,_Point);
       ask_size     +=  priceArray[a2].volume;
       ask_vol[49-t] =  (string)priceArray[a2].volume;
       t++;
      }
    //--------------------------------  
    t = 0;
    //Alert("_Digits   ",_Digits);
    //--------------------------------  
    for(int a3 = Closest_to_ask + 1; a3 < s; a3++)
      { 
       prices[50+t]  =   Normalize_Double(priceArray[a3].price,_Digits,_Point);
       bid_size      +=  priceArray[a3].volume;
       bid_vol[50+t] =   (string)priceArray[a3].volume;
       t++;
      }         
 //------------------------------------------------       
 //------------------------------------------------ 
 E_DOM_1_Price(prices[40]);    E_DOM_1_Ask_size(ask_vol[40]);
 E_DOM_2_Price(prices[41]);    E_DOM_2_Ask_size(ask_vol[41]); 
 E_DOM_3_Price(prices[42]);    E_DOM_3_Ask_size(ask_vol[42]); 
 E_DOM_4_Price(prices[43]);    E_DOM_4_Ask_size(ask_vol[43]); 
 E_DOM_5_Price(prices[44]);    E_DOM_5_Ask_size(ask_vol[44]);
 E_DOM_6_Price(prices[45]);    E_DOM_6_Ask_size(ask_vol[45]);
 E_DOM_7_Price(prices[46]);    E_DOM_7_Ask_size(ask_vol[46]);
 E_DOM_8_Price(prices[47]);    E_DOM_8_Ask_size(ask_vol[47]);  
 E_DOM_9_Price(prices[48]);    E_DOM_9_Ask_size(ask_vol[48]); 
 E_DOM_10_Price(prices[49]);   E_DOM_10_Ask_size(ask_vol[49]);
 //-------------------------------------------------
 E_DOM_11_Price(prices[50]);  E_DOM_11_Bid_size(bid_vol[50]);
 E_DOM_12_Price(prices[51]);  E_DOM_12_Bid_size(bid_vol[51]);
 E_DOM_13_Price(prices[52]);  E_DOM_13_Bid_size(bid_vol[52]); 
 E_DOM_14_Price(prices[53]);  E_DOM_14_Bid_size(bid_vol[53]); 
 E_DOM_15_Price(prices[54]);  E_DOM_15_Bid_size(bid_vol[54]); 
 E_DOM_16_Price(prices[55]);  E_DOM_16_Bid_size(bid_vol[55]); 
 E_DOM_17_Price(prices[56]);  E_DOM_17_Bid_size(bid_vol[56]); 
 E_DOM_18_Price(prices[57]);  E_DOM_18_Bid_size(bid_vol[57]);    
 E_DOM_19_Price(prices[58]);  E_DOM_19_Bid_size(bid_vol[58]); 
 E_DOM_20_Price(prices[59]);  E_DOM_20_Bid_size(bid_vol[59]);
 //------------------------------------------------- 
 }
 RMSG(1);
}


Para registrar los datos entrantes, hice una matriz de 100 celdas. Distribuyo los datos entrantes desde el centro de la matriz (celda 49) hacia el lado del ascensor y de la oferta, calculando previamente el precio más cercano al lado del ascensor y de la oferta.

Razón de la queja: