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

 
Alexandr Sokolov #:


2) Si un tableau est indexé à l'envers, les nouvelles cellules devraient apparaître au début du tableau, ce qui n'est pas le cas.

Pourquoi les nouvelles cellules doivent-elles apparaître au début d'un tableau ? - Si je ne me trompe pas, il devrait être écrit dans l'aide, que lorsque vous utilisez ArraySetAsSeries(), le tableau ne sera pas physiquement réalloué en mémoire, mais l'indexation inverse sera appliquée lors de l'accès aux éléments du tableau.

SZZ : votre exemple est compliqué, je l'ai esquissé :

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   int arr1[] = {1, 2, 3, 4, 5};
   int arr2[] = {1, 2, 3, 4, 5};
   ArraySetAsSeries(arr2, true);
   Print("Start size : ", ArraySize(arr1), " , ", ArraySize(arr2));
   Print("Resize : ", ArrayResize(arr1, 10), " , ", ArrayResize(arr2, 10));
   string s1 = "", s2 = "";
   for(int i = 0, j = 0; i < ArraySize(arr1) && j < ArraySize(arr2); i++, j++)
   {
      s1 += (string)arr1[i] + " , ";
      s2 += (string)arr2[j] + " , ";
   }
   Print("arr1 = ", s1);
   Print("arr2 = ", s2);
}

2022.04.18 21:31:59.223 tst EURUSD,H1 : arr2 = 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1 : arr1 = 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1 : Redimensionnement : 10 , 10

2022.04.18 21:31:59.223 tst EURUSD,H1 : Taille de départ : 5 , 5

 
Veuillez indiquer comment cela fonctionne dans MT5
iClose(NULL,PERIOD_CURRENT,shift)

Je reçois l'erreur'iClose' - appel ambigu à une fonction surchargée.

En général, l'objectif est de sélectionner le TF.

Je voulais le choisir avec MT4 par habitude.

if(iClose(NULL, TF(), 1) < iOpen(NULL, TF(), 1))

int TF()
  {
   int tf;
   switch(TF)
     {
      case 1 :
         tf = 1;
         break;
      case 2 :
         tf = 5;
         break;
      case 3 :
         tf = 15;
         break;
      case 4 :
         tf = 30;
         break;
      case 5 :
         tf = 60;
         break;
      case 6 :
         tf = 240;
         break;
      case 7 :
         tf = 1440;
         break;
      case 8 :
         tf = 10080;
         break;
      case 9 :
         tf = 43200;
         break;
      default:
         tf = 10;
         Print(tf);
     }
   return(tf);
  }

Mais j'ai échoué.

 
Александр 'iClose' - appel ambigu à une fonction surchargée.

En général, l'objectif est de sélectionner le TF.

Je voulais le choisir avec MT4 par habitude.

Mais j'ai échoué.

périodes dans MT5

if(Period()==1) return "M1" ;

if(Period()==2) return "M2" ;

if(Period()==3) return "M3" ;

if(Period()==4) return "M4" ;

if(Period()==5) return "M5" ;

if(Period()==6) return "M6" ;

if(Period()==10) return "M10" ;

if(Period()==12) return "M12" ;

if(Period()==15) return "M15" ;

if(Period()==20) return "M20" ;

if(Period()==30) return "M30" ;

if(Period()==16385) return "H1" ;

if(Period()==16386) return "H2" ;

if(Period()==16387) return "H3" ;

if(Period()==16388) return "H4" ;

if(Period()==16390) return "H6" ;

if(Period()==16392) return "H8" ;

if(Period()==16396) return "H12" ;

if(Period()==16408) return "Daily" ;

if(Period()==32769) return "Weekly" ;

if(Period()==49153) return "Monthly" ;

 
Andrei Sokolov #:

périodes dans mt5

if(Period()==1) return "M1" ;

if(Period()==2) return "M2" ;

if(Period()==3) return "M3" ;

if(Period()==4) return "M4" ;

if(Period()==5) return "M5" ;

if(Period()==6) return "M6" ;

if(Period()==10) return "M10" ;

if(Period()==12) return "M12" ;

if(Period()==15) return "M15" ;

if(Period()==20) return "M20" ;

if(Period()==30) return "M30" ;

if(Period()==16385) return "H1" ;

if(Period()==16386) return "H2" ;

if(Period()==16387) return "H3" ;

if(Period()==16388) return "H4" ;

if(Period()==16390) return "H6" ;

if(Period()==16392) return "H8" ;

if(Period()==16396) return "H12" ;

if(Period()==16408) return "Daily" ;

if(Period()==32769) return "Weekly" ;

if(Period()==49153) return "Monthly" ;

Merci !

 
Александр #:

Merci !

Pourquoi n'aimez-vous pas ENUM_TIMEFRAMES?

Et vous pouvez mettre des variables en entrée sous forme d'énumération et les sélectionner comme vous le souhaitez... Pourquoi faire un tel gâchis ? Et dans mql4, cette énumération est disponible depuis longtemps...

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Pourquoi n'aimez-vous pas ENUM_TIMEFRAMES?

Et vous pouvez mettre des variables en entrée comme une énumération et les sélectionner comme vous le souhaitez... Pourquoi devez-vous vous donner tout ce mal ? Et dans mql4 cette énumération est disponible depuis des lustres...

+

 
Alexey Viktorov #:

Pourquoi n'aimez-vous pas ENUM_TIMEFRAMES?

Et vous pouvez mettre des variables en entrée sous forme d'énumération et les sélectionner comme vous le souhaitez... Pourquoi faire un tel gâchis ? Et dans mql4, cette énumération est également disponible depuis longtemps...

Merci ! Je n'en avais aucune idée.

 

Chers collègues, veuillez nous indiquer le meilleur algorithme pour trouver le prix de l'ordre limite précédemment placé le plus proche du prix actuel - respectivement à la limite de vente ascendante, à l'offre d'achat et à la limite de vente.

la limite d'achat qui est la plus proche du bas.

Ce f-iio compte la quantité mais j'ai besoin du PRIX de l'ordre limite précédemment placé pour que le f-iio retourne...


Jusqu'à présent, j'utilise le prix minimum pour la limite de vente et le prix maximum pour la limite d'achat.....

int Price_of_orders(int Magic_) // цена ближайшего ордера к цене по магику
  {
//--- получим общее количество ордеров
   int ord = 0; // итоговое значение кол-ва ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
     {
      ResetLastError();
      //--- скопируем в кэш ордер по его номеру в списке
      ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
        {
         double price_open  =OrderGetDouble(ORDER_PRICE_OPEN);
         datetime time_setup=OrderGetInteger(ORDER_TIME_SETUP);
         string symbol      =OrderGetString(ORDER_SYMBOL);
         long magic_number  =OrderGetInteger(ORDER_MAGIC);
         if(magic_number==Magic_)
           {
            //  обработаем ордер с заданным ORDER_MAGIC - посчитаем
            ord++;
           }
         PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
        }
      else         // вызов OrderGetTicket() завершился неудачно
        {
         PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
        }

     }
   return (ord);   
  }
 
Roman Shiredchenko #:

Chers collègues, veuillez nous indiquer le meilleur algorithme pour trouver le prix de l'ordre limite précédemment placé le plus proche du prix actuel - respectivement de la limite de vente ascendante, de l'offre d'achat et de la limite de vente.

la limite d'achat qui est la plus proche du bas.

Ce f-iio compte la quantité mais j'ai besoin du PRIX de l'ordre limite précédemment placé pour que le f-iio retourne...


Jusqu'à présent, j'utilise le prix minimum pour la limite de vente et le prix maximum pour la limite d'achat.....

Je veux enregistrer les prix requis avec les billets et peut-être autre chose, par exemple le temps, dans ma structure ou tableau et trier immédiatement après l'ajout par prix. Par ressources, si vous cherchez peu souvent, c'est la même chose ou un peu plus cher, et si souvent, il vaut mieux s'en souvenir. Bien sûr, si vous n'avez pas 100500 commandes), cela peut être trop cher. En général, le tri dans une structure ou un tableau multidimensionnel n'est résolu que pour le premier indice malheureusement.

Parfois, j'utilise plusieurs tableaux unidimensionnels avec les mêmes index, billets, heure, prix. Et recherche par index des biens nécessaires. Par exemple, nous obtenons l'indice d'un temps plus court ou d'un prix plus élevé et nous obtenons le ticket de l'ordre nécessaire. Bien sûr, c'est une béquille, mais cela fonctionne clairement.

 

Une question s'est posée, non trouvée dans la recherche. Est-il possible d'activer l'algotraining à partir de l'EA ? Obtenir les propriétés du terminal, qu'il soit activé ou non.

Et est-il possible d'exécuter un EA dans un terminal avec l'algotrading activé et un autre non.