Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 403

 
Link_x:

E se você for desmontar a função, não deve ter cortado o cabeçalho da função, há ali informações importantes.

Retorna o tipo da última posição aberta ou -1 - isto significa que se não houver posições fechadas, então quando a função é chamada, seu valor será igual a -1

sy - nome do instrumento (par de moedas)

mn - número mágico. Se definirmos -1, a função retornará o tipo da última ordem fechada, não importa o número mágico

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
 
Link_x:
Resposta ponto por ponto, desculpe.
1 - gênio da programação?
2 - para ser justo, nada é supérfluo, exceto fezes e outros produtos em decomposição (opinião franca, pronta para começar a debater, mas em outro tópico :) )
3 - tudo isso faz sentido agora. :)
4 - tão verdade. Eu sei. Eu me enganei um pouco e digitei com a função "OrderSend".

Obrigado por contribuir para o modelo "Function Bricks Parsing". :)

1. Vamos dispensar o sarcasmo, não é? Tornou seu aprendizado confortável e fácil. O que o gênio tem a ver com isso?
2. Argumentativo.
3. você não entende nada, a julgar por seus comentários no código.
4. Isso acontece.

int GetTypeLastClosePos(string sy="", int mn=-1) {    
   datetime t;                                        // Переменная хранит время закрытия
   int      i, k=OrdersHistoryTotal(), r=-1;          // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   if (sy=="0") sy=Symbol();                          // Если в функцию в качестве значения символа передан NULL, то будет использоваться текущий символ графика
   for (i=0; i<k; i++) {                              // Цикл по истории от нуля до OrdersHistoryTotal()
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if ((OrderSymbol()==sy || sy=="") &&         // если переданный символ совпадает с символом ордера или передано значение по-умолчанию
             (mn<0 || OrderMagicNumber()==mn)) {      // если передано значение по-умолчанию или магик ордера равен переданному в функцию значению
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) { // если это или Buy или Sell
// --------------------- определение последнего закрытого ордера --------------------               
               if (t<OrderCloseTime()) {                       // если значение, записанное в t меньше времени закрытия ордера
                  t=OrderCloseTime();                          // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
                  r=OrderType();                               // запоминаем тип ордера
                  }                                            // Конец блока определения времени закрытия.
               }                                               // Конец блока обработки найденного нужного ордера по типу (одного из возможных)
            }                                                  // Конец блока проверки по символу и магику
         }                                                     // Конец блока обработки выбранного ордера
      }                                                        // Идём проверять следующий ордер (если i всё ещё меньше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return(r);                                                  // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                              // Аминь. 

No ponto 2, um exemplo:

int GetTypeLastClosePos(string sy, int mn) {    
   datetime t;                                        // Переменная хранит время закрытия
   int      i, k=OrdersHistoryTotal()-1, r=-1;        // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   for (i=k; i>=0; i--) {                             // Обратный цикл по истории от OrdersHistoryTotal()-1 до нуля 
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if(OrderMagicNumber()!=mn) continue;         // если магик не тот - идём выбирать следующий ордер в истории
         if(OrderSymbol()!=sy)      continue;         // если переданный символ не равен символу ордера - идём выбирать следующий ордер в истории
         if (OrderType()>1)         continue;         // если это не Buy и не Sell - идём выбирать следующий ордер в истории
// --------------------- дальше имеем выбранный нужный нам ордер --------------------        
// -------------------------- определяем время его закрытия -------------------------               
         if (t<OrderCloseTime()) {                    // если значение, записанное в t меньше времени закрытия ордера
            t=OrderCloseTime();                       // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
            r=OrderType();                            // запоминаем тип ордера
            }                                         // Конец блока определения времени закрытия.
         }                                            // Конец блока обработки выбранного ордера
      }                                               // Идём проверять следующий ордер (если i всё ещё больше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return(r);                                         // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                     // Аминь. 

Há menos coisas desnecessárias aqui

 
Link_x:

Aqui está um exemplo de uso prático de uma função personalizada:

.
Obrigado.
Portanto, você tem que aplicar o nome da função para usá-la, e a própria variável "r" é definida para determinar o valor dessa função!
Aqui está uma pequena descoberta para mim! ^^
Obrigado novamente, Yuri. :)


Para um esclarecimento final, isto é possível:

?


Seus exemplos não são corretos. Quando você chama uma função que tem parâmetros, você deve dar os valores desses parâmetros entre parênteses, separados por vírgulas. Você também deve estar ciente de que nem todas as funções são valores atribuídos. Se o tipo de função for nulo, não tem significado e se destina a executar alguma ação ou calcular algumas variáveis. Neste último caso, é necessário conhecer os nomes destas variáveis, a fim de utilizar os resultados desta função.

 
Link_x:

if(GetTypeLastClosePos == OP_BUY)

O compilador lhe dará um erro nesta linha de que a variável não é declarada.

você deve ao menos fazer isso:

if(GetTypeLastClosePos() == OP_BUY)
 
artmedia70:

No ponto 2, um exemplo:

Há menos itens desnecessários



Desculpe a pergunta idiota, mas por que você está vasculhando toda a história para encontrar a última ordem fechada? Você encontra o primeiro do final e sai logo, acho eu.
 
Roger:


Desculpe a pergunta tola, mas por que você está vasculhando a história para encontrar a última ordem fechada? Você encontra o primeiro do final e sai imediatamente, como eu entendo.
Uma vez houve uma discussão sobre um problema quando o histórico foi armazenado na forma em que o usuário o classificou. Portanto (para ser seguro) a busca é exatamente assim.
 
artmedia70:
Houve uma vez uma discussão sobre um problema em que o histórico era armazenado à medida que o usuário o classificava. Portanto (para ser seguro) a busca é exatamente assim.

O usuário só pode classificar o histórico para percepção visual, os números de posição no histórico não podem ser alterados.
 
Roger:
O usuário só pode classificar a história visualmente, os números de posição na história não podem ser alterados.

Isto é uma coisa boa. Mas costumava ser diferente. Agora não vou procurar informações sobre o fórum - foi há muito tempo. Então eu me perguntei, e se isso acontecer novamente? Eu preferiria passar pelas ordens do que obter um resultado errado.
 
Roger:
O usuário só pode classificar a história visualmente, os números de posição na história não podem ser alterados.

Na verdade, você só pode realmente esperar por ordem no testador.
 
TheXpert:
Na verdade, só se pode realmente esperar ordem no testador.


Não tenho notado, mas tudo bem, não vou discutir. Fazer a profundidade 10-20, deve ser suficiente. Mas a história toda... Isso é um pouco demais, na minha opinião.