Нкжна помощь в завершении бота. - страница 2

 
Evgeniy Chumakov:

Подставь свои условия в код.


при continue выводит ошибку компиляции.

 
1leprecon1:

при continue выводит ошибку компиляции.

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   continue;
          if(OrderMagicNumber() != Magic)                   continue;
          if(OrderSymbol() != _Symbol)                      continue;
          /* бла-бла-бла */
     }

И вставляйте наконец правильно код. Тут не любят с картинками разбираться.
Оператор continue

 
Konstantin Nikitin:

И вставляйте наконец правильно код. Тут не любят с картинками разбираться.
Оператор continue

void CheckForClose()
  {

   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)
     {
      if(OrderMagicNumber()==MAGICMA || OrderSymbol()==Symbol())

        {
         if(OrderType()==OP_BUY)    // long position is opened
           {
            if(MaCurrent20H>Ask)
              {
               if(OrderClose(OrderTicket(),OrderLots(),Bid,1,White))
                  Print("Ордер закрыт ",GetLastError());
               else
                  Print("Ошибка закрытия Buy",GetLastError());
              }
            else
               Print("Ошибка условия Buy ",GetLastError());// правильность условия BUY
            return;
           }

         else
            if(OrderType()==OP_SELL)   // short position is opened
              {
               if(MaCurrent20H<Ask)
                 {
                  if(OrderClose(OrderTicket(),OrderLots(),Ask,1,Black))
                     Print("Ордер закрыт ",GetLastError());
                  else
                     Print("Ошибка закрытия Sell",GetLastError());
                 }
               else
                  Print("Ошибка условия Sell ",GetLastError());//правильность условия SELL
               return;
              }
        }
     }
   else
      Print("Ордер не выбран ",GetLastError());
  

сделал дополнение проверки пишет именно ошибку условия. То-есть получается условие средней МА и Ask не достижимо для выполнения. Причем проверку Buy Sell выполняет правильно. 

 
Konstantin Nikitin:

И вставляйте наконец правильно код. Тут не любят с картинками разбираться.
Оператор continue

int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)
            buys++;
         if(OrderType()==OP_SELL)
            sells++;
        }
     }
//--- return orders volume
   if(buys>0)
      return(buys);
   else
      return(-sells);

orders total отдельный модуль

 
1leprecon1:

сделал дополнение проверки пишет именно ошибку условия. То-есть получается условие средней МА и Ask не достижимо для выполнения. Причем проверку Buy Sell выполняет правильно.

Так распечатайте значения MaCurrent20H и Ask. Может расчет MaCurrent20H неправильный.

 
   MaCurrent20H = iMA(NULL,0,MATrendPeriod1,0,MODE_EMA,PRICE_HIGH,0);  //20H
   MaCurrent20L = iMA(NULL,0,MATrendPeriod1,0,MODE_EMA,PRICE_LOW,0);   //20L
Ihor Herasko
:

Так распечатайте значения MaCurrent20H и Ask. Может расчет MaCurrent20H неправильный.

MaCurrent20H & MaCurrent20L прекрасно работают на условие открытия ордера.
 
1leprecon1:

сделал проверку ошибок 

выводит именно ошибку условия, то-есть ему не нравится именно условие. Наипростейшее МА по отношению к Ask

Головную программу покажите. Которая Start. Меня интересует организация главного цикла, если он есть. Что-то мне подсказывает, что Вы написали советник, как индикатор. Это не возбраняется, но не лишне понимать, что переменные, похожие на Ask - всегда текущие, вот прямо здесь и сейчас, а потому в тестере и индикатороподобных советниках не катят. 

 
Алексей Тарабанов:

Головную программу покажите. Которая Start. 

void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0)
      CheckForOpen();
   else
      CheckForClose();
//---
  }
 
1leprecon1:

Мало. Цикл есть? Если есть, покажите. Если за тик советник отрабатывает один раз линейный алгоритм на текущих данных, то моё предположение неверно. 

 

Кстати, почему, если ордеров нет, то ищем открытые; а иначе - ищем закрытые? 

Я бы не стал делать даже наоборот, я бы вообще не стал думать так. Извините. 

Причина обращения: