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/en/articles/1540 에 더 적합하지만 여전히 kernel32.dll의 WriteFile()을 사용하고 줄 바꿈과 친구로 만들 것입니다.
Файловые операции через 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 :
우리는 여기에서 주의 깊게 읽었습니다.

자, 2차원 배열(티켓+로트)에 주문을 쓰는 void 함수를 만들어 봅시다.

우리는 이런 이미지를 얻습니다

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

 
trader781 :

자, 2차원 배열(티켓+로트)에 주문을 쓰는 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을 찾으십시오.

나는 주문의 그리드가 있는 한 그것을 필요로 한다.

글쎄, 나는 위의 코드에서 목표를 표시했다

여기에서는 여러 매개변수로 정렬할 수 있는 기회가 있으므로 2차원 배열을 사용합니다.

나는 그것을 사용하는 방법을 희망합니다 - 그렇지 않은 경우 이해하게 될 것입니다 - 프리랜서)

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 :

여기에서는 여러 매개변수로 정렬할 수 있는 기회가 있으므로 2차원 배열을 사용합니다.

나는 그것을 사용하는 방법을 희망합니다 - 그렇지 않다면 이해하게 될 것입니다 - 프리랜서)

double  BPosMass[][];
빈 값으로 사전에 무차원화하는 방법은 롤링되지 않습니다.
 
trader781 :
빈 값으로 사전에 무차원화하는 방법은 롤링되지 않습니다.

이미 무차원이지만 2차원이며 무차원 개수의 요소를 2차원에 넣을 수 있습니다.

당신은 일반적으로 무엇을합니까, 당신이 한 일의 결과가 어떠해야하는지 알고 있습니까? 아니면 진행하면서 논리를 발명하고 있습니까?