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); }
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс и это 5 ордер в списке { ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure ); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс и это 5 ордер в списке { ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure ); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
배열을 사용하는 방법을 배우는 것 외에 배열에 티켓과 로트를 쓰는 이유를 알려주세요. 컴퓨터를 끄면 전체 어레이가 충돌합니다. 왜 처음에는 신뢰할 수 없기 때문에 수행합니까? 물론 배열로 작업하는 방법을 배우는 것이 의미가 없다면 ...)
나는 그것을 사용하는 방법을 희망합니다 - 그렇지 않은 경우 이해하게 될 것입니다 - 프리랜서)
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 ] );
{
// 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) 도움을 받아 제거하겠습니다.
오른쪽?
우리는 여기에서 주의 깊게 읽었습니다.
자, 2차원 배열(티켓+로트)에 주문을 쓰는 void 함수를 만들어 봅시다.
우리는 이런 이미지를 얻습니다
{
ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
자, 2차원 배열(티켓+로트)에 주문을 쓰는 void 함수를 만들어 봅시다.
우리는 이런 이미지를 얻습니다
{
ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
배열을 사용하는 방법을 배우는 것 외에 배열에 티켓과 로트를 쓰는 이유를 알려주세요. 컴퓨터를 끄면 전체 어레이가 충돌합니다. 왜 처음에는 신뢰할 수 없기 때문에 수행합니까? 물론 배열로 작업하는 방법을 배우는 것이 의미가 없다면 ...)
좋아, 간단한 방법으로 고르지 않은 그리드에서 6 주문 또는 티켓으로 8을 찾으십시오.
나는 주문의 그리드가 있는 한 그것을 필요로 한다.
글쎄, 나는 위의 코드에서 목표를 표시했다좋아, 간단한 방법으로 고르지 않은 그리드에서 6 주문 또는 티켓으로 8을 찾으십시오.
나는 주문의 그리드가 있는 한 그것을 필요로 한다.
글쎄, 나는 위의 코드에서 목표를 표시했다여기에서는 여러 매개변수로 정렬할 수 있는 기회가 있으므로 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()
}
여기에서는 여러 매개변수로 정렬할 수 있는 기회가 있으므로 2차원 배열을 사용합니다.
나는 그것을 사용하는 방법을 희망합니다 - 그렇지 않다면 이해하게 될 것입니다 - 프리랜서)
빈 값으로 사전에 무차원화하는 방법은 롤링되지 않습니다.
이미 무차원이지만 2차원이며 무차원 개수의 요소를 2차원에 넣을 수 있습니다.
당신은 일반적으로 무엇을합니까, 당신이 한 일의 결과가 어떠해야하는지 알고 있습니까? 아니면 진행하면서 논리를 발명하고 있습니까?