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

 

Hola.
¿La función OrderSelect devuelve el error 0 (ERR_NO_ERROR - La transacción comercial se ha realizado correctamente)?
¿Cómo evitar este error?
Adjunto el código del programa y los asientos.
Respetuosamente. Shurkin.

//+------------------------------------------------------------------+
//|                                                    PoligonTd.mq4 |
//|                                           17 сентября 2013 года. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "17 сентября 2013 года."
#property link      ""

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----Функция OrderSelect--------------------------------------------+
string Str="#20552937 buy 1.00 GBPUSD at 1.55450";//Строка
int Tct=StrToDouble(StringSubstr(Str,1,9));//Номер ордера
   if(OrderSelect(Tct,SELECT_BY_TICKET)==true)//Выбор ордера по номеру
string OdSmb=OrderSymbol();//Символ ордера
   else Print("OrderSelect() вернул ошибку - ",GetLastError());
Print("Кс:"," Str=",Str,"; Tct ",Tct,"; OdSmb ",OdSmb,"?");//Кс
//----
   return(0);
  }
//+------------------------------------------------------------------+

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: removed
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Ks: Str=#20552937 buy 1.00 GBPUSD at 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() devuelve error - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: cargado con éxito

 
Shurkin:

Hola.
¿La función OrderSelect devuelve el error 0 (ERR_NO_ERROR - La transacción comercial se ha realizado correctamente)?
¿Cómo evitar este error?
Adjunto el código del programa y los asientos.
Saludos. Shurkin.

2013.09.17 13:07:04 PoligonTd GBPUSD,Diario: eliminado
2013.09.17 13:07:04 PoligonTd GBPUSD,Diario: uninit razón 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Kc: Str=#20552937 comprar 1.00 GBPUSD a 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() devolvió error - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: cargado con éxito

En realidad no hay ningún error de selección, el pedido con dicho billete no existe.
 
Sepulca:
En realidad, no hay ningún error de selección, el pedido con dicho billete no existe.

Bueno... Si no hay ningún pedido con este ticket, OrderSelect() devolverá false

Por lo tanto, parece que hay un error, ya que nos estamos moviendo a otra cosa. La pregunta es ¿por qué no hay ningún error?

 

No consigo averiguar cómo aplicar la lógica con el menor esfuerzo posible.

Si(...) establece una orden de parada;

If(the order's lifetime>time) retira la orden, y if(...) establece una nueva orden;

La dificultad estriba en que puede haber varios puestos que ya están abiertos, y ¿cómo los combatimos todos? ¿Cuál es la forma más fácil?

Gracias.

 

Estoy pensando en abandonar la función especial init(). Creo que esta es la solución correcta, ¿no?

La forma en que lo veo es la siguiente:

1. Declarar una variable globalmente, por ejemplo, así:

gInitTrue = false;

Entonces creamos nuestro propio INIT:

bool myInit()
{
  // Инициализируем..
  // неоходимые..
  // нам..
  // переменные..
  return(true);
}

Al principio del comienzo así:

if (gInitTrue == false)
    myInit();
Sería interesante conocer la opinión de personas más experimentadas sobre la idoneidad de este planteamiento, así como sobre la corrección de la solución que propongo para este problema.
 
Sepulca:

Más topes.

Oops, tengo el error. También necesitaba añadir 2 colores, para 2 tampones.
 
hoz:

Estoy pensando en abandonar la función especial init(). Creo que esta es la solución correcta, ¿no?

La forma en que lo veo es la siguiente:

1. Declarar una variable globalmente, por ejemplo, así:

A continuación, creamos nuestro propio INIT:

Al principio del comienzo así:

Sería interesante conocer la opinión de personas más experimentadas sobre la idoneidad de este planteamiento, así como sobre la corrección de la solución que propongo para este problema.

¿Cuál es la novedad de sentir una nueva solución? :-))

Una jodida cosa. Nunca he necesitado hacerlo así.

 
artmedia70:

Bueno... Si no hay ningún pedido con este ticket, OrderSelect() devolverá false

Por lo tanto, parece que hay un error, ya que nos estamos moviendo a otra cosa. La pregunta es ¿por qué hay cero?



Lo he comprobado: si el número de billete coincide, todo funciona bien,

Si no es así - la función devuelve False, pero OrderSelect() es silenciosa ya que no pasa nada, ZERO y no pasa nada.

 
Zhunko:

¿Cuál es la novedad de sentir una nueva solución? :-))

Una jodida cosa. Nunca he necesitado hacerlo así.



Y más aún... Se ha comentado que INIT puede fallar en caso de, por ejemplo, desconexiones u otras situaciones similares. Porque no reinicia los datos por sí mismo a posteriori, en caso de imprevistos, ¡y sólo se ejecuta una vez! Por lo tanto, no es realmente la opción adecuada.
 

La pregunta es aburrida, pero la respuesta no aparece por ningún lado, o tal vez sólo busqué mal:

En las funciones, o quizás en algún otro lugar, he visto el símbolo & después del tipo de datos y, si no me equivoco, una vez &&

func(int& mm_mode, string symbol, int magic,bool& stop) {

¿Para qué sirve? ¿Qué hace? (Referencia, si puede encontrar más información al respecto))