Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 67
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
{
// 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);
}
хочу записать в файл строку с переводами на новую строку, но не выходит, этот код отсюда https://www.mql5.com/en/forum/118999
этот код вообще и пишет строку с пробелами после каждой буквы, мне нужно замену найти FileWrite() но рабочую
Почитайте что такое функция, пожалуйста. Тогда поймёте, что массив, объявленный в теле функции будет локальным - вне видимости остальной программы.
То есть мне нужно 3 функции
1) где я его объявлю
2) с помощью какой я буду туда добавлять значения
3) с помощью какой я их буду удалять
правильно?
То есть мне нужно 3 функции
1) где я его объявлю
2) с помощью какой я буду туда добавлять значения
3) с помощью какой я их буду удалять
правильно?
Читаем здесь внимательно.
Ок, делаем void функцию которая будет писать ордера в двумерный массив (тикет+лот)
получаем картинку вот такого типа
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2ордера+лот4ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Ок, делаем void функцию которая будет писать ордера в двумерный массив (тикет+лот)
получаем картинку вот такого типа
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2ордера+лот4ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Скажи пожалуйста, зачем вообще писать тикеты и лоты в массив, кроме того как научиться пользоваться массивом ? При выключении компа весь массив грохнется, зачем изначально делать так как не надёжно ? Если конечно не смысл изучить работу с массивами...)
ок, найди мне 6 ордер в неравномерной сетке простым способом, или 8 по тикетам
Мне он нужен пока существует сетка ордеров, потом пусть валится.
ну цель я указал в коде вышеок, найди мне 6 ордер в неравномерной сетке простым способом, или 8 по тикетам
Мне он нужен пока существует сетка ордеров, потом пусть валится.
ну цель я указал в коде вышеВот, тут есть шанс отсортировать по нескольким параметрам, поэтому используется двухмерный массив.
Надеюсь как его использовать - поймёте, если нет - во фриланс)
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()
}
Вот, тут есть шанс отсортировать по нескольким параметрам, поэтому используется двухмерный массив.
Надеюсь как его использовать - поймёте, если нет - во фриланс)
как получить заранее безразмерный, с пустыми значениями не прокатывает
Он и так безразмерный, но двухмерный, и в два измерения можете положить безразмерное количество элементов.
Что вы вообще вытворяете, вы имеете хоть представление, какой должен быть результат от выполненной вами работы? Или вы на ходу выдумываете логику?