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); }
Voglio scrivere una linea nel file con le traduzioni in una nuova linea, ma non funziona, questo codice è da quihttps://www.mql5.com/en/forum/118999
questo codice scrive una linea con spazi dopo ogni lettera, ho bisogno di una sostituzione per FileWrite() ma funziona
Grazie, preferirei usare questo articolohttps://www.mql5.com/ru/articles/1540 ma comunque, vorrei usare WriteFile() da kernel32.dll e farlo funzionare con la traduzione delle linee
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
Artyom Trishkin: Per favore, leggete cos'è una funzione. Allora capirete che l'array dichiarato nel corpo della funzione sarà locale - fuori dalla vista del resto del programma.
Ok, fate una funzione void che scriverà gli ordini in un array bidimensionale (biglietto + lotto)
ottenere un'immagine di questo tipo
if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке { ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ok, fate una funzione void che scriverà gli ordini in un array bidimensionale (biglietto + lotto)
ottenere un'immagine di questo tipo
if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке { ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Per favore, ditemi perché ho bisogno di scrivere i biglietti e i lotti nell'array, oltre a imparare a usare l'array? Se si spegne il computer, l'intero array si blocca, perché renderlo così inaffidabile in primo luogo? A meno che, naturalmente, non abbia senso imparare a lavorare con gli array...)
Vladimir Zubov: Ditemi, per favore, perché scrivere i biglietti e i lotti in un array, se non per imparare a usare un array? Quando si spegne il computer, l'intero array si blocca, perché renderlo così inaffidabile in primo luogo? A meno che, naturalmente, lo scopo non sia quello di imparare a lavorare con gli array...)
ok, trovami 6 ordini in una griglia irregolare nel modo più semplice, o 8 tramite ticketing
Ne ho bisogno finché c'è una griglia di ordini, poi lasciamola rotolare.
Bene, l'obiettivo che ho dichiarato nel codice sopra
ok, trovami 6 ordini in una griglia irregolare nel modo più semplice, o 8 tramite ticketing
Mi serve finché esiste la griglia dell'ordine, poi lasciamola rotolare.
Bene, ho dichiarato l'obiettivo nel codice sopra
Qui, c'è la possibilità di ordinare per diversi parametri, ecco perché viene usato un array bidimensionale.
Spero che capirete come usarlo, se no - a freelance)
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: come ottenere preventivamente un adimensionale, non funziona con valori vuoti
È senza dimensione così com'è, ma è bidimensionale, e si può mettere un numero senza dimensione di elementi in due dimensioni.
Cosa stai facendo comunque, hai un'idea di quale dovrebbe essere il risultato del lavoro che fai? O ti stai inventando la logica man mano che vai avanti?
{
// 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);
}
Voglio scrivere una linea nel file con le traduzioni in una nuova linea, ma non funziona, questo codice è da quihttps://www.mql5.com/en/forum/118999
questo codice scrive una linea con spazi dopo ogni lettera, ho bisogno di una sostituzione per FileWrite() ma funziona
Per favore, leggete cos'è una funzione. Allora capirete che l'array dichiarato nel corpo della funzione sarà locale - fuori dalla vista del resto del programma.
Cioè, ho bisogno di 3 funzioni
1) dove lo dichiaro
2) quale userò per aggiungervi dei valori
3) quale userò per cancellarli dal database?
giusto?
Cioè, ho bisogno di 3 funzioni
1) dove lo dichiaro
2) quale userò per aggiungervi dei valori
3) quale userò per cancellarli dal database?
giusto?
Leggete attentamente.
Ok, fate una funzione void che scriverà gli ordini in un array bidimensionale (biglietto + lotto)
ottenere un'immagine di questo tipo
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ok, fate una funzione void che scriverà gli ordini in un array bidimensionale (biglietto + lotto)
ottenere un'immagine di questo tipo
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ditemi, per favore, perché scrivere i biglietti e i lotti in un array, se non per imparare a usare un array? Quando si spegne il computer, l'intero array si blocca, perché renderlo così inaffidabile in primo luogo? A meno che, naturalmente, lo scopo non sia quello di imparare a lavorare con gli array...)
ok, trovami 6 ordini in una griglia irregolare nel modo più semplice, o 8 tramite ticketing
Ne ho bisogno finché c'è una griglia di ordini, poi lasciamola rotolare.
Bene, l'obiettivo che ho dichiarato nel codice sopraok, trovami 6 ordini in una griglia irregolare nel modo più semplice, o 8 tramite ticketing
Mi serve finché esiste la griglia dell'ordine, poi lasciamola rotolare.
Bene, ho dichiarato l'obiettivo nel codice sopraQui, c'è la possibilità di ordinare per diversi parametri, ecco perché viene usato un array bidimensionale.
Spero che capirete come usarlo, se no - a 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()
}
Qui, c'è la possibilità di ordinare per diversi parametri, quindi viene usato un array bidimensionale.
Spero che tu capisca come usarlo, se no, vai al freelance)
come ottenere preventivamente un adimensionale, non funziona con valori vuoti
È senza dimensione così com'è, ma è bidimensionale, e si può mettere un numero senza dimensione di elementi in due dimensioni.
Cosa stai facendo comunque, hai un'idea di quale dovrebbe essere il risultato del lavoro che fai? O ti stai inventando la logica man mano che vai avanti?