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

 
Alexey Viktorov:

Depende de cuál sea el objetivo de captar la actualización. ¿Qué tal si simplemente se llena la matriz?

¿Qué importa el propósito? La pregunta es por qué un evento tan obvio es tan difícil de captar, dado que hay un montón de otras propiedades menos utilizadas y necesarias. En este caso, el objetivo es la notificación (alerta).

 
leonerd:

¿Qué más da el objetivo? La pregunta es por qué un evento tan obvio es tan difícil de captar, a pesar de que hay un montón de otras propiedades menos utilizadas y necesarias. En este caso, el objetivo es la notificación (alerta).

Así que es este evento obvio que se destaca en el tipo de transacción. Prueba la biblioteca de Trishkin en 58 artículos. Tal vez tenga una opción sencilla.

 
в 58 ми статьях

Bueno, gracias ))

Sospecho que mantiene su registro de la misma manera.

Изменение открытого ордера. К данным изменениям относятся не только явные изменения со стороны клиентского терминала или торгового сервера, но также и изменение его состояния при выставлении (например, переход из состояния ORDER_STATE_STARTED aORDER_STATE_PLACED o deORDER_STATE_PLACED aORDER_STATE_PARTIAL, etc.).


Me bastaría con saber que no es el primer ORDER_STATE_PLACED en un ticket de pedido concreto.

Resulta que dos TRADE_TRANSACTION_ORDER_UPDATE llegan cuando se realiza el primer pedido. Aquí, y la tercera ya me encajaría como un cambio, que en mi caso es sólo un cambio de precio. O el segundoORDER_STATE_PLACED.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
También debería comprobarORDER_TIME_SETUP. ¿Es nuevo cada vez?
 
Siguiendo el ejemplo de MT4 "STRINGS: ASCII CHARACTERS TABLE AND USE"

//+------------------------------------------------------------------+
//| StringLowerCase |
//+------------------------------------------------------------------+
string StringLowerCase(string str)
  {
   string s = str;
   int lenght = StringLen(str) - 1, symbol;
   while(lenght >= 0)
     {
      symbol = StringGetChar(s, lenght);
      if((symbol > 64 && symbol < 91) || (symbol > 191 && symbol < 224))
         s = StringSetChar(s, lenght, symbol + 32);// тут possible loss of data due to type conversion
      else
         if(symbol > -65 && symbol < -32)
            s = StringSetChar(s, lenght, symbol + 288);// тут possible loss of data due to type conversion
      lenght--;
     }
   return(s);
  }
//+------------------------------------------------------------------+
//| StringUpperCase |
//+------------------------------------------------------------------+
string StringUpperCase(string str)
  {
   string s = str;
   int lenght = StringLen(str) - 1, symbol;
   while(lenght >= 0)
     {
      symbol = StringGetChar(s, lenght);
      if((symbol > 96 && symbol < 123) || (symbol > 223 && symbol < 256))
         s = StringSetChar(s, lenght, symbol - 32);// тут possible loss of data due to type conversion
      else
         if(symbol > -33 && symbol < 0)
            s = StringSetChar(s, lenght, symbol + 224);// тут possible loss of data due to type conversion
      lenght--;
     }
   return(s);
  }

Si no te importa, por favor ayúdame a arreglarlo...
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SGarnov:
Hice el ejemplo de MT4 "STRINGS: TABLA DE CARACTERES ASCII Y SU USO"


Si no te importa, por favor ayúdame a arreglarlo...

StringSetChart() bool devuelve un bool. Y lo estás asignando a una variable de cadena... Si esa es la cuestión.

 
¿Se pueden crearsímbolos personalizados sin utilizar el menú de MT5, simplemente colocando los archivos adecuados en las carpetas correctas?
 

Hola. He escrito una función que comprueba las condiciones para entrar en una posición.

El problema es que si la condición (resaltada en amarillo) no se cumple, la función no termina sino que pasa a la siguiente condición. Así, la señal no funciona correctamente.

¿Qué hay que hacer para que la función deje de funcionar cuando no se cumple una de las condiciones, inmediatamente después de la condición incorrecta?

bool BuySignal_new()
{
   double Sig_Up[];                 // динамический массив для хранения значений индикатора на покупку для каждого бара
   double Sig_Down[];               // динамический массив для хранения значений индикатора на продажу для каждого бара
   ArraySetAsSeries (Sig_Up,true);   // устанавливаем индексацию как в таймсерии ( т.е. 5,4,3,2,1,0) в динамич. массиве для индикатора
   ArraySetAsSeries (Sig_Down,true); // устанавливаем индексацию как в таймсерии ( т.е. 5,4,3,2,1,0) в динамич. массиве для индикатора
   ResetLastError();
   double close = NormalizeDouble(iClose(_Symbol,_Period,1),Digits());
   double close_1 = NormalizeDouble(iClose(_Symbol,_Period,0),Digits());
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),Digits());
if(CopyBuffer(Handle_stepma_line,0,1,5,Sig_Up)==5 && CopyBuffer(Handle_stepma_line,1,1,4,Sig_Down)==4 )
  {
   Print("Данные скопированы. Ошибок нет.");
   
  } 
else
    {
     Print("Ошибка копирования. Нет данных");
     return(false);
    }

if (Sig_Up[1] < Sig_Down[1] && Sig_Up[0] > Sig_Down[0])
  {
   Print("условие 1 - ок");
  }
else
    {
    Print("условие 1 НЕ выполненно");
    return(false);
    }
if (close < Sig_Up[1]&& Bid > Sig_Up[0])
  { 
   Print ("условие 2 - ок");
   return(true);
  }   
else
    {
    Print("условие 2 НЕ выполненно");
    return(false);
    }   
 
Sergey:

¿Qué hay que hacer para que, si una de las condiciones de la función no se cumple, toda la función termine inmediatamente después de la condición incorrecta?

Elimina la ramificación por otro lado, puedes probarlo así:

   if(CopyBuffer(Handle_stepma_line, 0, 1, 5, Sig_Up) != 5)
   {
      Print("Ошибка копирования. Нет данных");
      return(false);
   }

   if(CopyBuffer(Handle_stepma_line, 1, 1, 4, Sig_Down) != 4)
   {
      Print("Ошибка копирования. Нет данных");
      return(false);
   }


   if(!(Sig_Up[1] < Sig_Down[1] && Sig_Up[0] > Sig_Down[0]))
   {
      Print("условие 1 НЕ выполненно");
      return(false);
   }

   if (!(close < Sig_Up[1] && Bid > Sig_Up[0]))
   {
      Print("условие 2 НЕ выполненно");
      return(false);
   }
//--- если дошли сюда, то все условия выполнены
   return(true);
 
Igor Makanu:

quitar la ramificación por el otro, puedes probarlo así:

Gracias, lo probaré.