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

 
artmedia70:

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

Renvoie l'indice de la plus haute valeur trouvée (décalage par rapport à la barre actuelle).
Paramètres :
symbole - Nom du symbole dont les données seront recherchées. NULL signifie le symbole actuel.
cadre temporel - Période. Peut être l'une des périodes du graphique. 0 indique la période du graphique actuel.
type - L'identifiant de la série chronologique. Peut être n'importe quel identifiant de série temporelle.
compter - Nombre d'éléments de la série temporelle (dans le sens de la barre actuelle vers l'indice ascendant), parmi lesquels la recherche doit être effectuée.
commencer - L'indice (décalage par rapport à la barre actuelle) de la barre de départ à partir de laquelle la recherche de la valeur la plus élevée commencera. Les valeurs négatives sont ignorées et remplacées par une valeur nulle.
Exemple :


Merci beaucoup. Je ne pense pas qu'il y aura d'autres questions.
 
ask:

Ce qui pourrait ne pas être clair pour une personne - je ne sais pas. Je ne sais pas non plus ce qui a provoqué l'agression et la grossièreté (ils auraient pu simplement l'ignorer), si d'autres auraient réagi ou s'il se serait remis sur pied - est-ce que cela revient au même pour vous ?

Vous ne devriez pas penser à Alexei de cette façon. Il est l'une des personnes les plus bienveillantes ici. Il ne voulait pas vous offenser. Tout le monde est envoyé chez un télépathe s'il ne comprend pas le problème. C'est une blague locale qui a du sens.
 
Reshetov:

Les voici (il y a beaucoup plus d'erreurs dans votre code mais celles-ci ne passeront même pas à travers le compilateur) : De plus, même si vous changez le code en quelque chose de plus sain du point de vue du compilateur

elle sera toujours théoriquement fausse sans normalisation préalable des valeurs réelles avant la comparaison. De plus, la normalisation peut échouer si le prix change de plus d'un pip en un tick et que votre condition n'est pas respectée.

La façon correcte de rechercher la condition de croisement est la suivante


P.S. Il est assez facile de trouver l'endroit où se trouve l'erreur après la compilation dans MetaTrader :

1. Dans l'onglet "Toolbox", dans la colonne "File", indiquez le numéro de ligne et le numéro du symbole, dans lequel le compilateur a détecté une erreur, séparés par des virgules.

2. Si vous double-cliquez sur le message d'erreur dans le champ "Description" du même onglet, le curseur de l'éditeur sautera à l'endroit où le compilateur a détecté cette même erreur.


Merci pour les conseils.

 
Bonjour et respect à tous les membres du forum ! Si vous le pouvez, veuillez nous conseiller. Lorsque vous éteignez la plateforme, les données du magazine sont nécessairement effacées, n'est-ce pas ? Et comment écrire les impressions ou toute autre donnée de sortie de l'Expert Advisor, de sorte que lorsque vous éteignez l'ordinateur, elles soient enregistrées dans un bloc-notes, ou ailleurs ? N'est-ce pas trop compliqué et est-ce possible ?
 
dkfl.zrjdktdbx:
Bonjour et respect à tous les membres du forum ! Si vous le pouvez, veuillez nous conseiller. Lorsque vous éteignez la plateforme, les données du magazine sont nécessairement effacées, n'est-ce pas ? Et comment écrire les impressions ou toute autre donnée de sortie de l'Expert Advisor, de sorte que lorsque vous éteignez l'ordinateur, elles soient enregistrées dans un bloc-notes, ou ailleurs ? N'est-ce pas trop compliqué et est-ce possible ?
Eh bien, si vous regardez les journaux dans le dossier du programme, vous y trouverez beaucoup de choses intéressantes.
 
Merci !
 
Pouvez-vous me dire comment calculer une perte éventuelle dans la devise du dépôt en ayant un cours d'ouverture et un cours stop loss ?
 
sss2019:
Dites-moi comment calculer une perte éventuelle dans la devise du dépôt avec le prix d'ouverture de l'ordre et le prix du stop loss.
//--------------------------------------------------------------------
// Функция модификации StopLoss всех ордеров указанного типа
// Глобальные переменные:
// Mas_Ord_New             Массив ордеров последний известный
// int TralingStop         Значение TralingStop(количество пунктов)
//--------------------------------------------------------------------
void SampleTrailing_texbook ( int Tip, double V_StopLossPips, double V_TakeProfitPips)
  {
   int Ticket;                      // Номер ордера
   double
   Price,                           // Цена открытия рыночного ордера
   TS,                              // TralingStop (относит.знач.цены)
   SL,                              // Значение StopLoss ордера
   TP;                              // Значение TakeProfit ордера
   double difference; //разность в пунктах    
   double Profit;
   
   bool Modify;                     // Признак необходимости модифи.
//----------------------------------------------------------------------
      PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));      
      Print("PointValue = ",PointValue, " Point  = ", DoubleToStr(Point, Digits) );
      Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL ); // мин уровень трала
      Modify=false;                       // Пока не назначен к модифи
      
      Price = OrderOpenPrice();           // Цена открытия ордера
      SL    = V_StopLossPips;             // Значение StopLoss ордера
      TP    = V_TakeProfitPips;           // Значение TakeProft ордера
      Ticket= OrderTicket();              // Номер ордера
      
      if (TralingStop<Level_new)          // Если меньше допустимого..
         TralingStop=Level_new;           // .. то допустимый
         TS=TralingStop*Point;            // То же в относит.знач.цены
      //-----------------------------------------------------------------
      switch(Tip)                         // Переход на тип ордера
        {
         case 0 :                         // Ордер Buy
            difference = NormalizeDouble (Bid-TS - OrderOpenPrice(), Digits)/Point;               
            Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)
            if (trlinloss==false){         // тралим только профит
               if (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз 
                 if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && NormalizeDouble(Price,Digits)< NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            } 
             else {                         // тралим с зоны лоссов
               if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
             } 
            break;                        // Выход из switch
         
         
         case 1 :                          // Ордер Sell
             difference = NormalizeDouble (OrderOpenPrice()-(Ask+TS),Digits)/Point;
             Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)             
             if (trlinloss==false) {          // тралим с уровня профита по ордеру
                if (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз            
                   if ((NormalizeDouble(SL,Digits)>  // Если выше желаемого..
                        NormalizeDouble(Ask+TS,Digits)||
                        NormalizeDouble(SL,Digits)==0) && NormalizeDouble(Price,Digits)>NormalizeDouble(Ask+TS,Digits)) //.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            }            
            else {                        // тралим с зоны лоссов
          
            if (NormalizeDouble(SL,Digits)>// Если выше желаемого..
               NormalizeDouble(Ask+TS,Digits)||
               NormalizeDouble(SL,Digits)==0)//.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            }  
        }                                 // Конец switch
      if (Modify==false)                  // Если его не надо модифи..
         return;                        // ..то идём по циклу дальше
      bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!
      //----------------------------------------------------------------------
      if (Ans==false)                     // Не получилось :( 
        {                                 // Поинтересуемся ошибками:
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            return;                       // .. то уходим.
        }
}                                         // Выход из пользов. функции


Cette fi- fion de commerçant tirée du manuel a été retravaillée par moi pour mes propres besoins. Ici, le calcul du profit sur un volume donné de lots, au niveau du chalut et la valeur du profit au-dessus de la perte totale des positions perdantes consécutives fermées précédentes - le chalut est activé - vous aurez tout similaire, seulement pour appliquer non pas un profit, comme ici, mais une perte - selon vos besoins.

Faites attention au calcul des variables d'achat et de vente :

double difference; //разность в пунктах    
double Profit; 
PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));
Faites tout de la même manière et c'est tout.
 
Je ne comprends donc toujours pas comment trouver la valeur du point dans la monnaie de dépôt?
 
sss2019:
Je ne comprends donc toujours pas comment trouver la valeur du point dans la monnaie de dépôt ?

voir ce calcul - faire ANALOGUE. Tout.