[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 147

 

Los profesionales no pasan de largo, necesitan su ayuda. El bot está abriendo una posición de venta, entonces esta posición debe ser cerrada a continuación, ver el código y donde la posición de venta debe ser cerrada, la posición de compra debe ser abierta, el número de posiciones abiertas debe ser 1 (OrdersTotal()). La pregunta es, ¿cómo hacer algo parecido a una cola de ejecución de órdenes: primero debe cerrarse una posición de venta y luego abrirse una posición de compra y el número de posiciones abiertas debe ser igual a 1?

OrderSend(Symbol(),OP_BUY,Lots,Ask,4,0,0,"",0,0,Green);
    for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_SELL)   // long position is opened
           {
                 OrderClose(OrderTicket(),OrderLots(),Ask,4,Violet); // close position
                }
    }
 
bool banderas
 
eddy:
Me refiero a que sólo se establece en un buffer y no en una variable externa

así que usa este indicador_colorN

 
eddy:
Me refiero a que se establece sólo en un buffer, no en una variable externa
No se puede hacer con MQL. Pero si lo necesitas, por supuesto, puedes hacerlo))))
 
alsu:
No se puede hacer en MQL. Pero si es MUY, MUY necesario, entonces por supuesto que se puede hacer))))

ni siquiera sabes lo que necesitas...

Estoy seguro de que las necesidades de Eddy pueden ser resueltas por MQL

 
sergeev:

ni siquiera sabes lo que necesitas...

Estoy seguro de que las necesidades de Eddy se resuelven con MQLs

No, lo tengo... necesita obtener el color de renderización del buffer del indicador en el código del indicador (¿cierto, eddy?). Que yo sepa, es imposible en MQL.
 
alsu:
No, lo tengo... necesita obtener el color de dibujo del buffer del indicador de forma programática en el código del indicador (¿cierto, eddy?). Que yo sepa, esto no es posible en MQL.
es posible.
simplemente utilice el parámetro indicador_colorN. Se puede decir que es la misma variable.
 
sergeev:
tal vez.
sólo utilizar el parámetro indicator_colorN. Se puede decir que es la misma variable.

noooooo.

Supongamos que tenemos un indicador que dibuja una línea. Supongamos que queremos dibujar un círculo con este indicador. Pero queremos que sea verde si la línea indicadora es verde, y roja si es roja.

 

Señores programadores, por favor, aconsejen cómo cerrar todas las órdenes correctamente. A continuación se muestra el problema a resolver y lo que se ha aconsejado hacer. En definitiva, todo funciona, excepto el cierre de órdenes y el establecimiento de banderas para prohibir las operaciones.

Estoy seguro de que hay programadores experimentados entre ustedes. Por favor, ayúdeme a escribir las siguientes condiciones en mi Asesor Experto:
1) С+=Beneficio en la orden(1)+Beneficio en la orden(2)+...+Beneficio en la orden(n) - beneficio total en todas las órdenes abiertas en el tiempo actual.
2) C-=(c+)pérdida en la orden(1)+pérdida en la orden(2)+...+pérdida en la orden(n) - suma de las pérdidas en todas las órdenes abiertas en el momento actual.
3) X=(c+)/(c-) - el ratio actual de beneficios/pérdidas
4) Si el capital (S) multiplicado por el ratio de beneficios/pérdidas (X) es mayor que el valor establecido (K), se puede operar. (Si S*X>K, OK)
5) Si la Equidad (S) multiplicada por la relación de Ganancias/Pérdidas (X) es menor que el Objetivo definido (K), entonces todas las órdenes abiertas en las cotizaciones actuales serán cerradas y el Asesor Experto será deshabilitado hasta que sea habilitado manualmente de nuevo. (S*X<K, cerrar todas las órdenes y apagar)

Me parece que esto sería una buena protección contra la pérdida de dinero.

Se ve así. Creemos dos funciones que cuenten ganancias y pérdidas:
double CalculateProfitTotal()
{
double Result = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() > 0)
Result = Result + OrderProfit();
return(Result);
}

double CalculateLossTotal()
{
double Result = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() < 0)
Result = Result + MathAbs(OrderProfit());
return(Result);
}

En la función start(), escriba sus condiciones.
Por ejemplo:
X = CalculateProfitTotal() / CalculateLossTotal();
if(AccountEquity() * X < K)
{
//Donde cerramos todas las órdenes y
//establecemos la bandera que prohíbe las operaciones
return(0);
}

 
alsu:

Supongamos que queremos dibujar un círculo como indicador. Pero queremos que sea verde si la línea indicadora es verde

por lo que quiero crear un objeto en azul)

sergeev, ¿entoncesindicator_color1 es una variable de color?

Razón de la queja: