Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 996

 
Alexey Viktorov:


Ce que vous essayez d'imprimer n'est pas correct. La bonne méthode est la suivante.

Voici le détail :

42 est un identifiant numérique : ACCOUNT_MARGIN_FREE

c'est-à-dire que nous pouvons obtenir la marge libre à partir de la constante

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

Ou par son identifiant numérique :

AccountInfoDouble(42)

Merci !

 
killer67:

Voici le détail :

42 est un identifiant numérique : ACCOUNT_MARGIN_FREE

c'est-à-dire que nous pouvons obtenir la marge libre à partir de la constante

Ou par son identifiant numérique :

Merci !

La première version de l'écriture est plus informative.

 

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

C'est probablement une question stupide, mais ces fonctions peuvent-elles être utilisées dans MQL4 ? C'est juste que les outils de MQL4 sont plus limités.

Comment obtenir les données dans MQL4 :

TRANSACTION_SESSION_SYMBOLE

Nombre de transactions dans la session en cours

SYMBOL_SESSION_COMMANDES D'ACHAT

Nombre total d'ordres d'achat en ce moment

long

SYMBOLE_SESSION_COMMANDES DE VENTE

Nombre total d'ordres de vente en ce moment

long

SYMBOL_VOLUME

Volume - Volume de la dernière transaction

long

SYMBOLE_VOLUMEHIGH

Volume maximal pour la journée

long

SYMBOLE_VOLUMELOW

Volume minimum pour la journée

SYMBOL_BID

Offre - meilleure offre

double

SYMBOL_BIDHIGH

Enchère maximale pour la journée

double

SYMBOL_BIDLOW

Enchère minimale pour la journée

double

SYMBOL_ASK

Demande - meilleure offre

double

SYMBOL_ASKHIGH

Demande maximale pour la journée

double

SYMBOL_ASKLOW

Demande minimale pour la journée

VOLUME_SESSION_SYMBOLE

Volume total des transactions de la session en cours

double

SYMBOL_SESSION_TURNOVER

Chiffre d'affaires total de la session en cours

double

SYMBOLE_SESSION_INTÉRÊT

Volume total des positions ouvertes

double

SYMBOLE_SESSION_COMMANDES_D'ACHAT_VOLUME

Volume total des ordres d'achat en ce moment

double

SYMBOLE_SESSION_COMMANDES_DE VENTE_VOLUME

Volume total des ordres de vente en ce moment

double

SYMBOL_SESSION_OPEN

Prix d'ouverture de la session

double

SYMBOL_SESSION_CLOSE

Prix de clôture

double


C'est un trésor de données utiles en une seule fois. La seule question est de savoir comment le faire dans MQL4. La question peut se poser, pourquoi je n'étudie pas MQL5, puisqu'il a une fonctionnalité plus large. C'est simple. Tous les courtiers ne le supportent pas. Pour l'instant, MQL4 reste le plus populaire et le plus demandé.

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Gilmor:

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

C'est probablement une question stupide, mais ces fonctions peuvent-elles être utilisées dans MQL4 ? C'est juste que les outils de MQL4 sont plus limités.

Comment obtenir des données dans MQL4 :


C'est un trésor de données utiles en un seul clic. Mais comment le faire dans MQL4. Cet article contiendra également quelques conseils sur la façon de préparer MQL5 pour le marché, car le marché est considérablement plus large. C'est simple. Tous les courtiers ne le supportent pas. Pour l'instant, le MQL4 reste le plus populaire et le plus demandé.

Dans la documentation de mql4, tous ceux qui ne fonctionnent pas sont marqués.

SYMBOL_BID

Offre - meilleure offre

double

SYMBOL_BIDHIGH

Non pris en charge

double

SYMBOL_BIDLOW

Non pris en charge

double

SYMBOL_ASK

Demande - meilleure offre d'achat

double

SYMBOL_ASKHIGH

Non pris en charge

double

SYMBOL_ASKLOW

Non pris en charge

double

SYMBOL_LAST

Non pris en charge

double

SYMBOLE_LASTHIGH

Non pris en charge

double

SYMBOL_LASTLOW

Non pris en charge

double

SYMBOL_POINT

Valeur du point unique

double

Ce n'est pas toute la table. Il y en a plusieurs dans la documentation, il suffit d'appuyer sur F1 et de la lire.

 
Alexey Viktorov:

Dans la documentation de mql4, toutes celles qui ne fonctionnent pas sont marquées.

Merci.
 
Aide à la compréhension, ne peut pas régler correctement le stop loss.
Lignes du journal :
2019.11.16 12:38:40.660 2019.01.02:35:00 Pour calculer les arrêts, prenez la valeur du courtier = 30
2019.11.16 13:20:18.791 2019.01.02:03:00 Ouvrir un ordre : Prix = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 échec de l'achat instantané de 0.01 EURUSD à 1.14595 sl : 1.14565 tp : 1.14625 [invalid stops]
2019.11.16 13:20:18.792 2019.01.02:03:00 CTrade::OrderSend : achat instantané de 0.01 EURUSD à 1.14595 sl : 1.14565 tp : 1.14625 [stops invalides]


Et maintenant un peu de clarté pour ce cas :
Dans le code avant d'ouvrir un ordre je calcule :
price = meilleur prix du marché pour acheter, selon l'ordre, dans ce cas un achat.
SL = calculer un stop droit (le courtier autorise un stop d'au moins 30 unités par rapport au prix) c'est-à-dire
prix (1,14595) - 0,0003 = SL (1,14565)
TP = calculer un stop droit (le courtier autorise un stop d'au moins 30 unités par rapport au prix) c'est-à-dire
prix (1,14595) + 0,0003 = TP (1,14625)
Tout semble correct, je détiens 30 points, mais je reçois une erreur de paramétrage.

Si nous définissons SL = 0, alors tout est OK, l'ordre et le TP sont définis.
J'obtiens une erreur dans le calcul de SL, où se trouve l'erreur ?
 
killer67:
Aidez-moi à comprendre, je n'arrive pas à régler correctement le stop loss.
Lignes de journal :
2019.11.16 12:38:40.660 2019.01.02 02:35:00 Pour calculer les stops, prenez la valeur du courtier = 30
2019.11.16 13:20:18.791 2019.01.02 02:03:00 Ouvrir un ordre : Prix = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 failed instant buy 0.01 EURUSD at 1.14595 sl : 1.14565 tp : 1.14625 [Invalid stops]
2019.11.16 13:20:18.792 2019.01.02 02:03:00 CTrade::OrderSend : achat instantané 0.01 EURUSD à 1.14595 sl : 1.14565 tp : 1.14625 [arrêts invalides].


Et maintenant un peu de clarté pour cette affaire :
Dans le code, je calcule avant d'ouvrir une commande :
price = meilleur prix du marché pour acheter, en fonction de l'ordre, dans ce cas un achat.
SL = calculer un stop droit (le courtier autorise des stops à au moins 30 unités de distance du prix), c'est-à-dire
prix (1,14595) - 0,0003 = SL (1,14565)
TP = Calculer le stop correct (le courtier autorise des stops à au moins 30 unités du prix) c'est-à-dire
prix (1,14595) + 0,0003 = TP (1,14625)
Eh bien, tout semble être correct, je conserve 30 pips, mais je reçois une erreur de réglage.

Nous fixons SL = 0, alors tout est OK, l'ordre et le TP sont fixés.
Il s'avère qu'il s'agit d'une erreur de calcul de SL, où se trouve l'erreur ?

Quel type de prix ?

 
Iurii Tokman:

Quel type de prix ?

À l'achat Prix = SYMBOL_ASK

Prix de vente = SYMBOL_BID

 
killer67:

À l'achat Prix = SYMBOL_ASK

Lorsque le prix de vente = SYMBOL_BID

Avez-vous essayé d'ajouter une pâte à tartiner ?

 
Iurii Tokman:

Avez-vous essayé d'ajouter une pâte à tartiner ?

Je l'ai réparé comme ça :

double CheckSetSL(ENUM_ORDER_TYPE OrderT, double price)
  {
   if(InpSL != 0)
     {
      double CalcSL = 0.0;
      double SL = 0.0;
      if(InpSL < 0.0003)
        {
         CalcSL = 0.0003; // Если SL в настройках указано меньше 30 (установки брокером) то ставим минимально допустимую.
        }
      else
        {
         CalcSL = InpSL;
        }

      // Формируем стоп-лимит.
      if(OrderT == ORDER_TYPE_BUY)
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) - CalcSL;

        }
      else
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + CalcSL;

        }

      return SL;
     }

   return 0.0;
  }