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

 
Vinin:

Pero también hay que editar la cabecera del indicador. Todos los búferes deben ser capaces de almacenar el valor

Y estaría bien calcular la historia, pero por supuesto es cuestión de gustos. Y para trabajar con objetos de forma más correcta. En cada tic se crean objetos con los mismos nombres (o crea un error).

He arreglado la cabecera.

con un buffer:

     UP_1Buffer[0] = uitog1v;
     UP_2Buffer[0] = uitog2v;
     UP_3Buffer[0] = uitog3v;
     DOWN_1Buffer[0] = ditog1v;
     DOWN_2Buffer[0] = ditog2v;
     DOWN_3Buffer[0] = ditog3v;

Lo tengo.

Muchas gracias por la ayuda.


En cuanto a tus sugerencias, me gustaría hacerlas, pero no puedo hacerlas yo mismo, por desgracia.

 
artmedia70:

Intenta poner en palabras lo que has escrito aquí:

Personalmente, a la primera de cambio encontré su acertijo: Si uno no es igual a uno, entonces cierre el pedido...

No miré el resto después de eso...

SZY y no intentes, ni siquiera pienses, que es posible escribir un buen EA en un ciclo...

Esta es la idea:

Punto de entrada al mercado: en cualquier momento, si no hay posiciones pendientes y mucho menos abiertas.

El robot abre 2 posiciones pendientes, con igual distancia en pips del precio actual (es una variable personalizada PriceDistance).

Las órdenes pendientes, ambas con el mismo TP, SL, TS (como en la imagen de espejo del precio actual.

Y ambos para el mismo tiempo (en perspectiva la variable "TimeStop").

Todos....

En la práctica: se cierran las posiciones anteriores (tanto con el tiempo de expiración, como en el SL o TP - no importa), se libera el terminal, inmediatamente después se abren las mismas posiciones con los mismos parámetros, pero, a partir del precio actual, en un nuevo rango. Más adelante, según el ciclo.

La idea es primitiva, 100% pluator, pero planeo avanzar en esta dirección y conectarla a otras señales, por ejemplo Volúmenes a determinados valores en determinados timeframes....

Por eso necesito el software en un apuro....

Así que me propuse la tarea de escribirlo...

 
¡Buenas noches! Escribió la construcción más simple aquí, para calcular el beneficio disponible, en cada tick. ¡Pues no funciona! Lo miré durante 10 minutos, me comí el código con los ojos. No veo ningún error. Aquí está el código.
//----
        double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 
 
//----
El número mágico es correcto. Lo he comprobado cuatro veces. Los soportes, todo lo que se me ocurrió mirar, todo parece estar bien. ¿Quizás estoy escribiendo/comparando mal el orden? He mirado la referencia. ¡Ayúdenme, por favor! No puedo hacerlo sin ti. ¿Puede decirme qué puede estar mal?
 
Y ya sabes, ¡¡¡por separado las tres condiciones funcionan!!!
 double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderType( ) ==OP_SELL ){Alert ("i ", i ," OP_SELL ", Profit);}

if( OrderSymbol()==Symbol()){Alert ("i ", i ," Symbol() ", Profit ,Symbol(), OrderSymbol());}

if( OrderMagicNumber( )==2000  ) {Alert ("i ", i ," OrderMagicNumber( ) ", Profit , OrderMagicNumber( ));}



if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
¡¡¡Estoy sorprendido y confundido!!!
 
dkfl.zrjdktdbx:
¡Buenas noches! He escrito una construcción sencilla para calcular el beneficio disponible en cada tick. ¡Pues no funciona! Lo miré con mis ojos durante 10 minutos. No veo el error. El código de Magik es correcto. Lo he comprobado cuatro veces. Los soportes, todo lo que se me ocurre, todo parece estar bien. ¿Quizás estoy escribiendo/comparando en un orden equivocado? He mirado la referencia. ¡Ayúdenme, por favor! No puedo hacerlo sin ti. ¿Puede decirme qué puede estar mal?


