Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 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);
  }

Quiero escribir una línea en el archivo con las traducciones a una nueva línea, pero no funciona, este código es de aquíhttps://www.mql5.com/en/forum/118999

este código escribe una línea con espacios después de cada letra, necesito un reemplazo para FileWrite() pero funciona

Léalo aquí.
 
Gracias, prefiero usar este artículohttps://www.mql5.com/ru/articles/1540 pero aun así, me gustaría usar WriteFile() de kernel32.dll y hacer que funcione con traducción de líneas
Файловые операции через WinAPI
Файловые операции через WinAPI
  • 2008.07.03
  • MetaQuotes Software Corp.
  • www.mql5.com
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
 
Artyom Trishkin:
Por favor, lea lo que es una función. Entonces entenderás que el array declarado en el cuerpo de la función será local - fuera de la vista del resto del programa.

Es decir, necesito 3 funciones

1) donde lo declaro

2) cuál utilizaré para añadirle valores

3) ¿cuál usaré para borrarlos de la base de datos?

¿verdad?

 
trader781:

Es decir, necesito 3 funciones

1) donde lo declaro

2) cuál utilizaré para añadirle valores

3) ¿cuál usaré para borrarlos de la base de datos?

¿correcto?

Lea aquí con atención.
Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Учёт ордеров - Создание обычной программы - Учебник по MQL4
 
Alekseu Fedotov:
Léelo con atención.

Vale, haz una función void que escriba los pedidos en un array bidimensional (ticket + lote)

obtener una imagen de este tipo

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

 
trader781:

Vale, haz una función void que escriba los pedidos en un array bidimensional (ticket + lote)

obtener una imagen de este tipo

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

Por favor, díganme por qué necesito escribir entradas y lotes en la matriz, además de aprender a usar la matriz. Si se apaga el ordenador, todo el conjunto se bloquea, ¿por qué hacerlo tan poco fiable en primer lugar? A menos que, por supuesto, tenga sentido aprender a trabajar con arrays...)
 
Vladimir Zubov:
Dígame, por favor, ¿por qué escribir los billetes y los lotes en una matriz, si no es para aprender a usar una matriz? Cuando se apaga el ordenador todo el conjunto se bloquea, ¿por qué hacerlo tan poco fiable en primer lugar? A no ser, por supuesto, que el objetivo sea aprender a trabajar con arrays...)

ok, encuéntrame 6 órdenes en una cuadrícula desigual de la manera más fácil, o 8 por medio de boletos

Lo necesito mientras haya una parrilla de pedidos, entonces que ruede.

Bueno, el objetivo que he indicado en el código anterior
 
trader781:

Ok, encuéntrame 6 órdenes en una cuadrícula desigual de la manera más fácil, o 8 por medio de boletos

Lo necesito mientras exista la parrilla de pedidos, entonces que ruede.

Bueno, yo he indicado el objetivo en el código anterior

Aquí existe la posibilidad de ordenar por varios parámetros, por eso se utiliza un array bidimensional.

Espero que entiendas cómo usarlo, si no es así - al freelance)

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:

Aquí existe la posibilidad de ordenar por varios parámetros, por lo que se utiliza un array bidimensional.

Espero que entiendas cómo usarlo, si no, vete al freelance)

double BPosMass[][];
Cómo obtener un adimensional de antemano, no funciona con valores vacíos
 
trader781:
cómo obtener un adimensional de antemano, no funciona con valores vacíos

Es adimensional como es, pero es bidimensional, y puedes poner un número adimensional de elementos en dos dimensiones.

De todos modos, ¿qué haces, tienes alguna idea de cuál debe ser el resultado del trabajo que haces? ¿O estás inventando la lógica sobre la marcha?

Razón de la queja: