Помогите разобраться с ошибкой. - страница 2

 
А есть учебник по MQL4? Если кому не жалко дайте ссылку.
 
УРА!!! заработало!
Всем спасибо за помощь!
 
А есть учебник по MQL4? Если кому не жалко дайте ссылку.
пока <Ctrl>+<F1> лучший учебник =) + примеры экспертов-индикаторов (не MACD)
 
Граждане! и все равно этот злостный советник не торгует хотя и ошибок не выдает, гляньте одним глазом, а сейчас то что???
//+------------------------------------------------------------------+
//|                                                      Serfing.mq4 |
//|                                                             Zmey |
//|                                                  xzmey@yandex.ru |
//+------------------------------------------------------------------+
extern double StopLoss = 50;
extern double TakeProfit = 30;
extern double TrailingStop = 15;
extern double Lots = 0.1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
{
   int cnt=0, ticket, total, handle, bars=Bars;
   // теперь надо определится в какок состоянии торговый терминал?
   // проверим, есть ли ранее открытые позиции или ордеры?
   total=OrdersTotal();
   if(total<1)
   {
      // нет ниодного открытого ордера
      // на всякий случай проверим, есть ли у нас свободные деньги на счету?
      if(AccountFreeMargin()<(3000*Lots))
      {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0); // денег нет-выходим
      }
      //проверяем возможность открытия позиции по BAY
      if(High[4]>High[3] && High[2]<High[3] && High[1]>High[2] && Open[1]>=Close[2])
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask+TakeProfit*Point,Ask-StopLoss*Point,
         "serfing sample",3,Red); //исполняем
         if(ticket>0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("BUY order opened : ",OrderOpenPrice());
         }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
      //проверяем возможность открытия позиции по SELL
      if(High[4]<High[3] && High[2]>High[3] && High[1]<High[2])
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-TakeProfit*Point,Bid+StopLoss*Point,
         "serfingsample",3,Red); //исполняем
         if(ticket>0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("SELL order opened : ",OrderOpenPrice());
         }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
      }
      return(0);
   }
   //переходим к важной части эксперта - контролю открытых позиций
   //`важно правильно войти в рынок, но выйти - еще важнее...`
   for(cnt=0;cnt<total;cnt++)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&  // это открытая позиция? OP_BUY или OP_SELL
      OrderSymbol()==Symbol()) //инструмент совпадает?
      {
         if(OrderType()==OP_BUY) //открыты позиция BUY
         {
            //проверим, может пора закрывать позицию?
            if(Bid<OrderOpenPrice()) //позиция в убытке то:
            {
               if(CurTime()-OrderOpenTime()>14400) //позиция открыта более 3 баров
               {
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию 
                  return(0); //выходим
               }
               if(High[4]<High[3] && High[2]>High[3] && High[1]<High[2] && Open[1]<=Close[2]) //разворот движения
               {
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию 
                  return(0); //выходим
               }
            }
            if(Bid>OrderOpenPrice()) //позиция в прибыли то:
            {
               if(Bid<=OrderOpenPrice()+8*Point) //прошли 8 пунктов
               {
                  if(Bid<=OrderOpenPrice())
                  {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию 
                     return(0); //выходим
                  }
               }
               if(Bid==OrderOpenPrice()+10*Point) //прошли 10 пунктов
               {
                  if(Bid<=OrderOpenPrice()+5*Point)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию 
                     return(0); //выходим
                  }
               }
               if(Bid==OrderOpenPrice()+15*Point) //прошли 15 пунктов
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-5*Point*StopLoss,OrderTakeProfit(),0,Red);
                  return(0);
               }
               if(High[4]<High[3] && High[2]>High[3] && High[1]<High[2] && Open[1]<=Close[2])
               {
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //закрываем позицию 
                  return(0); //выходим
               }
            }
         }
         if(OrderType()==OP_SELL) //открыта позиция SELL
         {
            //проверим, может пора закрывать позицию?
            if(Ask>OrderOpenPrice()) //позиция в убытке то:
            {
               if(CurTime()-OrderOpenTime()>14400) //позиция открыта более 3 баров
               {
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию 
                  return(0); //выходим
               }
               if(High[4]>High[3] && High[2]<High[3] && High[1]>High[2] && Open[1]>=Close[2]) //разворот движения
               {
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию 
                  return(0); //выходим
               }
            }
            if(Ask<OrderOpenPrice()) //позиция в прибыли то:
            {
               if(Ask>=OrderOpenPrice()+8*Point) //прошли 8 пунктов
               {
                  if(Ask>=OrderOpenPrice())
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию 
                     return(0); //выходим
                  }
               }
               if(Ask==OrderOpenPrice()+10*Point) //прошли 10 пунктов
               {
                  if(Ask>=OrderOpenPrice()+5*Point)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию 
                     return(0); //выходим
                  }
               }
               if(Ask==OrderOpenPrice()+15*Point) //прошли 15 пунктов
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+5*Point*StopLoss,OrderTakeProfit(),0,Red);
                  return(0);
               }
               if(High[4]>High[3] && High[2]<High[3] && High[1]>High[2] && Open[1]>=Close[2])
               {
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //закрываем позицию 
                  return(0); //выходим
               }
            }
         }
      }
      return(0);
   }
}
// конец.



заранее спасибо.

 
попробуй упростить логику входа в рынок (например, если Close[0] > Close[1], то покупаем). Может, просто нет подходящих условий...
И посмотри, нет ли в логах сообщений...
 
спасибо попробую...
 
нет, все равно не торгует :(
 
далее для нахождения ошибок два метода
1. вывод контрольных значений
2. отсекание отдельных кусков кода и проверка правильности их работы
:)
поверь если сам найдешь ошибки это будет лучше для тебя, а тем кто это умеет нужен стимул
 
Profi_R, про отсекание понял, а что такое вывод контрольных значений?
 
вывод контрольных значений - Print(). Желательно, через строчку =) Чтоб потом разобраться где он останавливается.

А вообще, тренироваться порще на скриптах. Например, сделай скрипт, который при определённом условии откроет позицию. А потом - другой, который закроет, и т.д. Так, по маленьким кускам, проще разбираться...