[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 186

 
Pyro:

Hola a todos. Mi búsqueda en el historial no devuelve el volumen de lotes. ¿Es esta la forma de hacerlo?


Devuelve el lote 0.1, aunque los lotes son cambiados por el programa. los billetes se muestran correctamente (cambio). ¿un error? ¿un error?


Ver código análogo, editar, probar:

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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


No necesito un ciclo. Necesito obtener el LOT del último pedido, no importa cuál, no necesito filtrar. No hay nada sobre LOT en el ejemplo. Estoy desconcertado.

 
Pyro:

Romano


No necesito un ciclo. Necesito obtener el LOT del último pedido, no importa cuál, no necesito filtrar. No hay nada sobre LOT en el ejemplo. Estoy desconcertado.


Echa un vistazo - He editado mi post anterior...
 
No lo entiendo. Un bucle es necesario cuando se necesita filtrar por algún criterio, como en tu caso. Mi tarea es más sencilla: tomar la última orden del historial. Por definición, está cerrado, y por definición, no hay posiciones abiertas en el mercado. Los pedidos pendientes no se utilizan. Es decir, el último pedido será definitivamente el del mercado. Los billetes se devuelven correctamente, los lotes no.
 
Pyro:
No lo entiendo. Un bucle es necesario cuando necesitas filtrar por algún criterio, como en tu caso. Mi tarea es más sencilla: tomar la última orden del historial. Por definición, está cerrado, y por definición, no hay posiciones abiertas en el mercado. Los billetes se devuelven correctamente, los lotes no.

¡Propio! ¡Aprende a utilizar la búsqueda! :-)
 
Gracias por ello :) El problema era otro.
 
MK07:

Gracias por querer ayudar. Puse if (D_sig==0) { comando para la señal ; }. Los "pasos" se hicieron menos, pero todavía están ahí. Y no está claro cómo se forman.

Puse MathAbs para tener un "corredor" de comparación, porque la probabilidad de que las líneas de señal sean absolutamente iguales es insignificante.

¿Quizás alguien más tenga ideas sobre mi problema?


Lo he escrito así y aparece D_Sig en el comentario.

         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 un "principio favorito" de formación de nombres de EA - y que tenga en cuenta el principio de funcionamiento y la versión, etc.
 

Hola a todos.

Hay una función bool NewBar(). Por favor, haga una función bool NewZZ() . Cuando aparece una nueva rodilla en zigzag -> true.

 
gince:

Hola a todos.

Hay una función bool NewBar(). Por favor, haga una función bool NewZZ() . Cuando aparece una nueva rodilla en zigzag -> true.


Y por qué tal función, recientemente hizo una neurona en ZZ, EA, pero no utilizó tal función. Sobre todo porque la mayoría de las ZZ están diseñadas para tomar decisiones visuales únicamente.
Razón de la queja: