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

 
А что не так с OrderOpenPrice( ) ?? ???  Это простая нормальная функция!! Ордер я предварительно выбрал.
 
Извините, что это? Функция OrderSend у меня работает, пока, OrderClose выпендривается!
 
Dimka-novitsek:
Извините, что это? Функция OrderSend у меня работает, пока, OrderClose выпендривается!
total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
    type   = OrderType(); result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), l_SlipPage, Red ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), l_SlipPage, Red ); break; 
          }
    if(!result)
      {
      error =  GetLastError(); 
      errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + ErrorDescript(error); 
      Print(errorcomment);
      }  
    }
это пример закрытия всех ордеров, обратите внимание что баи и селы закрываються по бидам и аскам .... 
 
Ох, спасибо!!
 
7777877:

Большое спасибо за предыдущие ответы. Все работает и почти все понятно... Теперь вот об этом "почти".

1. В какой именно строке (индикатор см. в прикрепленном файле) происходит указание на то, что Линия, рассчитанная на данных массива должна быть отображена в окне Клиентского Терминала?

2. Зачем нужна (точнее, в каких ситуациях надо использовать) функция IndicatorBuffers, если количество буферов можно объявить строкой

Заранее благодарю за ответ

#property indicator_buffers 3                                           //объявляем количество буферов

этой строкой Вы объявляете количество видимых в терминале буферов индикатора

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

 этой строкой Вы объявляете общее количество буферов, используемых индикатором для расчетов (3 видимых и 1 скрытый)

если дополнительных буферов Вам не требуется, то эта строка не понадобится

Количество буферов не может превышать 8 и быть менее значения, указанного в свойстве indicator_buffers. Здесь хороший пример.


 
Доброе утро!  Скажите, а что, неужели цены аск и бид необходимо нормализовывать??
NormalizeDouble(Bid, Digits)
 А то у меня так 
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( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot, Ask, 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3*Point, 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,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),
"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  

Ругается так 2012.11.01 11:31:00 советник AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE    129    Неправильная цена                        Раньше такого годами не было!! Вчера тоже  не было

 
Dimka-novitsek:
Доброе утро!  Скажите, а что, неужели цены аск и бид необходимо нормализовывать?? А то у меня так 

Ругается так 2012.11.01 11:31:00 советник AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE    129    Неправильная цена                        Раньше такого годами не было!! Вчера тоже  не было

В тестере не нужно, а в on-line приходится делать всё то, что диктует сервер ДЦ, если хотите работать.
 
Dimka-novitsek:
Доброе утро!  Скажите, а что, неужели цены аск и бид необходимо нормализовывать?? А то у меня так 

Ругается так 2012.11.01 11:31:00 советник AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE    129    Неправильная цена                        Раньше такого годами не было!! Вчера тоже  не было


Не всегда так...

"" Неправильная цена bid или ask, возможно, ненормализованная цена. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы."" "ИЗ ДОКУМЕНТАЦИИ"

Если на демо или реале - не получиться.  Вы очень часто пытаетесь открыть два ордера подряд. В тестере это пройдет. Ставтьте задержку между открытиями ордеров. 

 

Спасибо!!    Вписал нормализацию...     А чёртте-ЧТО вобще происходит!!!!!!   Просто голова горит.. Вроде проще школьной геометрии


 
Sepulca:


Не всегда так...

"" Неправильная цена bid или ask, возможно, ненормализованная цена. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы."" "ИЗ ДОКУМЕНТАЦИИ"

Если на демо или реале - не получиться.  Вы очень часто пытаетесь открыть два ордера подряд. В тестере это пройдет. Ставтьте задержку между открытиями ордеров. 

А что означает "не всегда так"??? Код должен быть УНИВЕРСАЛЬНЫМ, т.е. работать с ЛЮБЫМ ДЦ (в не зависимости от количества знаков в котировках и всевозможных ухищрений сервера ДЦ на отказ своевременного исполнения торговых приказов)!!!
Причина обращения: