Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 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);
  }

хочу записать в файл строку с переводами на новую строку, но не выходит, этот код отсюда https://www.mql5.com/en/forum/118999

этот код вообще и пишет строку с пробелами после каждой буквы, мне нужно замену найти FileWrite() но рабочую 

Здесь почитайте.
 
Спасибо, мне скорее подойдёт эта статья https://www.mql5.com/ru/articles/1540 но всё же, мне бы использовать WriteFile() из kernel32.dll и подружить его с переводом строк
Файловые операции через WinAPI
Файловые операции через WinAPI
  • 2008.07.03
  • MetaQuotes Software Corp.
  • www.mql5.com
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
 
Artyom Trishkin:
Почитайте что такое функция, пожалуйста. Тогда поймёте, что массив, объявленный в теле функции будет локальным - вне видимости остальной программы.

То есть мне нужно 3 функции

1) где я его объявлю

2)  с помощью какой я буду туда добавлять значения

3) с помощью какой я их буду удалять

правильно? 

 
trader781:

То есть мне нужно 3 функции

1) где я его объявлю

2)  с помощью какой я буду туда добавлять значения

3) с помощью какой я их буду удалять

правильно? 

Читаем     здесь     внимательно.
Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Учёт ордеров - Создание обычной программы - Учебник по MQL4
 
Alekseu Fedotov:
Читаем     здесь     внимательно.

Ок, делаем void функцию которая будет писать ордера в двумерный массив (тикет+лот)

 получаем картинку вот такого типа

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

 

 
trader781:

Ок, делаем void функцию которая будет писать ордера в двумерный массив (тикет+лот)

 получаем картинку вот такого типа

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

 

Скажи пожалуйста, зачем вообще писать тикеты и лоты в массив, кроме того как научиться пользоваться массивом ? При выключении компа весь массив грохнется, зачем изначально делать так как не надёжно ? Если конечно не смысл изучить работу с массивами...)
 
Vladimir Zubov:
Скажи пожалуйста, зачем вообще писать тикеты и лоты в массив, кроме того как научиться пользоваться массивом ? При выключении компа весь массив грохнется, зачем изначально делать так как не надёжно ? Если конечно не смысл изучить работу с массивами...)

ок, найди мне 6 ордер в неравномерной сетке простым способом, или 8 по тикетам

Мне он нужен пока существует сетка ордеров, потом пусть валится. 

ну цель я указал в коде выше
 
trader781:

ок, найди мне 6 ордер в неравномерной сетке простым способом, или 8 по тикетам

Мне он нужен пока существует сетка ордеров, потом пусть валится. 

ну цель я указал в коде выше

Вот, тут есть шанс отсортировать по нескольким параметрам, поэтому используется двухмерный массив.

Надеюсь как его использовать - поймёте, если нет - во фриланс) 

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:

Вот, тут есть шанс отсортировать по нескольким параметрам, поэтому используется двухмерный массив.

Надеюсь как его использовать - поймёте, если нет - во фриланс) 

double BPosMass[][];
как получить заранее безразмерный, с пустыми значениями не прокатывает
 
trader781:
как получить заранее безразмерный, с пустыми значениями не прокатывает

Он и так безразмерный, но двухмерный, и в два измерения можете положить безразмерное количество элементов.

Что вы вообще вытворяете, вы имеете хоть представление, какой должен быть результат от выполненной вами работы?  Или вы на ходу выдумываете логику?

Причина обращения: