[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 8

 
TheXpert:

Компактность ухудшает читабельность. Правда справедливости ради вариант Романа тоже не совсем хорош, даже если не обращать внимания на логику.

Смысл экономить строки?

Каждому - своё... Мне гораздо удобнее читать код, когда он перед глазами весь. При этом не стараюсь строки экономить: как вышло - так вышло...

Это всё - суть пристрастия каждого отдельно взятого индивидуума и решать что удобнее, а что нет - пустое...

Мне главное, чтобы каждая строчка на своём привычном мне месте была и не более... Думаю, остальным также, но по своему усмотрению.

На вкус и цвет, как известно - фломастеры отсутствуют.

 

но так оформлять... блин страшный сон кодера.

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

       
      return (0);
 
artmedia70:
Да уж... Алексей, я представляю как бы выглядел советник в 807 строк, который я только что отдал заказчику, будь он написан в стиле Романа ... :))))
Поздравляю! Если Вы рассмотрите мой выложенный код в контексте моего ответа на вопрос, а именно с моего крайнего поста на этой страничке, то, возможно, представление о том, как выглядел бы советник в 807 строк - поменялось бы. Я правил свой код со своего эксперта, где много чего расположено, в частности в отсутствующих строках в цикле, операторе if и далее в фигурных скобках при выходе из цикла, то, что не сделана обработка ошибок при не удалении отложника - это также в контексте вопроса и моего ответа на него, ИМХО - является нормальным.
 
sergeev:

но так оформлять... блин страшный сон кодера.

Для меня - подобная конструкция - нормальна. Это не советник на заказ, но ответ на вопрос, и вместо OrderDelete() - можно вообще было прописать словами - вставляете сюда удаление ордера и вызов ф-ии обработки возможных ошибок. Человек ждет, я открыл свой код, убрал все "лишнее", не обращая внимания на наличие, либо отсутствие пробелов после правок и предоставил ему рабочий вариант для дальнейших его подключений им в своего советника по его торговым условиям. Считаю, что все в пределах нормы, ИМХО.
Вот тот же участок - оригинал - к вопросу о страшном сне.

          ....
          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:

На вкус и цвет, как известно - фломастеры отсутствуют.


Мы все такие разные, но всё таки мы вместе. ))) В одной космической кастрюле варимся. )))
 
tol64:

Мы все такие разные, но всё таки мы вместе. ))) В одной космической кастрюле варимся. )))
С моей уже бульон течёт... Пойду-ка вздремну-ка... До утра-ка :)
 

Раз уж пошла такая пьянка (пишу код, как хочу/умею) порежу-ка последний огурец:

Пишу все "исполнительные" и "законодательные" органы в виде отдельных (много раз опробованных) функций.

Поскольку функции и их способности хорошо известны мне, то засовываю их далеко куда-нибудь в конце кода.

В функции start() прописываю лишь что за чем должно сработать.

Читаю только start() - и сразу все понятно.

Удобно.

 
DhP:

Раз уж пошла такая пьянка (пишу код, как хочу/умею) порежу-ка последний огурец:

Пишу все "исполнительные" и "законодательные" органы в виде отдельных (много раз опробованных) функций.

Поскольку функции и их способности хорошо известны мне, то засовываю их далеко куда-нибудь в конце кода.

В функции start() прописываю лишь что за чем должно сработать.

Читаю только start() - и сразу все понятно.

Удобно.


а разве при компиляции кода ошибок не возникает, ведь вы сначала пишете функцию на выполнение, а потооооом где-то в конце пишете ее содержание, я конечно функциями не пользуюсь, больше пользуюсь коментариями, но с переменными такая проблема присутствует
 
LazarevDenis:

а разве при компиляции кода ошибок не возникает, ведь вы сначала пишете функцию на выполнение, а потооооом где-то в конце пишете ее содержание, я конечно функциями не пользуюсь, больше пользуюсь коментариями, но с переменными такая проблема присутствует


Ошибок в этом случае быть не может.

При компиляции может быть лишь указание/напоминание, что какая-то функция не используется.

В таком случае или на это закрываю глаза, или эту неиспользуемую функцию удаляю.

 
LazarevDenis:

а разве при компиляции кода ошибок не возникает, ведь вы сначала пишете функцию на выполнение, а потооооом где-то в конце пишете ее содержание, я конечно функциями не пользуюсь, больше пользуюсь коментариями, но с переменными такая проблема присутствует

Что это??? ))) Это шутка что ли? Если да, то удалась.)))
Причина обращения: