[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 489

 

¡Buenas tardes! Ya sabes, simplemente corta el código de la sección init del EA, (lo estuve depurando durante el fin de semana - ¡no hay ticks!), lo moví al inicio. Se ha eliminado el bucle fora exterior. Lo he compilado.

Está codificado - 'continue' - 'break' o 'continue' usado dentro de algún ciclo solamente C:\Alpari\experts\Outputs.mq4 (69, 20)

¿De qué se trata? Bueno, en bucle continuo, en bucle, ¿y qué? No hablo mucho inglés. Si puedo entender algunas palabras, ¡no puedo darles sentido!

 if (strela1 < strela2)
    {Sleep(600);
        if (SELL > 0) udalenie (OP_SELL);Sleep(600);
        if (BUY == 0)
        {Sleep(600);RefreshRates();
           OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 5 , NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ;            
           int Error=GetLastError(); 
           Sleep(600);
    if (Error==129)continue;    }
    
    
    }
    else if (strela1 > strela2)
    {Sleep(600);
        if (BUY > 0) udalenie (OP_BUY);Sleep(600);
        if (SELL == 0)
        {Sleep(600); RefreshRates();
             OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 
            
           Error=GetLastError(); 
        if (Error==129)continue;  }
 
Dimka-novitsek:

¡Buenas tardes! Ya sabes, simplemente corta el código de la sección init del EA, (lo estuve depurando durante el fin de semana - ¡no hay ticks!), lo moví al inicio. Se ha eliminado el bucle fora exterior. Compilado.

Se ha encontrado con... 'continue' - 'break' o 'continue' usado dentro de algún ciclo solamente C:\Alpari\experts\Outputs.mq4 (69, 20)

¿De qué se trata? Bueno, en el bucle, en el bucle, ¿y qué? No se me da muy bien el inglés. Si entiendo algunas palabras, ¡no puedo entenderlas todas!

No tienes un bucle, pero tienes el operador continue (sólo se utiliza en los bucles).
 
Lians:

Por favor, ayude a que esta función sea viceversa:

Es decir, si el precio va a pérdida desde una orden abierta por el número de pips LevelProfit (puedes llamarlo LevelLoss), tienes que mover TakeProfit a cero o a pérdida por 1 pip 2, etc., dependiendo de lo que pongas en el parámetro LevelWLoss, de manera que si el precio incluso se da la vuelta, no habría más beneficio. ¿O tal vez tenga uno listo?

Gracias de antemano))

La función puede ser la siguiente:

void fMoving_TPInBU (int fi_LevelLOSS,       // уровень Лосса в пп. (для цены) - ТОЛЬКО > 0
                     int fi_LevelBU,         // уровень БУ в пп. (для тэйкпрофита) - может быть и >= 0 и < 0
                     string fs_Symbol = "",  // Symbol
                     int fi_Type = -1,       // Type
                     int gi_MG = -1)         // MagicNumber
{
    double ld_Point, ld_Price;
    int    li_Type, li_cnt, li_total = OrdersTotal();
//----
    if (li_total == 0) return;
    if (fs_Symbol == "" || fs_Symbol == "0") fs_Symbol = Symbol();
    for (int li_pos = li_total - 1; li_pos >= 0; li_pos--)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderSymbol() != fs_Symbol) continue;
        if (gi_MG > -1) if (gi_MG != OrderMagicNumber()) continue;
        li_Type = OrderType();
        if (li_Type > 1) continue;
        if (li_Type > -1) if (li_Type != fi_Type) continue;
        RefreshRates();
        if (li_Type == 0) {li_cnt = 1; ld_Price = MarketInfo (fs_Symbol, MODE_BID);}
        else {li_cnt = -1; ld_Price = MarketInfo (fs_Symbol, MODE_ASK);}
        ld_Point = MarketInfo (OrderSymbol(), MODE_POINT);
        if (li_cnt * (OrderOpenPrice() - ld_Price) >= fi_LevelLOSS * ld_Point)
        {
            double ld_TP = NormalizeDouble (OrderOpenPrice() + li_cnt * fi_LevelBU * ld_Point, MarketInfo (fs_Symbol, MODE_DIGITS));
            //---- Проверка на "излишнюю" модификацию
            if (ld_TP - OrderTakeProfit() != 0.0)
            {OrderModify (OrderTicket(), ld_Price, OrderStopLoss(), ld_TP, 0);}
        }
    }
