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); Функция записи(); } и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду? ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
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)我将用哪一个从数据库中删除它们?
正确吗?
仔 细阅读。
好的,做一个无效函数,将订单写进一个二维数组(票数+手数)。
获得这种类型的照片
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
好的,做一个无效函数,将订单写进一个二维数组(票数+手数)。
获得这种类型的照片
{
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()
}
这里,有机会按几个参数排序,所以使用了一个二维数组。
我希望你能理解如何使用它,如果没有,请到自由职业者那里去)
如何事先得到一个无量纲的,它对空值不起作用。
它是无维的,但它是二维的,你可以把无维数的元素放在二维中。
你到底在做什么,你有什么想法吗,你所做的工作的结果应该是什么?还是你随心所欲地编造逻辑?