[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 59

 
Merci beaucoup à tous, tout fonctionne comme il se doit ! J'aimerais avoir des smileys, j'aimerais en mettre un tas :)
 
oleg_felix: Comment puis-je définir le cadre temporel dans lequel les transactions seront exécutées ? (heure de début et heure de fin)

voir ici : https://www.mql5.com/ru/forum/135030

 
Ça a aidé, merci, c'est réglé à temps !
 

Veuillez me dire comment écrire une commande simple :

- pourtransférer un ordre vers une position sans perte pour un nombre de pips donné

 
oleg_felix:

Pouvez-vous me dire comment écrire une commande simple :

- Définissez dans un ordre ouvert, un stoploss pour atteindre le seuil de rentabilité (en tenant compte de l'écart) à un certain montant de profit dans le trade.

Voici une fonction pour convertir tous les ordres avec le même numéro magique en noir et blanc, essayez de l'expérimenter.


extern int     LevelWLoss        = 100;       // Уровень безубытка в пп
extern int     LevelProfit       = 300;       // Уровень профита в пп
//+----------------------------------------------------------------------------+
//|  Перенос стопа в безубыток                                                 |
//+----------------------------------------------------------------------------+
void MovingInWL(int Magic) {
  int i, k;
  string sym;
  double ord_open,ord_TP,ord_SL;
  
  k = OrdersTotal()-1;
  sym = Symbol();
  for (i=k; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sym && OrderMagicNumber()==Magic) {
        ord_open = OrderOpenPrice();
        ord_TP   = OrderTakeProfit();
        ord_SL   = OrderStopLoss();
        if (OrderType()==OP_BUY) {
          if (NormalizeDouble(ord_SL,Digits)==NormalizeDouble(0,Digits) || 
              NormalizeDouble(ord_SL-ord_open,Digits)<NormalizeDouble(LevelWLoss*Point,Digits)) {
            if (NormalizeDouble(Bid-ord_open,Digits)>NormalizeDouble(LevelProfit*Point,Digits)) {
              OrderModify(OrderTicket(), ord_open, NormalizeDouble(ord_open+LevelWLoss*Point,Digits), ord_TP, 0, Yellow);
            }
          }
        }
        if (OrderType()==OP_SELL) {
          if (NormalizeDouble(ord_SL,Digits)==NormalizeDouble(0,Digits) || 
              NormalizeDouble(ord_open-ord_SL,Digits)<NormalizeDouble(LevelWLoss*Point,Digits)) {
            if (NormalizeDouble(ord_open-Ask,Digits)>NormalizeDouble(LevelProfit*Point,Digits)) {
              OrderModify(OrderTicket(), ord_open, NormalizeDouble(ord_open-LevelWLoss*Point,Digits), ord_TP, 0, Yellow);
            }
          }
        }
      }
    }
  }
return;
}
//_______________________________________________________________________
 

IgorM


Voici le code de mon EA : Où dois-je insérer la fonction Breakeven ?

extern int tp = 0 ;

extern int sl = 0 ;

extern int BeginHour = 0 ; // heure de début

extern inttern EndHour = 0 ; // heure de fin

int start()

{

//----

if(OrdersTotal()==0 && Hour() >= BeginHour && Hour() < EndHour && Close[1]<Open[1] && High[1]<Bid) // vérifier si le prix de la barre précédente est inférieur à celui de l'ouverture. Ordre d'achat lorsque le prix de atteint le prix Bid de la barre actuelle, le niveau haut de la barre précédente.

OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-sl*Point,Ask+tp*Point,"",777,0,Red) ;

if(OrdersTotal()==0 && Hour() >= BeginHour && Hour() < EndHour && Close[1]>Open[1] && Low[1]>Bid) // vérifier si l'ordre est ouvert et si le prix de clôture de la barre précédente est inférieur au prix d'ouverture. Ordre d'achat lorsque le prix atteint le prix de la barre actuelle Bid , niveau élevé de la barre précédente.

OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",777,0,Red) ;

//----

retour(0) ;

}

 
oleg_felix:

Voici le code de mon EA : Où dois-je placer la fonction Breakeven ?

Je pense qu'à ce stade, il suffit d'ajouter ma fonction à la fin de votre code et de faire ce qui suit dans votre code au moins :

