Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 236

 
int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
 else Alert ("a=", a+1);
 else Alert ("a=", a+2);
}

Si la primera condición no se cumple, tenemos una alerta: "a=2"

Si la segunda condición no se cumple, tenemos una alerta: "a=1"

Cuando la tercera condición no se cumple, tenemos una alerta: "a=0".

Sí, al principio fue inesperado del todo))

 
ALXIMIKS:

No hay alerta de este script. Else se refiere a la condición " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAA"); a=5;} "

Agradecimientos :

tener unaAlerta: "a=0".

El resultado es que el manejo de la no condición sólo es posible para la última condición cuando no se utilizan las llaves "{" durante la enumeración de una serie de condiciones.

Así es, la lógica funciona, sólo que no pongas todo en una fila:

int start(){
 int a=0;
 if (3>3)
    if (5>3)
       if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
       else Alert ("a=", a);
}
entonces será más claro. Los paréntesis son necesarios si if es verdadero: {operador1;operador2;operadorN}. Si sólo hay un operador, se pueden omitir las llaves, y como el operador es también una condición, todo se repite.
 
artmedia70:

Es decir, los corchetes son necesarios para organizar las ramas lógicas. Sin ellos, la primera condición es básica. Si no es cierto, no se cumplirán las demás condiciones.

Intenta resolverlo:

Y después de eso, averiguar a qué más se refiere:


else se refiere a " si (b>c)"
 

Hola.

if (DayOfWeek()==DayOfWeekIf
  && TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf)
  && TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf)+Duration)
   {
    if  (iClose("XAUUSD",PERIOD_H1,0)-iOpen("XAUUSD",PERIOD_H1,0)>=0)
    Sell = true;
    if  (iOpen("XAUUSD",PERIOD_H1,0)-iClose("XAUUSD",PERIOD_H1,0)>0)
    Sell =false;
   }
  if (DayOfWeek()==DayOfWeekOpen
  && TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeOpen)
  && TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeOpen)+Duration)
  {...

La idea es la siguiente: si una vela es alcista en tal día a tal hora, entonces vender = verdadero, si es bajista, entonces falso. Entonces, en tal día y a tal hora vendemos, si vender=verdadero y compramos, si viceversa.

Pero la condición no funciona por alguna razón, todas las operaciones se abren para vender. Lo estoy probando en M1.

 
ALXIMIKS:

else se refiere a " si (b>c) ".

Correcto.

if (a>b)
   if (b>c) 
      Alert(" условие if (a>b && b>c) выполнено ");
   else if (d>e) 
      if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

Ahora trata de hacer la lógica sin corchetes:

Si (a>b), se ejecutan las líneas if (b>c) Alert();

En caso contrario, si (d>e), se ejecutan las líneas si (e>f) Alert();

En otras palabras: hacer que otra cosa se refiera a la primera condición. Sin usar llaves.

 
Antonius:

Hola.

La idea es la siguiente: si una vela es alcista en tal día a tal hora, entonces vender = verdadero, si es bajista, entonces falso. Entonces, en tal día y a tal hora vendemos, si vender=verdadero y compramos, si viceversa.

Pero la condición no funciona por alguna razón, todas las operaciones se abren para vender. Lo he probado en M1.

Estoy seguro de que es esta parte del código. A partir de lo que has mostrado es difícil sacar conclusiones: hay muchas variables desconocidas y la propia apertura no es visible.

Para encontrar la razón usted mismo, imprima o muestre los valores de las variables con comentarios. Así podrás ver sus valores en cualquier momento.

 
Antonius:

Hola.

La idea es la siguiente: si una vela es alcista en tal día a tal hora, entonces vender = verdadero, si es bajista, entonces falso. Entonces, en tal día y a tal hora vendemos, si vender=verdadero y compramos, si viceversa.

Pero la condición no funciona por alguna razón, todas las operaciones se abren para vender. Lo estoy probando en M1.

¿Es posible comparar así? No me gusta la parte derecha ("la conversión de tipo allí pondrá todo en una cadena con el valor "aaaa.mm.dd "TimeTradeIf")??
 TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf
 
ALXIMIKS:
No me gusta la parte derecha (el valor "aaaa.mm.dd "TimeTradeIf" se convertirá en una cadena)?

Puede ver que el valor TimeTradeIf se añade al valor calculado. ¿Quién le dijo y le mostró exactamente lo que contiene TimeTradeIf ?

Eso es lo que le escribí a la persona que hay un montón de valores desconocidos y poco claros para buscar el problema en su código.

 
artmedia70:

Correcto.

Ahora trata de hacer la lógica sin corchetes:

Si (a>b), se ejecutan las líneas if (b>c) Alert();

En caso contrario, si (d>e), se ejecutan las líneas si (e>f) Alert();

En otras palabras: hacer que otra cosa se refiera a la primera condición. Sin corchetes.


if (a>b)
   if (b>c) Alert(" условие if (a>b && b>c) выполнено ");
   else; 
else 
   if (d>e) 
      if (e>f)Alert(" условие if (d>e && e>f) выполнено");

Taki lo hizo, no es muy conveniente para la lectura de la lógica, si sin llaves, y compilador todavía un poco frota ";' - punto y coma inesperado "

pero sigue alertando de que "la condición si (d>e && e>f) se cumple" cuando a>bno se cumple .(si es que así he entendido la tarea).


 
Antonius:

Hola.

La idea es la siguiente: si una vela es alcista en tal día a tal hora, entonces vender = verdadero, si es bajista, entonces falso. Entonces, en tal día y a tal hora vendemos, si vender=verdadero y compramos, si viceversa.

Pero la condición no funciona por alguna razón, todas las operaciones se abren para vender. Lo estoy probando en M1.


En mi opinión, el cálculo comienza al principio de la barra cero, cuando la apertura sigue siendo igual al cierre y, por supuesto, la diferencia es 0. Tengo que comprobar la barra anterior.