Faltan algunos paréntesis.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( ( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ) ||
      
( OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY ) ){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 

Este parece ser el caso. Aunque es mejor mantenerlo simple.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ 
   OrderSelect(i-1,SELECT_BY_POS );
   if(OrderSymbol()==Symbol()) {
      if( OrderMagicNumber( )==2000 && OrderType( ) ==OP_SELL )  Profit+=OrderProfit( );
      if( OrderMagicNumber( )==1000 && OrderType( ) ==OP_BUY  )  Profit+=OrderProfit( );
   }
   Alert ("i ", i ," Profit ", Profit);
}
 

Tengo esta pregunta - en MT4: (2/3*9 == 2*9/3) ?

         Comment(
            "\n",
            "\n", "2/3*9        = ", 2/3*9,
            "\n", "2*9/3        = ", 2*9/3,
            "\n",
         "\n" );


Gracias.

 
chief2000:

Tengo esta pregunta - en MT4: (2/3*9 == 2*9/3) ?


Gracias.


¿Qué sentido tiene?

Compruébalo con una calculadora: lo descubrirás.

Consulte la documentación: cómo se calculan las expresiones.

Al menos deberías leer un libro de texto...

"Es fácil ver que el orden de cálculo de las expresiones en un programa es similar al orden de cálculos similares en matemáticas, pero difiere en el cálculo de los tipos de valores de las expresiones intermedias, lo que afecta significativamente al resultado final de los cálculos. En particular (a diferencia de las reglas aceptadas en matemáticas), el orden de los operandos en una expresión no es de poca importancia. Para demostrarlo, pongamos un pequeño ejemplo. Problema 6: Calcular los valores de las expresiones A/B*C y A*C/B para los enteros A, B y C.


Intuitivamente, se espera que el resultado de los cálculos en ambos casos sea el mismo. Sin embargo, esto sólo es cierto para los números reales. Cuando se calculan los valores de expresiones compuestas por operandos enteros, el resultado intermedio es muy importante. En este caso, la secuencia de operandos tiene una importancia fundamental:

int A = 3; // Значение целого типа
int B = 5; // Значение целого типа
int C = 6; // Значение целого типа
int Res_1 = A/B*C; // Результат 0 (ноль)
int Res_2 = A*C/B; // Результат 3 (три)

Vamos a trazar el proceso de cálculo de la expresión A/B*C:

1. Primero (de izquierda a derecha) se calculará el valor de la expresión A/B. Según las reglas anteriores el valor de la expresión (3/5) será el valor entero 0 (cero).

2. Calcula la expresión 0*C (cero multiplicado por C). El resultado es el valor entero 0 (cero).

3. El resultado global (valor de la variable Res_1) es un valor entero de 0 (cero).

Veamos ahora cómo se desarrollan los acontecimientos al calcular la expresión A*C/B.

1. Cálculo de A*C. El valor de esta expresión es el entero 18 (3*6=18).

2. Cálculo de la expresión 18/B. La respuesta es obvia: (18/5) tras descartar la parte fraccionaria, el resultado será un entero 3 (tres).

El resultado total (valor de Res_2) es el entero 3 (tres).

Este ejemplo muestra un pequeño fragmento de programa que calcula los valores de variables de tipo entero. Si sustituimos estas variables por constantes, pero utilizamos los mismos valores, el resultado final será el mismo. Cuando se calculan expresiones en las que se utilizan números enteros, hay que tener mucho cuidado con el contenido de las líneas del programa. De lo contrario, puede producirse un error en el programa, que es muy difícil de detectar posteriormente (especialmente en programas grandes). Este problema no se da en el caso de los cálculos, en los que sólo intervienen números reales. Sin embargo, si se utilizan operandos de diferentes tipos en una expresión compleja, el resultado final puede depender por completo de un fragmento generado aleatoriamente que contenga la división de enteros.

El concepto y las propiedades generales de los operadores se tratan en la sección Operadores, y el capítulo Operadores revela las propiedades propias de cada operador."

 
¿Es lo mismo que guardar un archivo?
 
Roman.:


¿Cuál es el problema?

Compruébalo con una calculadora: lo descubrirás.

Lo he comprobado: tanto la calculadora Casio como la de Microsoft dicen que 2/3*9=6.


 
chief2000:

Comprobado: tanto la calculadora Casio como la de Microsoft dicen que 2/3*9=6.



Bueno. ¿Cuál es el problema?