Любые вопросы новичков по 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:
как получить заранее безразмерный, с пустыми значениями не прокатывает

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

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