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

 
Artyom Trishkin:

Il est possible de lire un ticket de commande.

Existe-t-il une fonction similaire

OrderGetTicket();

pour mql4 ?

 
Seric29:

Existe-t-il une fonction similaire

pour mql4 ?

C'est le cas, mais ce n'est pas exactement la même chose. Après avoir sélectionné un ordre, vous devez définir le type d'ordre et le ticket par d'autres fonctions.

OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
 

Bon après-midi.

Il y a une fonction pour ouvrir une grille d'ordres avec le lot incrémenté par i,

J'ai besoin que la grille (lots) soit construite par lot, c'est-à-dire lot1 = 0,01, lot2 = 0,02, lot3 = lot2 + lot 1 ,

comment cela doit-il être décrit dans la fonction fLots() ?

extern int Count       = 4;      //Количество устанавливаемых ордеров
\\


for(i=1;i<=Count;i++)
    {
     {         
      res=OrderSend(Symbol(),OP_BUYLIMIT,fLots()*i,fND(Ask-(Distance*Point+i*Step*Point)),3,fND(BuyPrice-StopLoss*Point), fND(Ask-(Distance*Point+i*Step*Point))+TakeProfit*Point,"",MAGIC,expiration,Blue);    
  
      Sleep(3000);
      if(res<0) 
         {
            Print("ОШИБКА: ",GetLastError()); 
         } else {
            RefreshRates();
         }    
     }
    }
 

Je veux vérifier s'il y a des positions ouvertes dans onInit, mais pour une raison quelconque, je ne peux pas les sélectionner :


   for(int i=PositionsTotal(); i>0; i--)
      {
      smbol = PositionSelect(PositionGetSymbol(i));
      tickett = PositionGetTicket(i);
      
      Print("ticket(",i,") = ", tickett);
      Print(smbol);

      }
   Print("Position Total = ", PositionsTotal());

J'ai compris :


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position totale = 1



 
psyman:

Je veux vérifier s'il y a des positions ouvertes dans onInit, mais pour une raison quelconque, je ne peux pas les sélectionner :


J'ai compris :


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position totale = 1



Il attire tout de suite mon attention :

for(int i=PositionsTotal(); i>0; i--)

Je n'ai pas cherché plus loin parce que ça devrait être comme ça dans un cycle inverse :

for(int i=PositionsTotal()-1; i>=0; i--)
 
Artyom Trishkin:

Cela a tout de suite attiré mon attention :

Je n'ai pas cherché plus loin, car c'est comme ça que ça doit être sur le cycle inverse :

Je préfère cette notation

for(int i = PositionsTotal(); i-- > 0;)
 
Alexey Viktorov:

Je préfère cette entrée

Eh bien... J'en ai montré un compréhensible pour les débutants ;)

 

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 19.02.2008                                                     | //|  Описание : Возвращает суммарный профит в валюте депозита                  | //|             закрытых с определённой даты позиций                           | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента             (""   - любой символ,         | //|                                               NULL - текущий символ)       | //|    op - операция                             (-1   - любая позиция)        | //|    mn - MagicNumber                          (-1   - любой магик)          | //|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     | //+----------------------------------------------------------------------------+ double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0) {   double p=0;   int    i, k=OrdersHistoryTotal();   if (sy=="0") sy=Symbol();   for (i=0; i<k; i++) {     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {       if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {           if (mn<0 || OrderMagicNumber()==mn) {             if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }   return(p); } // код Кима изменил на это и теперь от считает профит за сегодня и обнуляется в полночь double GetProfitFromDateInCurrency1(string sy="0", int op=-1, int mn=-1) {   double p=0;   int    i, k=OrdersHistoryTotal();   datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));   if (sy=="0") sy=Symbol();   for (i=0; i<k; i++) {     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {       if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {           if (mn<0 || OrderMagicNumber()==mn) {             if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }   return(p); }

Bonjour. Aidez-moi à calculer le bénéfice des transactions fermées hier, avant-hier, etc. Je veux faire le bénéfice pour aujourd'hui, le bénéfice pour hier et le bénéfice pour avant-hier.

J'ai copié le code/ pour le calcul du profit d'aujourd'hui.

ou comment définir le profit d'aujourd'hui pour reporter cette valeur sur le profit d'hier et ensuite sur le profit du jour précédent
Dossiers :
 
Lomonosov1991:

Bonjour. Aidez-moi à calculer le bénéfice des transactions fermées hier, avant-hier, etc. Je veux faire le bénéfice pour aujourd'hui, le bénéfice pour hier et le bénéfice pour avant-hier.

Pour calculer le bénéfice d'aujourd'hui, copiez le code/.

ou comment faire passer la valeur du bénéfice d'aujourd'hui au bénéfice d'hier, puis au bénéfice d'avant-hier.

Ajoutez un paramètre supplémentaire à la description de la fonction et modifiez la condition de contrôle :

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart &&  dtstop<=OrderCloseTime()) {
 
Merci à Igor Makan. J'ai créé la fonction hier comme ceci
double GetProfitFromDateInCurrency2(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
J'ai fait la fonction avant-hier comme ceci
double GetProfitFromDateInCurrency3(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60*2;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
Et vous pouvez faire en sorte qu'il ne soit pas remis à zéro les week-ends ? c'est-à-dire que le lundi d'hier était un vendredi. c'est-à-dire supprimer également les week-ends ?
Dossiers :
Screenshot_2.png  844 kb
Raison: