[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 8

 
TheXpert:

La compacidad perjudica la legibilidad. Para ser justos, la versión de Roman tampoco es precisamente buena, incluso si se ignora la lógica.

¿Qué sentido tiene ahorrar líneas?

A cada uno lo suyo... Me resulta mucho más cómodo leer el código cuando lo tengo todo delante de los ojos. No trato de ahorrar líneas: como salió - así salió...

Todo es cuestión de gustos de cada uno y decidir qué es más conveniente y qué no, es algo vacío...

Lo principal es tener cada línea en su lugar habitual y no más... Creo que los demás deberíamos hacer lo mismo, pero a nuestra propia discreción.

No hay color ni sabor, como sabes.

 

pero para diseñar así... La pesadilla de un programador.

         
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
 
artmedia70:
Sí... Alexey, me imagino cómo sería la línea 807 de EA que acabo de dar a un cliente si estuviera escrita al estilo de Roman... :))))
Enhorabuena. Si miras mi código publicado en el contexto de mi respuesta a la pregunta, es decir, de mi último post en esta página, tal vez tu idea de cómo sería un EA de 807 líneas habría cambiado. He corregido mi código de mi EA, donde un montón de cosas se encuentran, en particular, en las líneas que faltan en el bucle, si la declaración y más en corchetes al salir del bucle, el hecho de que el manejo de errores para no borrar retrasado no se hace - esto es también en el contexto de mi pregunta y mi respuesta a ella, IMHO - es normal.
 
sergeev:

pero para diseñar así... La pesadilla de un programador.

Para mí, un diseño así es normal. Esto no es un EA personalizado, sino la respuesta a la pregunta, y en lugar de OrderDelete() -podría haberlo escrito con palabras- se pone aquí para eliminar una orden y llamar a la función para manejar posibles errores. La persona está esperando, abrí mi código, eliminé todo lo "innecesario", sin prestar atención a la presencia o ausencia de espacios después de los cambios y le di una versión de trabajo para su posterior conexión a su EA de acuerdo a sus condiciones de negociación. Creo que todo está dentro de lo normal, IMHO.
Aquí está la misma trama -la original- a la pregunta de un mal sueño.

          ....
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenTime();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();                                   
                                  
                     //---------------------Запоминаем значения сл и тп ордера
                     // При количестве итераций выше 3-х увеличиваем уровень ТР для выхода в профит. 
                        if (orderType == OP_BUY) 
                           {
                            //if (Iteration == 4 ) TakeProfitPips = 400; if (Iteration >= 5 ) TakeProfitPips = 500;                
                            V_StopLossPips = NormalizeDouble(OpenPrice  - (StopLossPips * Point), Digits);
                            V_TakeProfitPips = NormalizeDouble(OpenPrice + (TakeProfitPips * Point), Digits);
                           }
            
                        if (orderType == OP_SELL) 
                           {
                            //if (Iteration == 4 ) TakeProfitPips = 400; if (Iteration >= 5 ) TakeProfitPips = 500;        
                            V_StopLossPips = NormalizeDouble(OpenPrice  + (StopLossPips * Point), Digits);
                            V_TakeProfitPips = NormalizeDouble(OpenPrice - (TakeProfitPips * Point), Digits);
                           }                               
                   }     
    
     // Проверка на предельную просадку
      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return (0);
      }
    
       // Проверка на необходимость закрытия открытой позиции (ордера) по стоп-лоссу      
     
      if ( V_StopLossPips != 0 )
        {
          if (orderType == OP_BUY && Bid <=  V_StopLossPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips);
             }
             
          if (OrderType()== OP_SELL && Ask >=  V_StopLossPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips);
             }  
        }          
        // Проверка на необходимость закрытия открытой позиции (ордера) по тейку
        
        if ( V_TakeProfitPips != 0 )
        {
          if (orderType == OP_BUY && Bid >=  V_TakeProfitPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips);
             }
             
          if (OrderType()== OP_SELL && Ask <=  V_TakeProfitPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips);
             }  
        }      
     
       
   //-----------------------------------ВЫВОДИМ ТЕКУЩУЮ ИНФОРМАЦИЮ О ТОРГАХ НА ЭКРАН------------------------------------------------------------ 
     
      string messageLoss = "";
      if (orderProfit < 0.0)
      {
         messageLoss = "Просадка = " + DoubleToStr(loss, 1) + "% (макс. " + MaxLoss + "%)";
      }
   
      // Вывод текущего состояния
      Comment("Прибыль = ", DoubleToStr(orderProfit, 1), " (лот ", orderLots, ")  ", messageLoss, " Iteration= ", Iteration, "  Sum_Loss + Delta= ", MathAbs (Sum_Loss) +  Delta_Sum_Loss * 10 * orderLots, " Ширина канала = ", StopLossPips, " Профит по рыночному ордеру =   ", orderProfit, "  k = ", k);
      return (0);
   }
   
   Comment ("");   
 
artmedia70:

El sabor y el color no existen.


Somos muy diferentes, pero seguimos juntos. ))) Todos estamos en la misma olla cósmica. )))
 
tol64:

Somos tan diferentes, pero seguimos juntos. ))) Estamos en la misma olla cósmica. )))
El mío ya está perdiendo caldo... Voy a tomar una siesta... Hasta mañana).
 

Ya que estamos de humor (escribo el código como quiero/puedo), voy a cortar el último pepino:

Escribo todos los órganos "ejecutivos" y "legislativos" como funciones separadas (intentadas muchas veces).

Como las funciones y sus habilidades son bien conocidas por mí, las pongo lejos en algún lugar al final del código.

En la función start() sólo prescribo qué debe activar qué.

Sólo leo el start(), y todo se aclara de inmediato.

Es conveniente.

 
DhP:

Ya que estamos de humor (escribo el código como quiero/puedo), voy a cortar el último pepino:

Escribo todos los órganos "ejecutivos" y "legislativos" como funciones separadas (intentadas muchas veces).

Como las funciones y sus habilidades son bien conocidas por mí, las pongo lejos en algún lugar al final del código.

En la función start() sólo prescribo qué debe activar qué.

Sólo leo el start(), y todo se aclara de inmediato.

Es conveniente.


No te da error al compilar el código, porque primero escribes una función para que se ejecute, y luego en algún lugar al final escribes su contenido, claro que yo no uso funciones, casi siempre uso comentarios, pero con las variables se presenta este problema
 
LazarevDenis:

¿No hay un error al compilar el código? Primero escribes la función para la ejecución y luego en algún lugar al final escribes el contenido.


No puede haber errores en este caso.

Al compilar, puede que sólo haya una indicación/recordatorio de que alguna función no se utiliza.

En ese caso, o bien hago la vista gorda, o bien elimino la función no utilizada.

 
LazarevDenis:

No te da error al compilar el código, porque primero escribes una función para que se ejecute, y luego en algún lugar al final escribes su contenido, claro que yo no uso funciones, casi siempre uso comentarios, pero con las variables se presenta este problema

¿Qué es? ))) ¿Es una broma o qué? Si es así, es una buena)).
Razón de la queja: