[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 186

 
Pyro:

Olá a todos. Minha busca histórica não retorna o volume de lotes. É assim que se faz?


devolve o lote 0,1, embora os lotes sejam alterados pelo programa. os bilhetes são exibidos corretamente (alteração). um bug? um bug?


Ver código analógico, editar, tentar:

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;  
    
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 

Romano


Eu não preciso de um ciclo. Preciso obter o LOTE da última encomenda, não importa qual, eu não preciso filtrar. Não há nada sobre a LOTE no exemplo. Estou intrigado.

 
Pyro:

Romano


Eu não preciso de um ciclo. Preciso obter o LOTE da última encomenda, não importa qual, eu não preciso filtrar. Não há nada sobre a LOTE no exemplo. Estou intrigado.


Dê uma olhada - fiz edições do meu post anterior...
 
Eu não entendo. Um loop é necessário quando você precisa filtrar por alguns critérios, como no seu caso. Minha tarefa é mais simples - tirar a última encomenda da história. Por definição, é fechado e, por definição, não há posições abertas no mercado. As ordens pendentes não são utilizadas. Ou seja, a última ordem será definitivamente a do mercado. Os bilhetes são devolvidos corretamente, os lotes não são.
 
Pyro:
Eu não entendo. Um loop é necessário quando você precisa filtrar por alguns critérios, como no seu caso. Minha tarefa é mais simples - tirar a última encomenda da história. Por definição, é fechado e, por definição, não há posições abertas no mercado. Os bilhetes são devolvidos corretamente, os lotes não são.

Próprio! Aprenda a usar a busca! :-)
 
Obrigado por isso :) O problema era outra coisa.
 
MK07:

Obrigado por querer ajudar. Coloco se (D_sig==0) { comando por sinal ; }. "Passos" se tornaram menos, mas ainda assim eles estão lá. E não está claro como eles são formados.

Coloco o MathAbs para ter um "corredor" para comparação, porque a probabilidade de que as linhas de sinal sejam absolutamente iguais é insignificantemente pequena.

Talvez alguém mais tenha pensamentos sobre o meu problema?


Escrevi-o assim e ele exibe D_Sig no comentário.

         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
if(D_sig==0)  {   D_sig_Last=D_sig; }
      
//       break;          
             
           
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
 
Sugerir um "princípio favorito" de formação do nome EA - e que leve em conta o princípio de funcionamento e versão, etc.
 

Olá a todos.

Há uma função bool NewBar(). Por favor, faça uma função bool NewZZ() . Quando um novo joelho em ziguezague aparece -> verdadeiro.

 
gince:

Olá a todos.

Há uma função bool NewBar(). Por favor, faça uma função bool NewZZ() . Quando um novo joelho em ziguezague aparece -> verdadeiro.


E por que tal função, recentemente fez um neurônio na ZZ, EA, mas não usou tal função. Especialmente porque a maioria das ZZ's são projetadas apenas para a tomada de decisões visuais.