Questions des débutants MQL5 MT5 MetaTrader 5 - page 42

 

Bonjour, je n'arrive pas à trouver comment faire une chose simple dans MQL5. J'ai besoin de déclarer une variable au niveau de la classe (type tableau tridimensionnel double) et ensuite de faire son initialisation tardive dans le constructeur. En C#, cela ressemblerait à ceci :

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

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

}

Comment obtenir le même résultat dans MQL5 ? Je peux déclarer un tableau dynamique à trois dimensions. Mais avec la fonction ArrayResize, je ne peux allouer de la mémoire que pour la première dimension, qu'en est-il des deux autres ?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Bonne journée ! Chers utilisateurs du forum, quelqu'un peut-il vous conseiller ?
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 (ÉCHEC)
4756
Échec de l'envoi de la demande d'échange

Pourquoi ça n'a pas marché ? Peut-être que les professionnels pourront me dire rapidement où chercher, sinon je vais devoir deviner jusqu'à ce soir...

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Dimka-novitsek:
Bonne journée ! Chers utilisateurs du forum, quelqu'un peut-il vous donner quelques conseils ?

ERR_TRADE_SEND_FAILED (ÉCHEC)
4756
Échec de l'envoi d'une demande de transaction

Pourquoi ça n'a pas marché ? Peut-être que les professionnels vous diront rapidement où chercher, sinon je vais deviner jusqu'au soir...

Vous n'avez pas besoin de deviner, vous devez regarder les informations dans la requête MqlTradeRequest, vous l'avez créée pour une raison.

Pour commencer, vous n'avez pas spécifié le prix auquel vous prévoyez de vendre.

 
Dimka-novitsek: J'aimerais savoir où chercher rapidement, sinon je vais devoir deviner jusqu'à ce soir...
Tout d'abord, vous devez voir combien de champs obligatoires doivent être remplis pour la variable de demande pour ce type d'action.
 
Merci ! !! Je pensais qu'avec une exécution instantanée, le prix était compréhensible : .....
 
Bonne journée ! Je ne comprends pas bien comment utiliser la fonction
 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 fonction ne peut être déclarée que dans la portée globale deposit.mq5 86 Quelque chose ne va pas, en bref.

En général, je veux créer une fonction qui utilise un pourcentage du dépôt. Par exemple, 50 % est une offre pour la moitié de mon dépôt. Je veux comprendre combien coûte un lot ? Peut-on le calculer de manière programmatique ? J'ai réfléchi et lu pendant le troisième jour. Et les lots peuvent être différents partout - cela dépend du type de transaction et du compte !

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Dimka-novitsek:
Bonne journée ! Je ne comprends pas bien comment utiliser la fonction

OrderCalcMargin' - la fonction ne peut être déclarée que dans la portée globale de deposit.mq5 86 Quelque chose ne va pas.

Dmitry !

Lisez attentivement ce qu'est une fonction et ce qu'est un appel de fonction.

Vous avez un fouillis complet de déclarations et d'utilisations

 
Dimka-novitsek: Je veux comprendre, combien coûte un lot? Est-il possible de le calculer de manière programmatique ? Cela fait maintenant trois jours que je réfléchis et que je lis. Et les lots peuvent être différents partout - cela dépend du type de transaction et du compte !
Si votre réponse est la deuxième question, essayez de trouver l'article"L'ABC du trading de devises" par son titre. Il semble avoir été écrit pour MT4, mais il n'est pas trop spécial.
 

Merci !

Oui, la fonction de double prédiction est de ma faute...

 

Il fronce toujours les sourcils... Disons que action=ORDER_TYPE_SELL, il est indiqué 'action' - identifiant non déclaré. OuENUM_ORDER_TYPE action=ORDER_TYPE_SELL, qui dit 'action' - token inattendu.

C'est partout... Et en anglais...

 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 );  }