Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e 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);
  }

Quero escrever uma linha para o arquivo com traduções para uma nova linha, mas não funciona, este código é daquihttps://www.mql5.com/en/forum/118999

este código escreve uma linha com espaços após cada letra, eu preciso de um substituto para FileWrite() mas funciona

Leia-o aqui.
 
Obrigado, eu prefiro usar este artigohttps://www.mql5.com/ru/articles/1540 mas ainda assim, eu gostaria de usar o WriteFile() do kernel32.dll e fazê-lo funcionar com tradução de linha
Файловые операции через WinAPI
Файловые операции через WinAPI
  • 2008.07.03
  • MetaQuotes Software Corp.
  • www.mql5.com
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
 
Artyom Trishkin:
Por favor, leia sobre o que é uma função. Então você entenderá que o conjunto declarado no corpo funcional será local - fora da vista do resto do programa.

Ou seja, eu preciso de 3 funções

1) onde eu o declaro

2) qual eu usarei para acrescentar valores a ela

3) qual eu usarei para apagá-los do banco de dados?

certo?

 
trader781:

Ou seja, eu preciso de 3 funções

1) onde eu o declaro

2) qual eu usarei para acrescentar valores a ela

3) qual eu usarei para apagá-los do banco de dados?

correto?

Leia aqui com atenção.
Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Учёт ордеров - Создание обычной программы - Учебник по MQL4
 
Alekseu Fedotov:
Leia-o com atenção.

Ok, faça uma função vazia que escreverá as ordens em uma matriz bidimensional (bilhete + lote)

obter uma foto deste tipo

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

 
trader781:

Ok, faça uma função vazia que escreverá as ordens em uma matriz bidimensional (bilhete + lote)

obter uma foto deste tipo

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

Por favor, me diga por que preciso escrever bilhetes e lotes na matriz, além de aprender a usar a matriz? Se você desligar seu computador, todo o conjunto irá travar, por que, em primeiro lugar, torná-lo tão pouco confiável? A menos, é claro, que faça sentido aprender a trabalhar com arrays)
 
Vladimir Zubov:
Diga-me, por favor, por que escrever os bilhetes e lotes em uma matriz, a não ser para aprender a usar uma matriz? Quando você desliga seu computador, todo o conjunto trava, por que, em primeiro lugar, torná-lo tão pouco confiável? A menos, é claro, que o objetivo seja aprender a trabalhar com arrays)

ok, me encontre 6 pedidos em uma grade irregular da maneira mais fácil, ou 8 por emissão de bilhetes

Preciso dela enquanto houver uma grade de ordens, então deixe-a rolar.

bem, o objetivo que eu declarei no código acima
 
trader781:

ok, encontre-me 6 pedidos em uma grade irregular da maneira mais fácil, ou 8 por bilhetagem

Preciso dela enquanto a grade de pedidos existir, então deixe-a rolar.

Bem, eu declarei o objetivo no código acima

Aqui, há uma chance de ordenar por vários parâmetros, por isso é utilizada uma matriz bidimensional.

Espero que você entenda como usá-lo, se não - para freelancer)

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:

Aqui, há uma chance de classificar por vários parâmetros, de modo que é usada uma matriz bidimensional.

Espero que você entenda como utilizá-lo, se não, vá para freelancer)

double BPosMass[][];
Como obter um sem dimensões de antemão, não funciona com valores vazios
 
trader781:
como obter um sem dimensão de antemão, não funciona com valores vazios

É sem dimensões como está, mas é bidimensional, e você pode colocar um número de elementos sem dimensões em duas dimensões.

O que você está fazendo de qualquer forma, você tem alguma idéia de qual deve ser o resultado do trabalho que você faz? Ou você está inventando a lógica à medida que avança?

Razão: