新人对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,但我还是想使用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:
细阅读。

好的,做一个无效函数,将订单写进一个二维数组(票数+手数)。

获得这种类型的照片

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

 
trader781:

好的,做一个无效函数,将订单写进一个二维数组(票数+手数)。

获得这种类型的照片

            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:
如何事先得到一个无量纲的,它对空值不起作用。

它是无维的,但它是二维的,你可以把无维数的元素放在二维中。

你到底在做什么,你有什么想法吗,你所做的工作的结果应该是什么?还是你随心所欲地编造逻辑?

原因: