Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 67
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
{
// 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.
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 ?
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-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
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ok, créez une fonction void qui écrira les commandes dans un tableau à deux dimensions (ticket + lot).
obtenir une photo de ce type
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
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-dessusok, 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-dessusIci, 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 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()
}
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)
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 ?