Discussion de l'article "Opérations trading en MQL5 - Combien facile" - page 3

 

Pouvez-vous me dire s'il est possible d'implémenter cette construction à partir de MQL4 en utilisant m_Trade.PositionModify (m_Trade est un membre de la classe CTrade) ?

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

Le but du script est d'ouvrir un achat sur le marché avec un nombre de lots donné, puis de fixer un take profit en 10 parties. Je me suis retrouvé bloqué par le fait que sans fixer de stop loss PositionModify donne l'erreur 10016(Incorrect stops in the request). Et il n'y a pas de tâche pour définir un stop :). Dans l'aide, il est dit qu'il est possible de ne pas spécifier de valeur :

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

J'ai essayé de passer la valeur obtenue lors de la demande d'achat précédente (il y a zéro bien sûr), eh bien, le même rake seulement dans le profil. Voici mon code :

...
         m_Trade.Buy(Lots);// acheter la totalité du volume sur le marché
         if(m_Trade.ResultRetcode()==10008)//si l'achat est réussi, changer la position en réglant les prises en charge
           {
            S="Demande satisfaite. Numéro de commande : "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// récupère le stop loss de la dernière demande
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="Snap Take :"+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="Erreur de changement de position du SnP avec le code : "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

Merci d'avance pour votre aide.

[Supprimé]  
Il s'agit d'une aide précieuse pour démarrer la programmation de l'EA.
 

Bonne introduction à la programmation orientée objet dans MQL5.

Avec MT5 build 1347, le premier exemple de code ne se compile pas avec l'erreur "illegal switch expression type".

J'ai dû ajouter le casting à int dans les déclarations de switch dans AccountInfo.mqh pour le faire fonctionner, comme :

switch((int)MarginMode())

 
Николай Осипов:

Bonjour,
Lors de l'utilisation de la fonction BuyStop dans le code pour négocier les futures RTS-3.13 (RIH3), une erreur continue de se produire :
10022 TRADE_RETCODE_INVALID_EXPIRATION - Date d'expiration de l'ordre non valide


Nicolas, je vous salue. Avez-vous par hasard résolu ce problème ? Je rencontre les mêmes difficultés sur RTS-6.17, je ne comprends pas comment le résoudre.
 
Rashid Zeynalov:
Problème similaire sur RTS-3.13 Opening-demo, j'ai tout essayé (alors que les ordres limites sont réglés sur ORDER_TIME_SPECIFIED_DAY comme indiqué dans le profil du symbole) ! !!!. Alors que l'ordre d'achat-stop est parfaitement ouvert sur le marché manuellement. Il s'agit d'un problème de terminal, vous devriez écrire aux développeurs.
Rashid, bonjour. Avez-vous par hasard résolu ce problème ? Je rencontre les mêmes difficultés sur le vrai Open sur RTS-6.17.

 
sgtkachev:
Rashid, bonjour. Avez-vous par hasard résolu ce problème ? Je rencontre les mêmes difficultés sur le vrai Open sur RTS-6.17.

Désolé, je n'avais pas remarqué la question. Essayez de remplacer ce fichier et rapportez le résultat, s'il vous plaît.
Dossiers :
Trade.mqh  68 kb
 

Bonjour

Sur certains brokers (FoxPro par exemple) en essayant d'ouvrir une position l'erreur 10030. Code description : invalid fill. Sur d'autres brokers (par exemple Alpari) fonctionne sans ces lignes

Dans le bloc d'initialisation de l'Expert Advisor, j'ai écrit des valeurs différentes dans le code :

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

Cela ne sert à rien. Comment résoudre le problème ? Ou est-ce que cette classe CTrade est obsolète et ne correspond pas aux dernières mises à jour du terminal et je dois écrire des opérations de trading selon le schéma standard à travers la structure ?


UPD : Rashid a posté un fichier de bibliothèque ci-dessus, qui a résolu mon problème. C'est triste que la bibliothèque standard ait une erreur. Je vais maintenant étudier la comparaison pour voir s'il est possible de faire quelques changements directement dans l'EA sans remplacer la bibliothèque pour que tout fonctionne.

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
Bon
 
makk:

Bonne introduction à la programmation orientée objet dans MQL5.

Avec MT5 build 1347, le premier exemple de code ne se compile pas avec l'erreur "illegal switch expression type".

J'ai dû ajouter le casting à int dans les déclarations de switch dans AccountInfo.mqh pour le faire fonctionner, comme :

switch((int)MarginMode())

 

Bonjour, Merci pour cet article très utile et aidez-moi à résoudre ce problème. Je suis nouveau sur MT5 et j'apprends à créer des EAs. J'ai donc copié le code d'exemple pour exécuter Ctrade.Buy mais le backtest a échoué. Voici plus d'informations :


1) Compte : Il s'agit d'un compte réel dont la devise de base est le NZD.