//----
}

No olvide comprobar las restricciones MODE_STOPLEVEL y MODE_FREEZELEVEL cuando modifique un STOP.

 

¡¡¡Gracias!!! Echemos un vistazo...

¿Cómo no? Y si (COMPRA == 0)- ¿no es esto un bucle? Extrañamente, sólo he eliminado el bucle exterior, que rodeaba todo el programa entre paréntesis. Era necesario para la depuración, así que lo quité.

Si no está, déjalo pasar si (strela1 < strela2), la lógica del programa no se romperá.

 
Dimka-novitsek:

¡¡¡Gracias!!! Echemos un vistazo...

¿Cómo no? Y si (COMPRA == 0)- ¿no es esto un bucle? Es extraño, sólo he eliminado el bucle exterior que estaba poniendo entre paréntesis todo el programa al principio.


No. No es un bucle. Has quitado exactamente lo que debería haber quedado. Lea todo el tutorial! Especialmente aquí: "Un ejemplo de uso de un operador compuesto en un operador condicional. El operador condicional if(expresión) va primero, seguido del operador compuesto. El operador compuesto contiene una lista de operadores ejecutables".

 
La lectura.
 
AYUDA!!! Por favor, ayuda!!! Como ejemplo, adjunto esta imagen. No soy un programador de este indicador a alguna manera soldada, pero luego se encontró con una falta de conocimientos y habilidades han tratado de una semana entera para mostrar las flechas en la pantalla no funcionó. Voy a explicar la esencia. en las áreas seleccionadas, subrayado en blanco, hay una clara divergencia (como yo lo entiendo) que es la diferencia entre el histograma y la línea de precios. en la figura, por ejemplo, he marcado estos lugares números 1-2-3-4.En estos lugares, los valores de la línea del indicador disminuye modulo, aunque el precio sigue actualizando el fondo y así llegamos al punto 5 en él vemos la base del precio actualizado Bajo y fondo al cierre, el histograma también es creciente, pero la línea muestra una disminución.
Archivos adjuntos:
tjllfe2.zip  45 kb
 

TarasBY, ¡gracias por las explicaciones y la función!

Llevo la función a mi colección, pero no entiendo algo:

El parámetro fi_LevelBU tiene un valor negativo - desplaza la toma de beneficios, mientras que si tiene un valor positivo muestra beneficios o viceversa?

Y segundo: ¿es mejor comprobar las restricciones dentro de la propia función o fuera de ella?

 
Lians:

TarasBY, ¡gracias por las explicaciones y la función!

Llevo la función a mi colección, pero no entiendo algo:

¿Si el parámetro fi_LevelBU es negativo, significa desplazamiento del TP hacia el beneficio, mientras que si es positivo, significa beneficio o viceversa?

Correcto (no al revés).

Lians:

Y la segunda: ¿es mejor comprobar las restricciones dentro de la propia función o fuera de ella?

Cada uno decide por sí mismo. He creado una biblioteca que se encarga de ejecutar las órdenes comerciales y comprueba todas las limitaciones.

P.D. Había un pequeño error en el código de la función (paréntesis extra) - lo he arreglado.

 

Chicos, aconsejadme cómo solucionar el problema

Si utiliza

while(!IsStopped())

entonces, por alguna razón, el asesor sigue funcionando incluso cuando se suelta el botón "asesores" Necesito que se desactive y cuando uso este ciclo cuando un EA está trabajando es imposible abrir las propiedades del EA, puede ser que alguien sepa como arreglar el EA ????? Conozco el sueño(......);

Razón de la queja: