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

 
Dimka-novitsek:
Вот, прошу прощения..   Перещитал скобки 8 раз- ну сбалансированы! Сбалансированы!    Или нет??


В этом коде:

 

            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

перенесите кавычки (те, что в конце строки).

 
Ага... Щас.
 
Фух!! Не помогает.   А. яего щас собаку в новом советнике по частям скомпилирую!
 
Dimka-novitsek:
Фух!! Не помогает.   А. яего щас собаку в новом советнике по частям скомпилирую!


я в подобных случаях поступаю так:

- комментирую весь текст функции;

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

 
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
          NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 

 
            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),  
     "    NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

так

   for( int A=0; A<100 ; A++)
   {
       double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
       double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
       int BUY=0,SELL=0;int ticket; 
       Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
           
       for(int i=1; i<=OrdersTotal(); i++)
       {  
         if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
         {                                       // Анализ ордеров:
            if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
            if (OrderMagicNumber( ) !=magicnumber)continue;
            if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
            if (OrderType()==1) {SELL++;ticket=OrderTicket( );}
         }
       }
    }

 так

      if (strela1<strela2&&BUY==0&&SELL==0)
      {  

         OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
         NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
         Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
         "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
         "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits));
      }

и так 

    Print (   "  Конец " );      

 совет 1: структурируйте свою программу отступами

совет 2: при поиске таких ошибок, да и многих других используйте комментирование части кода /*    */ - очень быстро ищутся синтаксические ошибки

 
Dimka-novitsek:
Спасибо!! Щас в код лучше гляну... А то ещё скобки на бумажку поштучно посчитал- сбалансированы!! 

поштучно не значит правильно - должно соблюдаться правило вложенности

 
Dimka-novitsek:
А где там ветвление? Или я туп...  Ведь просто открываем ордер при условиях!
оператор if  и есть ветвление, просто у Вас вторая ветвь (else) отсутствует
 

Спасибо!!  

А вы знаете, компилируется без этой строки

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits);

 А я не вижу в ней криминального!! Это я весь советник переносил частями и компилировал их отдельно до нахождения корня, так сказать.

 
Dimka-novitsek:

Спасибо!!  

А вы знаете, компилируется без этой строки

 А я не вижу в ней криминального!! Это я весь советник переносил частями и компилировал их отдельно до нахождения корня, так сказать.

не хватает завершающей скобки для Print

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits));
 

Доброго времени суток... Написал несложный индикатор (см. прикрепленный файл).

Вкратце суть индикатора: индикатор состоит из 3 линий:

1 линия отображает разницу двух МА по Close с периодами а и b (условно).

2 линия отображает разницу двух МА по Close с периодами c и d (условно); abcd.

3 линия отображает МА разницы Линии1 и Линии2, т.е. МА(Линии1-Линии2) с определенным периодом .

Вопрос: почему Линия3 (черная) отображается на графике как прямая?


Примечание к рисунку: на верхнем рисунке желаемый результат, на нижнем – то, что отображает созданный мной индикатор

Примечание: если кто-то обнаружит еще какие-то косяки, буду благодарен за подсказку

P.S. Чтобы не захламлять форум, заранее благодарю за ответ

Файлы:
aom3.mq4  12 kb
Причина обращения: