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

 

Y por supuesto, cuando abrimos la siguiente compra, inmediatamente hacemos un roll over(el StopLoss es igual a nuestro precio medio + 50 pips) en todas las posiciones .

Este es el canalla que a veces no toma la última posición. Teníamos 3 puestos, pero 4 de ellos se abrieron. Me olvidé de poner StopLoss en la cuarta posición.

La DedZone debería celebrarse:

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

El cálculo de la DedZone está en la inicialización del Asesor Experto.

 
Limita:

Y por supuesto, cuando abrimos la siguiente compra, inmediatamente hacemos un roll over(el StopLoss es igual a nuestro precio medio + 50 pips) en todas las posiciones .

Este es el canalla que a veces no toma la última posición. Teníamos 3 puestos, pero 4 de ellos se abrieron. Me olvidé de poner StopLoss en la cuarta posición.

La DedZone debería celebrarse:

DedZone está en la inicialización del Asesor Experto.

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Y cuando ambos son iguales a cero, ¿qué? En este caso, Alpari utiliza el spread*2.

Y no has respondido a mi pregunta sobre la lógica de esas líneas.

 
ALXIMIKS:

es mejor hacerlo así (alguien escribió que tuvo problemas con tu forma de hacerlo al modificar o borrar pedidos) :

¿Y por qué el aceite y la mantequilla? (dejar algo en paz).


Gracias.

Parece estar de acuerdo con el experto :))

 
artmedia70:

Y no has respondido a mi pregunta sobre la lógica de esas líneas.


artmedia70:

Toda la lógica del comportamiento de un EA puede dividirse en bloques lógicos que, dependiendo de las condiciones, se ejecutan o no.

Para sus propios fines, puede ver que este bloque puede ser una serie de cadenas encerradas entre llaves:

Si (condición) {si la condición es verdadera, se ejecuta el bloque encerrado entre esas llaves}

En caso contrario {si la condición anterior no es verdadera, se ejecuta el bloque encerrado entre esas llaves}

Si no hay llaves después de la condición, el bloque que se ejecuta cuando la condición es verdadera es una sola línea inmediatamente después de la condición:

Si (condición) Esta línea se ejecuta

En caso contrario , se ejecuta esta línea.

En mis ejemplos If es if y Otherwise es else.

Tomado aquí

 
artmedia70:

Y cuando ambos son cero, ¿entonces qué? Alpari utiliza el spread*2 en ese caso.

Y no has respondido a mi pregunta sobre la lógica de esos hilos.



Gracias por la información sobre Alpari.

En cuanto a la Lógica de la Línea, ALXIMIKS la ha contestado.

Debo añadir para mí que la modificación debe hacerse sólo si todas las condiciones son verdaderas. Si al menos uno de ellos falla, seguimos.

 
Limita:


Gracias por la información sobre Alpari.

En cuanto a la lógica de las cuerdas, ALXIMIKS respondió.

Debería añadir que en ese caso la modificación debería tener lugar sólo si todas las condiciones son verdaderas. Si al menos uno de ellos falla, seguimos adelante.

Por alguna razón me mostró mis propias palabras escritas una vez a alguien.

Quería obtener una respuesta a mi pregunta sobre la lógica. Todos los if () de ese bloque de código van uno detrás de otro. Significa que si la primera condición es verdadera, la segunda también lo será, si la segunda es verdadera, la tercera lo será y así sucesivamente, pero... Si la primera condición no es verdadera, la segunda no se ejecutará, pero la tercera se volverá a comprobar.

Tal vez, después de todo, así es como debe ser:

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

Esto es sólo una suposición mía, ya que no tengo ni idea de la lógica que tienes en mente y no sé lo que hacen y contienen/devuelven algunas de las variables y funciones.

 
artmedia70:

1) Me mostró por alguna razón mis propias palabras una vez escritas a alguien.

2) Eso es lo que quería que dijeras sobre la lógica. Tienes todos los if () en ese bloque de código que van uno detrás de otro. Lo que significa que si la primera condición es verdadera, la segunda condición también será verdadera, si la segunda condición es verdadera, la tercera condición también será verdadera, etc., pero... Si la primera condición no es verdadera, la segunda no se ejecutará, pero la tercera se volverá a comprobar.

1) bueno eso era para todos, no solo para ti.

2) usted ya hizo una vez esta afirmación, hace unos días, sólo que por mi parte me olvidé de volver a comprobar esta información entonces.

Ahora he hecho un simple script:

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Y resultó que se equivocó: ¡¡¡NO HAY ALERTA!!!

 
ALXIMIKS:

1) bueno eso era para todos, no solo para ti.

2) Ya hizo esa afirmación una vez, hace unos días, pero olvidé volver a comprobar la información en ese momento.

Ahora he hecho un simple script:

Y resultó que se equivocó: ¡¡¡NO HAY ALERTA!!!

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Bueno, estoy de acuerdo. En este caso, me precipité un poco cuando escribí antes sobre qué y cómo se aplicarían las condiciones anidadas sin llaves. Tiene razón en esta situación. ¿Sabes por qué?

Intenta que se ejecute else en tu código.

 
artmedia70:

Bueno, estoy de acuerdo. En este caso, me precipité un poco cuando escribí antes sobre qué y cómo se aplicarían las condiciones anidadas sin llaves. Tiene razón en esta situación. ¿Sabes por qué?

Intenta que se ejecute else en tu código.


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

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

Agradecimientos :

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

tener unaAlerta: "a=0".

Resultado: la gestión de los fallos de la 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.

 
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 las llaves "{" no se utilizan durante la enumeración de una serie de condiciones.


Es decir, los paréntesis son necesarios para organizar las ramas lógicas. Sin ellos, la primera condición es primordial. Si no es verdadera, no se ejecutarán las demás condiciones.

Intenta resolverlo:

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

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

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) выполнено");
Razón de la queja: