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

 

Buenas tardes! No consigo averiguar cómo hacer una cosa sencilla en MQL5. Necesito declarar una variable a nivel de clase (tipo array tridimensional double) y luego hacer su inicialización tardía en el constructor. En C# se vería así:

public class MyClass
{
   
  private double[,,] myArray;
   
  public MyClass(int dimension1, int dimension2, int dimension3)

{
   myArray = new double[dimension1, dimension2, dimension3];

}

¿Cómo conseguir el mismo resultado en MQL5? Puedo declarar un array dinámico tridimensional. Pero con la función ArrayResize puedo asignar memoria sólo para la primera dimensión, ¿qué pasa con las otras dos?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
¡Buenos días! Estimados usuarios del foro, ¿alguien puede aconsejar aquí
int OnInit()
  {
//---
  Print ( ACCOUNT_BALANCE );
   Print (SYMBOL_MARGIN_INITIAL);//Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок.
  
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
   printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
   printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
   printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
   printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
   printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
   printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
   printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
  
   MqlTradeRequest request={0};
      MqlTradeResult result={0};
      
 
  {
    request.    action=TRADE_ACTION_DEAL;           // Тип выполняемого действия
  
    request.                        volume=1;           // Запрашиваемый объем сделки в лотах     
    request.               type=ORDER_TYPE_SELL;             // Тип ордера
    
   }
   
  OrderSend(request,result); 
  
  
  int Error=GetLastError(); ResetLastError();
        printf("Error %i ",Error);
      
        
        
       
  
  
  
  
  
  
  
  
//---
   return(0);
  }
//+------------------------------------------------------------------+

ERR_TRADE_SEND_FAILED
4756
Fallo en el envío de la solicitud de comercio

¿Por qué no ha funcionado? Tal vez los profesionales puedan decirme rápidamente dónde buscar, de lo contrario estaré adivinando hasta la noche...

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Dimka-novitsek:
¡Buenos días! Estimados usuarios del foro, ¿alguien puede dar algunos consejos aquí?

ERR_TRADE_SEND_FAILED
4756
No se ha podido enviar una solicitud de comercio

¿Por qué no ha funcionado? Tal vez los profesionales le digan rápidamente dónde buscar, si no, estaré adivinando hasta la noche...

No es necesario adivinar, hay que mirar la información en la solicitud MqlTradeRequest, que se creó por una razón.

Bueno, para empezar no has especificado el precio al que piensas vender

 
Dimka-novitsek: Me gustaría saber dónde buscar rápidamente, de lo contrario estaré adivinando hasta la noche...
En primer lugar, hay que ver cuántos campos obligatorios debe rellenar la variable de solicitud para este tipo de acción.
 
¡¡¡Gracias!!! De alguna manera pensé que con la ejecución instantánea el precio era comprensible....
 
¡Buenos días! No entiendo muy bien cómo utilizar la función
 for (int i=0;i<10;i=i+0.1){ Print( "i ",i);  
 bool  OrderCalcMargin(
         action=ORDER_TYPE_SELL,           // тип ордера
                  symbol=_Symbol,           // имя символа
                  volume=i,           // объем
                  price=last_tick.bid,            // цена открытия
   double&               margin            // переменная для получения значения маржи
   ); 
   Print( " margin  ", margin );  }
  

OrderCalcMargin' - la función sólo puede ser declarada en el ámbito global deposit.mq5 86 Algo está mal, en resumen.

En general, quiero crear una función que utilice un porcentaje del depósito. Por ejemplo, el 50% es un acuerdo sobre la mitad de mi depósito. Quiero saber cuánto cuesta 1 lote. ¿Puede calcularse de forma programada? Llevo tres días pensando y leyendo. Y los lotes pueden ser diferentes en todas partes: ¡depende del tipo de transacción y de la cuenta!

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Dimka-novitsek:
¡Buenos días! No entiendo muy bien cómo utilizar la función

OrderCalcMargin' - la función sólo puede declararse en el ámbito global de deposit.mq5 86 Algo está mal.

¡Dmitry!

Lea atentamente qué es una función y qué es una llamada a una función

Tienes un completo lío de declaraciones y usos

 
Dimka-novitsek: Quiero entender, ¿cuánto es 1 lote? ¿Es posible calcularlo de forma programada? Llevo tres días pensando y leyendo. Y los lotes pueden ser diferentes en todas partes: ¡depende del tipo de transacción y de la cuenta!
Si su respuesta es la segunda pregunta, intente encontrar el artículo"El ABC del comercio de divisas" por su título. Parece estar escrito para MT4, pero no es demasiado especial.
 

Gracias.

Sí, la función de doble pred es culpa mía...

 

Todavía frunce el ceño... Digamos que action=ORDER_TYPE_SELL, dice 'action' - identificador no declarado. OENUM_ORDER_TYPE action=ORDER_TYPE_SELL, dice 'action' - token inesperado.

Está en todas partes... Y en inglés...

 for (int i=0;i<10;i=i+0.1){ Print( "i ",i);  
  OrderCalcMargin(
       ENUM_ORDER_TYPE  action=ORDER_TYPE_SELL,           // тип ордера
                  symbol=_Symbol,           // имя символа
                  volume=i,           // объем
                  price=last_tick.bid,            // цена открытия
                 margin            // переменная для получения значения маржи
   ); 
   Print( " margin  ", margin );  }
Razón de la queja: