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); }
Ich möchte eine Zeile in eine Datei mit Übersetzungen in eine neue Zeile schreiben, aber es funktioniert nicht, dieser Code ist von hierhttps://www.mql5.com/en/forum/118999
dieser Code schreibt eine Zeile mit Leerzeichen nach jedem Buchstaben, ich brauche einen Ersatz für FileWrite() , aber es funktioniert
Danke, ich würde lieber diesen Artikelhttps://www.mql5.com/ru/articles/1540 verwenden, aber trotzdem würde ich gerne WriteFile() von kernel32.dll verwenden und es mit Zeilenübersetzung funktionieren lassen
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
Artyom Trishkin: Lesen Sie bitte nach, was eine Funktion ist. Dann werden Sie verstehen, dass das im Funktionsrumpf deklarierte Array lokal ist - außerhalb der Sichtweite des restlichen Programms.
Das heißt, ich brauche 3 Funktionen
1) wo ich es erkläre
2) welche ich verwenden werde, um Werte hinzuzufügen
3) mit welchem kann ich sie aus der Datenbank löschen?
Ok, erstellen Sie eine ungültige Funktion, die Bestellungen in ein zweidimensionales Array (Ticket + Lot) schreibt
sich ein Bild von dieser Art machen
if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке { ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ok, erstellen Sie eine ungültige Funktion, die Bestellungen in ein zweidimensionales Array schreibt (Ticket + Lot)
sich ein Bild von dieser Art machen
if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке { ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Bitte sagen Sie mir, warum ich Tickets und Lose in das Array schreiben muss, außer um zu lernen, wie man das Array benutzt? Wenn Sie Ihren Computer ausschalten, stürzt das gesamte System ab, warum sollte man es überhaupt so unzuverlässig machen? Es sei denn, es ist sinnvoll, die Arbeit mit Arrays zu lernen...)
Vladimir Zubov: Sagen Sie mir bitte, warum Sie die Tickets und Lose überhaupt in ein Array schreiben, außer um zu lernen, wie man ein Array benutzt? Wenn Sie Ihren Computer ausschalten, stürzt das gesamte System ab. Warum sollte man es von vornherein so unzuverlässig machen? Es sei denn, es geht darum zu lernen, wie man mit Arrays arbeitet...)
Ok, finden Sie mir 6 Aufträge in einem ungeraden Raster auf einfache Weise oder 8 per Ticketing
Ich brauche es so lange, wie es ein Netz von Aufträgen gibt, dann kann es losgehen.
Nun, das Ziel, das ich in dem obigen Code angegeben habe
Ok, finden Sie mir 6 Aufträge in einem ungeraden Raster auf einfache Weise oder 8 per Ticketing
Ich brauche es so lange, wie das Auftragsnetz besteht, dann kann es losgehen.
Nun, ich habe das Ziel in dem obigen Code angegeben
Hier besteht die Möglichkeit, nach mehreren Parametern zu sortieren, weshalb ein zweidimensionales Array verwendet wird.
Ich hoffe, Sie werden verstehen, wie es zu benutzen, wenn nicht - zu freiberuflich)
double BPosMass[][2]; double SPosMass[][2];
voidOnTick() { // Заполняем массивы 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] );
trader781: wie man vorher einen dimensionslosen Wert erhält, es funktioniert nicht mit leeren Werten
Sie ist ohnehin dimensionslos, aber sie ist zweidimensional, und man kann eine dimensionslose Anzahl von Elementen in zwei Dimensionen unterbringen.
Was tun Sie überhaupt, haben Sie eine Vorstellung davon, was das Ergebnis Ihrer Arbeit sein soll? Oder denken Sie sich die Logik einfach aus, während Sie unterwegs sind?
{
// 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);
}
Ich möchte eine Zeile in eine Datei mit Übersetzungen in eine neue Zeile schreiben, aber es funktioniert nicht, dieser Code ist von hierhttps://www.mql5.com/en/forum/118999
dieser Code schreibt eine Zeile mit Leerzeichen nach jedem Buchstaben, ich brauche einen Ersatz für FileWrite() , aber es funktioniert
Lesen Sie bitte nach, was eine Funktion ist. Dann werden Sie verstehen, dass das im Funktionsrumpf deklarierte Array lokal ist - außerhalb der Sichtweite des restlichen Programms.
Das heißt, ich brauche 3 Funktionen
1) wo ich es erkläre
2) welche ich verwenden werde, um Werte hinzuzufügen
3) mit welchem kann ich sie aus der Datenbank löschen?
oder?
Das heißt, ich brauche 3 Funktionen
1) wo ich es erkläre
2) welche ich verwenden werde, um Werte hinzuzufügen
3) mit welchem kann ich sie aus der Datenbank löschen?
richtig?
Lesen Sie es sorgfältig.
Ok, erstellen Sie eine ungültige Funktion, die Bestellungen in ein zweidimensionales Array (Ticket + Lot) schreibt
sich ein Bild von dieser Art machen
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ok, erstellen Sie eine ungültige Funktion, die Bestellungen in ein zweidimensionales Array schreibt (Ticket + Lot)
sich ein Bild von dieser Art machen
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Sagen Sie mir bitte, warum Sie die Tickets und Lose überhaupt in ein Array schreiben, außer um zu lernen, wie man ein Array benutzt? Wenn Sie Ihren Computer ausschalten, stürzt das gesamte System ab. Warum sollte man es von vornherein so unzuverlässig machen? Es sei denn, es geht darum zu lernen, wie man mit Arrays arbeitet...)
Ok, finden Sie mir 6 Aufträge in einem ungeraden Raster auf einfache Weise oder 8 per Ticketing
Ich brauche es so lange, wie es ein Netz von Aufträgen gibt, dann kann es losgehen.
Nun, das Ziel, das ich in dem obigen Code angegeben habeOk, finden Sie mir 6 Aufträge in einem ungeraden Raster auf einfache Weise oder 8 per Ticketing
Ich brauche es so lange, wie das Auftragsnetz besteht, dann kann es losgehen.
Nun, ich habe das Ziel in dem obigen Code angegebenHier besteht die Möglichkeit, nach mehreren Parametern zu sortieren, weshalb ein zweidimensionales Array verwendet wird.
Ich hoffe, Sie werden verstehen, wie es zu benutzen, wenn nicht - zu freiberuflich)
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()
}
Hier besteht die Möglichkeit, nach mehreren Parametern zu sortieren, weshalb ein zweidimensionales Array verwendet wird.
Ich hoffe, Sie verstehen, wie man es benutzt, wenn nicht, gehen Sie zu freelance)
wie man vorher einen dimensionslosen Wert erhält, es funktioniert nicht mit leeren Werten
Sie ist ohnehin dimensionslos, aber sie ist zweidimensional, und man kann eine dimensionslose Anzahl von Elementen in zwei Dimensionen unterbringen.
Was tun Sie überhaupt, haben Sie eine Vorstellung davon, was das Ergebnis Ihrer Arbeit sein soll? Oder denken Sie sich die Logik einfach aus, während Sie unterwegs sind?