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

 
Aliaksandr Kryvanos:
bool WriteToFile(int FileHandle,string DataToWrite)
  {
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
   int BytesWritten[1]={0};

// Get the length of the string
   int szData=StringLen(DataToWrite);

// Do the write
   WriteFile(FileHandle,DataToWrite,szData,BytesWritten,0);

// Return true if the number of bytes written matches the expected number
   return (BytesWritten[0] == szData);
  }

Je veux écrire une ligne dans le fichier avec des traductions vers une nouvelle ligne, mais ça ne marche pas, ce code vient d'icihttps://www.mql5.com/en/forum/118999.

Ce code écrit une ligne avec des espaces après chaque lettre, j'ai besoin d'un remplacement pour FileWrite() mais cela fonctionne.

Lisez-le ici.
 
Merci, je préfère utiliser cet articlehttps://www.mql5.com/ru/articles/1540 mais j'aimerais tout de même utiliser WriteFile() de kernel32.dll et le faire fonctionner avec la traduction de ligne.
Файловые операции через WinAPI
Файловые операции через WinAPI
  • 2008.07.03
  • MetaQuotes Software Corp.
  • www.mql5.com
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
 
Artyom Trishkin:
Veuillez lire ce qu'est une fonction. Vous comprendrez alors que le tableau déclaré dans le corps de la fonction sera local - hors de vue du reste du programme.

C'est-à-dire que j'ai besoin de 3 fonctions

1) où je le déclare

2) lequel je vais utiliser pour y ajouter des valeurs

3) lequel je dois utiliser pour les supprimer de la base de données ?

n'est-ce pas ?

 
trader781:

C'est-à-dire que j'ai besoin de 3 fonctions

1) où je le déclare

2) lequel je vais utiliser pour y ajouter des valeurs

3) lequel je dois utiliser pour les supprimer de la base de données ?

correct ?

Lisez attentivement ce qui suit.
Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Учёт ордеров - Создание обычной программы - Учебник по MQL4
 
Alekseu Fedotov:
Lisez-le attentivement.

Ok, créez une fonction void qui écrira les commandes dans un tableau à deux dimensions (ticket + lot).

obtenir une photo de ce type

            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
               Функция записи();
              }  
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно

 
trader781:

Ok, créez une fonction void qui écrira les commandes dans un tableau à deux dimensions (ticket + lot).

obtenir une photo de ce type

            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
               Функция записи();
              }  
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно

Dites-moi s'il vous plaît pourquoi je dois écrire des billets et des lots dans le tableau, en plus d'apprendre à utiliser le tableau ? Si vous éteignez votre ordinateur, l'ensemble du réseau va se bloquer, pourquoi le rendre si peu fiable en premier lieu ? À moins, bien sûr, qu'il soit utile d'apprendre à travailler avec des tableaux...)
 
Vladimir Zubov:
Dites-moi, s'il vous plaît, pourquoi écrire les billets et les lots dans un tableau, si ce n'est pour apprendre à utiliser un tableau ? Lorsque vous éteignez votre ordinateur, tout le réseau se bloque, pourquoi le rendre si peu fiable ? A moins bien sûr que le but soit d'apprendre à travailler avec des tableaux...)

ok, trouvez-moi 6 commandes dans une grille inégale de la manière la plus simple, ou 8 par billetterie

J'en ai besoin tant qu'il y a une grille de commandes, alors laissez faire.

Eh bien, le but que j'ai indiqué dans le code ci-dessus
 
trader781:

ok, trouvez-moi 6 commandes dans une grille inégale de la manière la plus simple, ou 8 par billetterie

J'en ai besoin tant que la grille d'ordre existe, puis je laisse faire.

Eh bien, j'ai énoncé l'objectif dans le code ci-dessus

Ici, il est possible de trier selon plusieurs paramètres, c'est pourquoi un tableau à deux dimensions est utilisé.

J'espère que vous comprendrez comment l'utiliser, sinon - à la freelance)

double BPosMass[][2];
double SPosMass[][2];

void OnTick()
{
// Заполняем массивы
int b=-1,s=-1; // Объявим переменные с минусом
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic<0)) {
     if(OrderType()==OP_BUY) {
      b++;
       ArrayResize(BPosMass,b+1);
       BPosMass[b][0]= (int)OrderOpenPrice();// Для сортировки = можно сортировать по: OrderProfit(), OrderLots(), OrderTicket(), OrderOpenTime()
       BPosMass[b][1]= OrderTicket(); // Для чтения
     }
     if(OrderType()==OP_SELL) {
      s++;
       ArrayResize(SPosMass,s+1);
       SPosMass[s][0]= (int)OrderOpenPrice();// Для сортировки = можно сортировать по: OrderProfit(), OrderLots(), OrderTicket(), OrderOpenTime()
       SPosMass[s][1]= OrderTicket(); // Для чтения
     }
  }}} // конец записи массив

// Читаем отсортированный массив с тикетами
// Buy
  if(b>0) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
    ArraySort(BPosMass, WHOLE_ARRAY, 0, MODE_ASCEND); // Отсортируем по первому измерению
    // Работа с полученными данными
    Comment("Самый старый Buy тикет: ",    BPosMass[0][1],
            "\nПоследний Buy тикет: ",     BPosMass[b][1],
            "\nПредпоследний Buy тикет: ", BPosMass[b-1][1]
           );

  } // end Buy

// Sell
  if(s>0) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
    ArraySort(SPosMass, WHOLE_ARRAY, 0, MODE_ASCEND); // Отсортируем по первому измерению
    // Работа с полученными данными
    Comment("Самый старый Sell тикет: ",    SPosMass[0][1],
            "\nПоследний Sell тикет: ",     SPosMass[s][1],
            "\nПредпоследний Sell тикет: ", SPosMass[s-1][1]
           );

  } // end Sell
  
// Конец функции OnTick()
}
 
Vitaly Muzichenko:

Ici, il est possible de trier selon plusieurs paramètres, c'est pourquoi on utilise un tableau à deux dimensions.

J'espère que vous comprenez comment l'utiliser, si non, allez à freelance)

double BPosMass[][];
Comment obtenir au préalable une valeur sans dimension, cela ne fonctionne pas avec des valeurs vides.
 
trader781:
comment obtenir au préalable une valeur sans dimension, cela ne fonctionne pas avec des valeurs vides

Il est sans dimension tel quel, mais il est bidimensionnel, et vous pouvez mettre un nombre sans dimension d'éléments dans deux dimensions.

Que faites-vous de toute façon, avez-vous une idée du résultat du travail que vous faites ? Ou bien vous inventez la logique au fur et à mesure ?