Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 24

 
Por favor, díganme que estoy usando una función dentro de otra. En outer declaro una variable. En el interno, lo uso. Aquí se trata de
  string PositionSymboll = "";
   if  (PositionSymboll=PositionGetSymbol(i)){//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
    if (PositionGetInteger(POSITION_MAGIC)== MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
              { BU_();}}

Etc. Jura así. 'PositionSymboll' - identificador no declarado Redo.mq5 2472 5

Sinceramente, no esperaba ninguna captura aquí. Si lo encapsulo dentro de la función BU_() que estoy utilizando, el pirimeno será "nulo". ¿Qué debería hacer mejor?

Me vendría muy bien declararlo dentro de la primera función, dentro del bucle if.

 
Oh, tú! E incluso declarándolo dentro de la función void OnTick(), el compilador también jura lo mismo, ¡ya en la primera función! Estoy fuera, estoy fuera...
 
Dimka-novitsek:
Oh, tú! E incluso declarándolo dentro de la función void OnTick(), el compilador sigue quejándose de la misma manera, ¡ya en la primera función! Paso, sólo se cayó...
void OnStart()
  {
   int i=0; long MAGIC=1234;
   
   string PositionSymboll="";
   if(PositionSymboll=PositionGetSymbol(i))
     {//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
      if(PositionGetInteger(POSITION_MAGIC)==MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
        { BU_();}
     }
  }
void  BU_(){} 

compila normalmente, pero la construcción

string PositionSymboll="";
   if(PositionSymboll)

cuestionable, ¿está comprobando la variable de cadena verdadero/falso ????????? estoy desconcertado

la pregunta es retórica.

 
¡¡¡Gracias!!! Todavía estoy aprendiendo, este es mi primer EA en MQL5. ¿Qué quiere decir con retórica?
 
Dimka-novitsek:
¡¡¡Gracias!!! Todavía estoy aprendiendo, este es mi primer EA en MQL5. ¿Qué quiere decir con retórica?

Esto significa no exigir una respuesta.

Sólo una variable de tipo cadena pasada como expresión en una sentencia if, sólo dará false en un caso, si la variable no ha sido inicializada.

En todos los demás casos, el contenido de la variable se dará por verdadero.

 
¡¡¡Gracias!!!
 

Podrían decirme si hay una función que debería devolver true si hay una orden pendiente al precio enviado a la función. Pero devuelve "calvo" (alternativamente verdadero/falso). Por favor, indíqueme dónde me falta la lógica de trabajar con órdenes en mql5. (sólo aprendiendo).


bool OrderExist(double price)                                                                      // функция возвращает наличие ордера на передаваемой цене
{
         
uint total=OrdersTotal();
ulong    ticket;

for(uint i=0;i<total;i++)
   {
   if((ticket=OrderGetTicket(i))>0)      
      {
      if(NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),4)== price)
         {
         return(true);
         }
      }
   }
return(false);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
DMXX:

Por favor, avisa, hay una función que debería devolver true si hay una orden pendiente al precio que he enviado a la función. Pero devuelve un calvo (alternativamente verdadero/falso). Por favor, indíqueme dónde me falta la lógica de trabajar con órdenes en mql5. (sólo aprendiendo).

Pero no es seguro que la orden se haya abierto al precio dado, puede haber habido deslizamiento, por lo que obtengo lo siguiente: si la orden se abrió a tiempo - verdadero, si no lo hizo (el precio se ha desplazado) - falso.

 
fyords:
Pero no es el hecho de que la orden se abrió en el precio establecido, el deslizamiento podría haber ocurrido y es por eso que tenemos el siguiente resultado: si la orden se abrió en el tiempo - verdadero, si no se abrió en el tiempo (el precio se movió) - falso.
Sí, se muestra en el terminal a este precio. Si está en operaciones, significa que se ha colocado con éxito, ¿no?
 
DMXX:
Sí, está colgado en el terminal a este precio. Si está en operaciones, significa que se ha colocado con éxito, ¿no?

Sí, está configurado, pero cuando se activa...

U otro ejemplo: tenemos una orden pendiente, su precio difiere del actual en 1 punto, en el siguiente tick el precio salta no en 1 punto, sino, digamos, en 3-5 puntos, lo que resulta en la apertura a un precio equivocado. Un ejemplo obvio es un hueco.

O tal vez no entiendo la pregunta y soy tonto.