si(OrdersTotal()>0) MovingInWL(777) ;

Ajoutez au début de votre code

extern int LevelWLoss = 100 ; // Niveau de seuil de rentabilité en pips
extern int LevelProfit = 300 ; // Niveau de profit en pips

Je doute que vous puissiez résoudre ce problème par vous-même :)

 
DmitriyN:
Vous pouvez. Il est également possible de gérer un compte à partir d'un ordinateur installé au travail, ou vice versa, lorsque vous êtes à la maison.
Merci.
 

J'ai essayé de refaire la fonction de quelqu'un d'autre, et je me suis "un peu" planté, voici un bout de code :

string FileName = test.txt;

int FileHandle=FileOpen(FileName,FILE_READ);
  if (FileHandle < 0)
     {
       Print("Файл не найден.");
     }
  
  string strInfo;
  int i;
  if (FileHandle>0)
     {
     while (i<20)
        {
          if (FileHandle == 1)
            {
            string strInfo1=FileReadString(FileHandle);
            }else{
                 if (FileHandle == 2)
                    {
                    string strInfo2=FileReadString(FileHandle);
                    }else{
                         if (FileHandle == 3)
                              {
                            string strInfo3=FileReadString(FileHandle);
                              }else{
                                   if (FileHandle == 4)
                                       {
                                       string strInfo4=FileReadString(FileHandle);
                                       }else{
                                            if (FileHandle == 5)
                                               {
                                               string strInfo5=FileReadString(FileHandle);
                                               }else{
                                                    if (FileHandle == 6)
                                                       {
                                                       string strInfo6=FileReadString(FileHandle);
                                                       }else{
                                                            if (FileHandle == 7)                                                            
                                                               {
                                                               string strInfo7=FileReadString(FileHandle);
                                                               }else{
                                                                    if (FileHandle == 8)                                                                    
                                                                        {
                                                                        string strInfo8=FileReadString(FileHandle);
                                                                        }else{
                                                                             if (FileHandle == 9)
                                                                                 {
                                                                                 string strInfo9=FileReadString(FileHandle);
                                                                                 }else{
                                                                                      if (FileHandle == 10)
                                                                                         {
                                                                                         string strInfo10=FileReadString(FileHandle);
                                                                                         }else{
                                                                                              Print("Ошибка! В файле должно быть не более 10 записей!");
                                                                                              }
                                                                                      }
                                                                             }
                                                                    }
                                                            }
                                                    }
                                            }
                              
                                   }
                          }
                   
                               
             
          }
          if (StrToInteger(strInfo1)==12345||StrToInteger(strInfo2)==12345||
              StrToInteger(strInfo3)==12345||StrToInteger(strInfo4)==12345||
              StrToInteger(strInfo5)==12345||StrToInteger(strInfo6)==12345||
              StrToInteger(strInfo7)==12345||StrToInteger(strInfo8)==12345||
              StrToInteger(strInfo9)==12345||StrToInteger(strInfo10)==12345)
          {
          isNumInFile = TRUE;
          }

        if (FileIsEnding(FileHandle) && isNumInFile == FALSE)
           {
           Print("Достигнут конец файла, искомое значение не найдено");
           break;
           }
        i++;

        if (i>100) break;
        }
     FileClose(FileHandle);
     }

Je voulais qu'il trouve une certaine valeur dans les 10 premières lignes du fichier test.txt et si le nombre de lignes est supérieur à 10, il donnera l'erreur "Error ! Il ne devrait pas y avoir plus de 10 enregistrements dans le fichier !", mais pour une raison quelconque, il passe toujours par tous les enregistrements, s'il vous plaît aidez-moi à le corriger, et si vous pouvez simplifier le code et le faire comme une fonction distincte.

 

S'il vous plaît, expliquez d'une manière simple, ce qu'est le transfert de paramètres par référence. J'ai lu la documentation, mais j'ai seulement compris que c'est possible et qu'après l'identification de la variable, il est obligatoire de mettre le modificateur &. Ce serait formidable si l'explication était accompagnée d'un petit programme avec des explications... Quelle est la différence entre le passage habituel de paramètres et le passage de paramètres par référence ?