2) Paramètres MetaEditor pour le backtest :

Options


3) Code : Copié depuis https://www.mql5.com/fr/articles/481 :


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) Journal d'erreurs (Veuillez noter que je ne teste que sur EUR/USD) :

GJ 0 19:36:44.410 127.0.0.1 login (build 1730)

HH 0 19:36:44.420 Réseau 38520 octets d'informations de compte chargés

JO 0 19:36:44.420 Réseau 1482 octets de paramètres de test chargés

QE 0 19:36:44.420 Réseau 188 octets de paramètres d'entrée chargés

FR 0 19:36:44.421 Réseau 443 octets de liste de symboles chargés

IF 0 19:36:44.421 Fichier expert du testeur ajouté : Experts\demo.ex5. 46684 octets chargés

QH 0 19:36:44.433 Tester dépôt initial 10000.00 NZD, effet de levier 1:100

JN 0 19:36:44.437 Initialisation réussie du testeur

ES 0 19:36:44.437 Réseau 46 Kb de données d'initialisation totales reçues

PP 0 19:36:44.437 Testeur Intel Core i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 Symboles EURUSD : symbole à synchroniser

HR 0 19:36:44.800 Symboles EURUSD : symbole synchronisé, 3624 octets d'informations sur le symbole reçus

NJ 0 19:36:44.800 Historique EURUSD : synchronisation de l'historique démarrée

GO 0 19:36:44.856 Historique EURUSD : chargement de 27 octets de données d'historique à synchroniser dans 0:00:00.000

RQ 0 19:36:44.856 Historique EURUSD : synchronisation de l'historique de 2012.01.01 à 2017.11.15

EF 0 19:36:44.993 Historique EURUSD,Daily : le cache de l'historique est alloué pour 1010 barres et contient 312 barres de 2014.01.01 00:00 à 2014.12.31 00:00

ND 0 19:36:44.993 Historique EURUSD,Daily : l'historique commence à partir de 2014.01.01 00:00

OL 0 19:36:44.996 Tester EURUSD,Daily (HalifaxPlus-Live) : chaque tic généré

GN 0 19:36:44.996 Tester EURUSD,Daily : test de Experts\demo.ex5 de 2015.01.01 00:00 à 2017.11.15 00:00 commencé

CK 0 19:36:56.288 Symboles NZDUSD : symbole à synchroniser

IS 0 19:36:56.288 Symboles NZDUSD : symbole synchronisé, 3624 octets d'informations sur le symbole reçus

JL 0 19:36:56.288 History NZDUSD : synchronisation de l'historique démarrée

HJ 0 19:36:56.575 Historique NZDUSD : chargement de 14 Kb de données d'historique à synchroniser dans 0:00:00.078

LS 0 19:36:56.575 Historique NZDUSD : synchronisation de l'historique de 2013.01.01 à 2017.11.15

CO 0 19:36:56.579 Symboles EURNZD : symbole à synchroniser

OJ 0 19:36:56.580 Symboles EURNZD : symbole synchronisé, 3624 octets d'informations sur le symbole reçus

DL 0 19:36:56.580 Historique EURNZD : synchronisation de l'historique démarrée

MK 0 19:36:56.656 History EURNZD : load 27 bytes of history data to synchronize in 0:00:00.000

OD 0 19:36:56.656 Historique EURNZD : synchronisation de l'historique de 2013.01.01 à 2017.11.15

IN 0 19:36:56.665 Trade 2015.01.02 03:00:00 market buy 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665 Trades 2015.01.02 03:00:00 deal #2 achat 0,10 EURUSD à 1,20549 effectué(basé sur l'ordre #2)

FH 0 19:36:56.666 Trades 2015.01.02 03:00:00 deal performed [#2 buy 0.10 EURUSD at 1.20549]

OG 0 19:36:56.666 Trade 2015.01.02 03:00:00 ordre exécuté achat 0.10 à 1.20549 [#2 achat 0.10 EURUSD à 1.20549]

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 La méthode Buy() a été exécutée avec succès. Return code=10009 (fait à 1.20549)

NM 2 19:37:15.823 Historique NZDUSD 2016.09.21 23:01:00 : historique corrompu détecté (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 Historique NZDUSD 2016.09.21, mauvais conteneur détecté, doit être resynchronisé

LQ 2 19:37:16.106 Tester l'historique erreur 9 dans une fonction non définie

OH 2 19:37:16.106 Le testeur s'est arrêté à 0% de l'intervalle de test avec l'erreur '20 NZDUSD'.


Merci de me dire ce qui ne va pas et comment résoudre ce problème.