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

 
Alexey Viktorov:

Est-ce que c'est bien que ça dise

rien, le fil de discussion est pour MT4, donc vous n'y prêtez pas attention

OK, occupez-vous, on s'ennuie ici.

 

Salutations à tous. Bonne chance dans la vie et profit dans le travail.

Je demande de l'aide (de façon inattendue, hein ? :) ).

Dans Mql je suis un zerobom, 2 jours "dans le sujet". Si l'EA réel m'oblige à utiliser le trading automatique, j'essaie d'écrire (collecter en temps réel à partir de différentes parties) le hibou pour mon EA plat et bien sûr je commence à en avoir assez :). Cela fait maintenant 10 heures que j'essaie de résoudre un autre problème et je n'y suis toujours pas arrivé. Si quelqu'un peut donner des conseils ou un exemple, je lui en serai extrêmement reconnaissant (verbalement et par écrit, et surtout sous la douche).

En général... Il y a TC, que j'utilise avec succès depuis longtemps. Sur les conditions de transaction sur le même instrument, les ordres de marché multidirectionnels peuvent être exécutés (pas d'ordre en attente). La position abaissée peut être remplie lors d'un signal de trading, à condition que la position ait baissé d'au moins X pips, ce qui arrive parfois et permet de faire un ajout au remplissage (dans les mêmes conditions (signal de trading + taille du drawdown)). Le problème (actuel) réside dans l'ouverture de positions supplémentaires, à savoir... comment vérifier et renvoyer la valeur de la perte sur une position longue. En suivant l'exemple dehttps://www.mql5.com/ru/forum/117061, j'ai modifié le code pour attribuer à chaque position son propre Magik, mais c'est à peu près tout. Comment sélectionner exactement une position qui s'est assise et retourner sa valeur de perte.... :(.

"mon" code pour l'ouverture des transactions.

//-----------------

si (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

si (mes conditions d'entrée)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits) ; sinon TP = 0 ;

if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits) ; sinon SL = 0 ;

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "BUY",Magic,0,Blue) ;

if(ticket < 0) { Print("Error while opening BUY order #", GetLastError());}

}}

if(NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

si (mes conditions d'entrée)

{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits) ; sinon TP = 0 ;

if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits) ; sinon SL = 0 ;

ticket=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),5,SL,TP, "SELL",Magic,0,Red) ;

if(ticket < 0) { Print("Error opening SELL order #", GetLastError());}

}}

//---------------

Il est prévu d'ouvrir des commandes supplémentaires en utilisant le code suivant

//---------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)==1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

if (mes conditions d'entrée && GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "Extra Buy",Magic_2,0,Blue) ;

if(ticket < 0) { Print("Error opening BUY order #", GetLastError()) ; }

} }

//---------------

Et c'est là que j'ai été bloqué :). Ce qu'il faut utiliser à la place de GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic). Je pense que je dois utiliser Drawdown_level(Symbol(),OP_BUY,Magic) mais comment l'obtenir...

Aidez-nous, s'il vous plaît, soyez amis.
Z.U. Si vous conseillez, s'il vous plaît garder à l'esprit que je suis encore nubyara que pas trop paresseux pour m'envoyer un peu plus de détails, vous savez, comme si : FOREST THERE, n'oubliez pas d'indiquer la direction <------ || ------>.

Merci de votre attention :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu:

Rien, le fil de discussion est pour MT4, donc vous n'y prêtez pas attention.

Ok, occupe-toi, c'est ennuyeux ici.

Dites-moi où se trouve une branche similaire pour MT5, je vais demander là-bas...

 
Alexander Layzerevich:

Dites-moi où se trouve un fil similaire pour MT5, j'y poserai la question...

Demandez ici. Ici pour les deux langues.
 
Alexey Viktorov:

Est-il possible de préciser

La fonction mise en évidence n'est pas différente de la déclaration de fonction. Ainsi, la fonction est déclarée dans les paramètres d'entrée de la fonction.

Dans MT4, l'appel de fonction de l'indicateur se déroule sans erreur et fonctionne comme prévu(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff) ;) J'ai pensé qu'il pouvait en être de même dans MT5.

Veuillez me conseiller sur la manière de le faire correctement.

 
Alexander Layzerevich:

Dans MT4, l'appel de fonction de l'indicateur se déroule sans erreur et fonctionne comme prévu(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff) ;) J'ai pensé qu'il pouvait en être de même dans MT5.

Pouvez-vous me dire comment le faire correctement ?

Il est impossible d'obtenir les données des Enveloppes dans mql4
 
Artyom Trishkin:
Il est donc impossible d'obtenir les données des enveloppes dans mql4.

Voici le code de MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Tout fonctionne parfaitement. Je voudrais la même chose dans MT5

 
Alexander Layzerevich:

Voici le code de MT4

Tout fonctionne parfaitement. Je voudrais la même chose dans MT5

Eh bien, c'est parce que c'est un code différent et il fonctionnera.
 
Artyom Trishkin:
Et bien c'est parce que c'est un code différent et qu'il va fonctionner.

Correction du code MT5 pour envoyer des données à l'Indicateur :

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIMEFRAMES    TimeFrames    = PERIOD_M5;             // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = MODE_SMMA;             // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE;           // Tип цены
//************************************************************************************************/
void OnTick()
{
double Signal_Buy = (int)Envelopes(Symbol(), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2,  Deviation(1)); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes(string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation(int kanal))
{
  double buf[1];
  int handle=iEnvelopes(Symbol(), tf, period, shift, method, price, Deviation(kanal));
   if(handle<0)
   {
    Print("Failed to create handle ATR, Error: ",GetLastError());
    return(WRONG_VALUE);
   } else
   {
    if(CopyBuffer(handle,buff,0,1,buf)<0)
    {
     Print("Failed to copy data from the indicator ATR, Error: ",GetLastError());
     return(WRONG_VALUE);
    }
   }
   return(buf[0]);
}
//************************************************************************************************/

Mais l'erreur est la même.

 
Alexander Layzerevich:

Voici le code de MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Tout fonctionne parfaitement. Je voudrais la même chose dans MT5

Attention à vos mains :

Dans mon post précédent, ceci est mis en évidence dans votre code

double Deviation(int Time_Frames, int _Kanal)

et dans le code de celui-ci, le message cité est une déclaration de fonction. Également mis en évidence.

Et ceci

Deviation(TimeFrames, Kanal)

Appel d'une fonction utilisateur qui existe. Bien que cette méthode de programmation soit inacceptable pour moi, elle reste compréhensible. Mais comment décrire l'erreur dans ce code, je suis perdu.

Raison: