¿La desaceleración lineal es un error de programación o una característica de MT4? - página 4

 

sólo la construcción de abajo vale la pena.


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

un poco más

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

y ya puedes ver qué se ejecuta y en qué secuencia. Esto es sólo un formato. Pero también se puede descomponer el código en operaciones lógicamente coherentes y separarlas en funciones independientes. De este modo, el algoritmo principal se libera de montones de código desordenado.

 
micle:

El problema es la duplicación de código, el número excesivo de declaraciones condicionales. De hecho, el código consiste en un 99% de líneas que incluyen de alguna manera el operador condicional If; estoy seguro de que si lo investigas, el número de comparaciones podría reducirse 10 veces. Esto no sólo ralentiza la ejecución, sino que además este código es difícil de leer. Una persona que hace adiciones a la misma tiene al menos 2 tareas principales:

1 - no romperlo

2 - Añadir la funcionalidad necesaria.

En cualquier caso, el código no legible provoca una duplicación adicional de todo tipo de comprobaciones y comparaciones, lo que también supone un gasto adicional. Revisando el código, personalmente me recuerdo a mí mismo hace unos 25 años, cuando recién empezaba a programar, y lo aprendí del manual del PC Atari 800XL sin ningún profesor, sólo porque era interesante.

Por supuesto, es interesante, lo que "si" estamos hablando, hay probablemente mi TOR - donde escribo "si así, entonces así", y el programador lo interpreta en el código, y hay "si" relacionados con el trabajo directo con las órdenes, y hay un montón de operaciones con las órdenes...

Por supuesto, pensé que se trataba de algún tipo de bucle cuya ejecución conduce a múltiples comprobaciones de las condiciones de orden. ¿Y resulta que la situación sólo puede corregirse reescribiendo el código desde cero?

 
micle:

sólo la construcción de abajo vale la pena.

un poco más

y ya sabemos qué se ejecuta y en qué secuencia. Esto es sólo un formato. Pero también se puede descomponer el código en operaciones lógicamente coherentes y separarlas en funciones independientes. De este modo, se liberará al algoritmo principal de montones de código desordenado.

¿Pero no afecta al rendimiento de alguna manera?

 
micle:

Problemas con el código duplicado

La duplicación no tiene nada que ver y nada que ver con los "si". La verdadera ralentización proviene del trabajo con las órdenes judiciales.
 
micle:

sólo la construcción de abajo vale la pena.


un poco más

y ya sabemos qué se ejecuta y en qué secuencia. Esto es sólo un formato. Pero también se puede descomponer el código en operaciones lógicamente coherentes y separarlas en funciones independientes. De este modo, el algoritmo principal se libera de montones de código desordenado.

Argumentos muy fuertes, su código, ¿dónde puedo ver a un programador experimentado?
 

rev 1.1

Para establecer un stop loss y filtrar las órdenes pendientes utilizamos dos variantes de MA espejo.
maMirror - se calcula con la función estándar iMA, funciona una vez por barra, los datos se toman de los precios de apertura de la barra
Algoritmo de cálculo:

Para vender:
punto de cálculo inicial maMirror=iMA+pipsXHmaM(o/b)
punto de cálculo posterior maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
el cálculo se completa después del punto final del cálculo.

Para comprar:
punto de cálculo inicial maMirror=iMA-pipsXHmaL
punto de cálculo posterior maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
el cálculo se termina después del punto final del cálculo.


Para simplificar los TdR es necesario poner dos bloques de cálculo, que serán independientes entre sí en funcionamiento y variables, y fijados por el usuario
maMBlock=0 - no se utilizan bloques (se utiliza el stop loss estándar)
maMBlock=1 - utiliza sólo el bloque nº 1.
maMBlock=2 - utiliza sólo el bloque #2 (se utiliza el stop loss estándar)
maMBlock=3 - utilizar ambos bloques

Bloque 1
Cálculo del stop loss. El stop loss se recalcula y la orden se actualiza en cada barra por el valor de maMirror.
1 La variable StartPoint se utiliza para determinar el punto de partida del cálculo, si StartPoint=1 (el cálculo se realiza después de tocar maT), si StartPoint=2 (el cálculo se realiza después de abrir la orden).
1.1 Si StartPointO=1 el cálculo se completa después de tocar maT;
1.2.Si StartPointO=2, la liquidación finaliza tras el cierre de la orden;
1.3 Si el stop loss no puede ser fijado por maMirror, la orden se cierra.
1.4. Levl_Zerro=0 (no se utiliza), Levl_Zerro!=0 (el stop loss se actualiza al valor máximo especificado contando desde el precio de apertura, un valor negativo significa que el stop loss se convierte en un valor positivo)

Bloque 2
Cálculo del filtrado de las órdenes pendientes
0.1 Para comprar una orden, la orden se coloca si maMirror>precio de apertura de la orden pendiente
0.2 Para vender, las órdenes se colocan si maMirror<precio de apertura de la orden pendiente
1 La variable StartPoint se utiliza para determinar el punto de inicio del cálculo si StartPoint=1 (el cálculo se realiza después de tocar maT), si StartPoint=2 (el cálculo se realiza después de abrir la orden).
1.1 Si StartPointB=1, el cálculo se completa después de tocar maT;
1.2 Si StartPointB=2 (la liquidación termina después del cierre de la orden);
2. Si maMirrorDell=0 (no se utiliza) maMirrorDell=1 (se eliminan todas las órdenes abiertas si las condiciones del punto 0 no coinciden)

Variables del usuario
maMirrorO (configuración de iMA)
maMirrorB (configuración iMA)
StartPointO
Punto de inicioB
pipsXHmaMo
pipsXLmaMo
pipsXHmaMb
pipsXLmaMb
maMBlock

maMirrorDell

Ayudar a estimar la asignación, el cliente quiere un nuevo trabajo, no estoy seguro de cuánto estimar) Como no soy un programador, soy un ingeniero de la academia aeroespacial)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
El primer problema, y quizás el más importante, es que el código es ilegible y no está estructurado. Es posible que tenga unos TdR bastante claros. Si se entienden los TdR y se escribe el código en la dirección correcta, (por regla general) se obtiene una ganancia significativa en la velocidad de ejecución, pero también cuesta otro dinero.
 
-Aleks-:

¿Afecta al rendimiento de alguna manera?

En este ejemplo concreto, no tiene ningún efecto. No se desea tratar este tipo de formato en toda la secuencia de comandos de EA, ni reformatearla por completo
 
zfs:
Argumentos muy fuertes, su código, ¿dónde puedo ver a un programador experimentado?
Mi código no es de dominio público. Los desarrollos comerciales funcionan en servidores web muy cargados. En concreto, mi código calcula los atascos en las carreteras de "varias" ciudades como parte del proyecto DorogaTV
 
TheXpert:
La duplicación no tiene nada que ver, ni tampoco los "si". La verdadera ralentización se da al trabajar con pedidos.

¿Trabajar con órdenes en el código TK, o tal vez el propio TK, o MT4 trabajando con órdenes en general?