Bien, entonces según entiendo, obtenemos tres funciones personalizadas diferentes con el retorno de la correcta (si buscamos tres parámetros diferentes)
ArraySort
entonces
ArrayBsearch por el número correcto
y luego, ¿cómo afrontarlo?
Exactamente la transición de una matriz a un elemento de la estructura
No lo entiendes.
Necesitas hacer una única función que rellene y ordene el array declarado globalmente. La matriz tendrá que ser pasada a la función por referencia.
Y necesitas funciones adicionales que saquen los datos que necesitas de este array.
Por favor, indique cómo debería ser la condición. Si se activa un stop loss, entonces el lote se multiplica por 2, y si la siguiente orden activa un take profit, el lote volvería al lote original, que estaba antes del stop loss.
Lo entiendo así, pero no sé cómo seguir...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
Está intentando eliminar una orden de mercado, no se eliminan, se cierran con la función OrderClose(). Para que el bucle se borre o se cierre correctamente, tenemos que distinguir la orden por su tipo.
if(OrderType()<=OP_SELL) - para órdenes de mercado, if(OrderType()>OP_SELL) - para órdenes pendientes.
Por favor, indique cómo debería ser la condición. Si se activa un stop loss, entonces el lote se multiplica por 2, y si la siguiente orden activa un take profit, el lote volvería al lote original, que estaba antes del stop loss.
Lo entiendo así, pero no sé cómo seguir...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
Si lo has hecho rápidamente, aparecerá la última orden de pérdida, qué hacer con ella y qué parámetros corregir, creo que lo entenderás.
Por favor, indique cómo debería ser la condición. Si se activa un stop loss, entonces el lote se multiplica por 2, y si la siguiente orden activa un take profit, el lote volvería al lote original, que estaba antes del stop loss.
Lo entiendo así, pero no sé cómo seguir...
for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) { if (OrderMagicNumber()==magic) { if (OrderStopLoss()==OrderClosePrice()) { lot=lot*4; } } }
}
La solución a este problema depende de la lógica completa del Asesor Experto, usted puede rastrear la activación de stoploss o takeprofit por su comentario.
Necesitas hacer una sola función que llene y ordene el arraydeclarado a nivel global. La matriz tendrá que ser pasada a la función por referencia.
Y necesitas funciones adicionales que saquen los datos que necesitas de este array.
Artem, estás equivocado. El array, declarado a nivel global, es visible en todas las partes del programa, y no tienes que pasarlo a algún lugar desde algún sitio. Simplemente se rellena en un lugar del programa, se ordena en otro y se lee en el tercero, no importa.
Si lo comparas con la balanza, así es:
Gracias.
Bien, entonces según entiendo, obtenemos tres funciones personalizadas diferentes con el retorno de la correcta (si buscamos tres parámetros diferentes)
ArraySort
entonces
ArrayBsearch por el número correcto
y luego, ¿cómo afrontarlo?
Exactamente la transición de una matriz a un elemento de la estructuraNo lo entiendes.
Necesitas hacer una única función que rellene y ordene el array declarado globalmente. La matriz tendrá que ser pasada a la función por referencia.
Y necesitas funciones adicionales que saquen los datos que necesitas de este array.
No lo entiendes.
Necesitas hacer una sola función que llene y ordene el array declarado globalmente. La matriz tendrá que ser pasada a la función por referencia.
Y necesitas funciones adicionales que tomen los datos que necesitas de este array.
ok, ¿puede demostrar cómo sacar algo de un array de estructuras? digamos que rellenado y ordenado
cómo transferir por referencia y escribir
Por favor, indique cómo debería ser la condición. Si se activa un stop loss, entonces el lote se multiplica por 2, y si la siguiente orden activa un take profit, el lote volvería al lote original, que estaba antes del stop loss.
Lo entiendo así, pero no sé cómo seguir...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
otra pregunta, ¿qué escribí mal en el bloque de borrar órdenes? no siempre borra las órdenes, en el registro dice
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Otra pregunta, ¿qué he escrito mal en el bloque para borrar los pedidos? No siempre borra los pedidos, en el registro dice
market order #1 cannot be deleted
{
for(int n=OrdersTotal()-1;n>=0;n--)
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
bool del=OrderDelete(OrderTicket());
if (del==true)
{
otl_b=0; otl_s=0; //обнуляем переменные отложек
}
}
}
}
}
Está intentando eliminar una orden de mercado, no se eliminan, se cierran con la función OrderClose(). Para que el bucle se borre o se cierre correctamente, tenemos que distinguir la orden por su tipo.
if(OrderType()<=OP_SELL) - para órdenes de mercado, if(OrderType()>OP_SELL) - para órdenes pendientes.
Hay una cosa llamadaCHARTEVENT_MOUSE_MOVE
Pregunta: ¿funciona esto en dispositivos móviles donde no hay ratón?
Por favor, indique cómo debería ser la condición. Si se activa un stop loss, entonces el lote se multiplica por 2, y si la siguiente orden activa un take profit, el lote volvería al lote original, que estaba antes del stop loss.
Lo entiendo así, pero no sé cómo seguir...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
Por favor, indique cómo debería ser la condición. Si se activa un stop loss, entonces el lote se multiplica por 2, y si la siguiente orden activa un take profit, el lote volvería al lote original, que estaba antes del stop loss.
Lo entiendo así, pero no sé cómo seguir...
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
{
if (OrderMagicNumber()==magic)
{
if (OrderStopLoss()==OrderClosePrice())
{
lot=lot*4;
}
}
}
}
La solución a este problema depende de la lógica completa del Asesor Experto, usted puede rastrear la activación de stoploss o takeprofit por su comentario.
if(StringFind(OrderComment(),"tp")>=0)// сработал тейкпрофит
...
No lo entiendes.
Necesitas hacer una sola función que llene y ordene el array declarado a nivel global. La matriz tendrá que ser pasada a la función por referencia.
Y necesitas funciones adicionales que saquen los datos que necesitas de este array.