[¡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 564

 
rigonich:

El error 1 se genera sólo si todos los parámetros pasados a la funciónOrderModify( ) son iguales a todos los parámetros del pedido modificable que ha seleccionado( por número de ticket) o la funciónOrderSelect() para su modificación.

1 (ERR_NO_RESULT) - si no se ha modificado ninguno de los parámetros o no hay ningún error, pero se desconoce el resultado, lo más probable es que la orden no se modifique por alguna razón...
 
abeiks:

Sí, estoy de acuerdo, la programación no es lo mío, por eso estoy aprendiendo y preguntando aquí. Intenté añadir el cierre de posiciones a su algoritmo pero no funcionó (todas las posiciones de compra se cerraban), así que decidí enfocar el problema desde el otro lado y ver la solución de cerrar las dos últimas posiciones de compra en un bloque de cierre ya preparado que se me proporcionó y ofreció.

Te agradecería mucho que me indicaras cómo cerrar las dos últimas posiciones de compra. Comprenderé dónde he cometido un error.

 int Slippage = 3;
int Close_buy_2pos()
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        if (OrderType() != OP_BUY) continue;
        if (OrderClose (OrderTicket(), OrderLots(), Bid, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == 2) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}

En un caso general es así. Si utilizamos la variante "imbécil" (es la que yo utilizo), entonces tenemos que iniciar un bucle: primero, encontrar la última posición de compra abierta, luego borrarla del ticket, y repetir el bucle tantas veces como sea necesario.

P.D. Escribir las funciones de COMPRA y VENTA por separado - es una idea equivocada desde el principio (IMHO).

Y la función en ese caso no parecerá mucho más complicada:

int Slippage = 3;
int Close_LastPos (string fs_Symbol,
                   int fi_Magic,
                   int fi_Type = -1,   // тип закрываемых позиций
                   int fi_cnt = 1)     // количсетво закрываемых позиций
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    double ld_PriceClose;
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != fs_Symbol) continue;
        if (OrderMagicNumber() != fi_Magic) continue;
        if (OrderType() != fi_Type) if (fi_Type != -1) continue;
        if (OrderType() > 1) continue;
        if (OrderType() == OP_BUY) ld_PriceClose = NormalizeDouble (Bid, Digits);
        else ld_PriceClose = NormalizeDouble (Ask, Digits);
        if (OrderClose (OrderTicket(), OrderLots(), ld_PriceClose, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == fi_cnt) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}
 
Ekburg:

1 (ERR_NO_RESULT) - si no se ha modificado ninguno de los parámetros o no hay error pero se desconoce el resultado, lo más probable es que sólo no se modifique la orden por alguna razón...
ERR_NO_RESULT no es un o, sino que no hay error pero el resultado es desconocido . Los casos en los que se produce este error se describen más arriba. Si se llama a la función GetLastError() después de la funciónOrderModify(), ésta devolverá definitivamente el código de error(es decir, la razón por la que el pedido no ha sido modificado) o 0 (en caso de modificación exitosa).

 
TarasBY:

En el caso general así. Si utilizamos la variante "imbécil" (es la que yo utilizo), entonces tenemos que iniciar un bucle: primero, encontrar la última posición BUY abierta, luego borrarla del ticket y repetir el bucle tantas veces como sea necesario.

P.D. Escribir las funciones de COMPRA y VENTA por separado - es una idea equivocada desde el principio (IMHO).

Y la función en este caso no parecería mucho más complicada:


Gracias, lo investigaré.

 

Buenas noches a todos, ¿podrían decirme por qué MetaTrader4 (el más reciente) no se actualiza en absoluto? Lo instalé ayer, pero la última fecha de actualización muestra el 30 de noviembre, y no hay dinámica en ningún par de divisas, y cuando compro cualquier divisa el mercado está cerrado. (Tengo una cuenta Demo). ¿Pueden decirme cómo activar la actualización o qué tengo que hacer para estar al tanto de los cambios de precios?

 
Lucifer982:

Buenas noches a todos, ¿podríais decir a los verdes e inexpertos por qué MetaTrader4 (el más reciente) no se actualiza en absoluto? Lo instalé ayer, pero la última fecha de actualización muestra el 30 de noviembre, y no hay dinámica en ningún par de divisas, y cuando compro cualquier divisa el mercado está cerrado. (Tengo una cuenta Demo). ¿Pueden decirme cómo activar la actualización o qué tengo que hacer para estar al tanto de los cambios de precios?


El sistema empezará a actualizarse en unas horas (dependiendo de tu zona horaria). El DoC tiene un día libre el sábado, el domingo. Así que no tienen nada de qué preocuparse)))).

O la segunda opción: escribir una queja al Servicio de Atención al Cliente del Ministerio de Hacienda.

 
T1000:


Se encenderá solo en unas horas (dependiendo de tu zona horaria). El servicio de atención al cliente tiene un día libre el sábado, el domingo. por lo que no tienen ningún jerks))))

O la segunda opción: escribir una queja al Servicio de Atención del Ministerio de Hacienda.


Ya veo, gracias, esperaré)
 

¿cómo obtener el número total de órdenes abiertas de un determinado par?

Tengo un gráfico abierto, el EA está trabajando en 10 símbolos.

He decidido dejar que los comentarios del gráfico muestren el número total de órdenes abiertas para cada símbolo.

¿Cómo lo hago? Si OrdersTotal muestra la cantidad total de

 
gheka:

¿En qué sentido?

Por ejemplo, así.

 
¿Cuántas veces me has ayudado? Gracias).
DmitriyN:

Por ejemplo, así.

Razón de la queja: