Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 607

 
Здравствуйте, если советник устанавливает только отложенные ордера и не сопровождает их, должен ли он уметь обрабатывать ошибки?
 
Example2:
Здравствуйте, если советник устанавливает только отложенные ордера, должен ли он уметь обрабатывать ошибки?

Да.

Например.

 
artmedia70:

Да.

Например.


А такая функция подойдет для обработки ошибок?
int ERRORS (int Error)  // Error - номер ошибки  
  {
  if(Error==0)
      return(0);        // Нет ошибки      
  // 4-торговый сервер занят,132-рынок закрыт,137-брокер занят
  if(Error==4||Error==132||Error==137)  
      {
      Sleep(240000);    // Пауза 240 сек.
      return(1);        // Сообщаем о преодол. ошибке
      }
  // 128,142,143 - истек срок ожидания и т.д.
  if(Error==128||Error==142||Error==143) 
      {      
      Sleep(60000);     // Пауза 60 сек.
      return(1);        // Сообщаем о преодол. ошибке 
      }    
  // 135-цена изменилась,138-цена устарела
  if(Error==135||Error==138)               
      {      
      return(1);        // Сообщаем о преодол. ошибке
      }        
  // 6-нет связи,129-неправильные цены,
  // 130-неправильные стопы,136-нет цен
  if(Error==6||Error==129||Error==130||   
  Error==136||Error==137||Error==138)    
      {
      Sleep(5000);      // Пауза 5 сек. 
      return(1);        // Сообщаем о преодол. ошибке
      }
  // 146-подсистема торговли занята
  if(Error==146)               
      {      
      // Пока подсистема занята
      while(IsTradeContextBusy())
         {
         Sleep(10);     // Пауза 0.01 сек.
         }
      return(1);        // Сообщаем о преодол. ошибке
      }         
  // Критическая ошибка
  Alert("Ошибка №",Error,". Дальнейшая работа советника невозможна."); 
  return(2);          // Сообщаем о критич. ошибке
  }
 
Example2:
А такая функция подойдет для обработки ошибок?

Что-то слишком короткая. Даже эта и то не полноценная.

//*********************ф-ия обработки ошибок*************************|
int Fun_Error(int Error) 
{
      switch(Error)
   { // Преодолимые ошибки
   case 0: return(1);
   case 4: //Print("Торговый сервер занят. Пробуем ещё раз...");
   Sleep(500); // Простое решение
   return(1); // Выход из функции
   case 128:   //Истек срок ожидания совершения сделки
   return(1);
   case 129: //Print("Цена изменилась. Пробуем ещё раз...");
   return(1); // Выход из функции
   case 132: //Print("Рынок закрыт. Пробуем ещё раз...");
   Sleep(123000); // Это было сделано для робо. У них первые 2 минуты в понедельник рынок закрыт, а надо было ставить ордера в 00:00
   return(1); // Выход из функции
   case 135: //Print("Цена изменилась. Пробуем ещё раз...");
   RefreshRates(); // Обновим данные
   return(1); // Выход из функции
   case 136: //Print("Нет цен. Ждём новый тик...");
   while(RefreshRates()==false) // До нового тика
   Sleep(1); // Задержка в цикле
   return(1); // Выход из функции
   case 137: //Print("Брокер занят. Пробуем ещё раз...");
   Sleep(500); // Простое решение
   return(1); // Выход из функции
   case 138: //Print("Новые цены. Пробуем ещё раз...");
   Sleep(1); // Задержка в цикле
   return(1); // Выход из функции
   case 146: //Print("Подсистема торговли занята. Пробуем ещё...");
   Sleep(500); // Простое решение
   return(1); // Выход из функции
   case 4107: //Print("Неправильный параметр цены для торговой функции. Пробуем ещё...");
   Sleep(50); // Простое решение
   return(1); // Выход из функции
// Критические ошибки
   case 1:
   return(0);
   case 2: Alert("Общая ошибка. Перегрузите терминал и\или компьютер.");
   return(0); // Выход из функции
   case 5: Alert("Старая версия терминала.");
   //Work=false; // Больше не работать
   return(0); // Выход из функции
   case 64: Alert("Счет заблокирован.");
   //Work=false; // Больше не работать
   return(0); // Выход из функции
   case 130: Alert("Неправильные стопы.");
   return(0); // Выход из функции
   case 133: Alert("Торговля запрещена.");
   return(0); // Выход из функции
   case 134: Alert("Недостаточно денег для совершения операции.");
   return(0); // Выход из функции
   case 4051: Alert("Недопустимое значение параметра функции.");
   return(0); // Выход из функции
   case 4108: Alert("Неверный номер тикета.");
   return(0); // Выход из функции
   default: //Print("Возникла ошибка ",Error); // Другие варианты
   return(0); // Выход из функции
   }
}//******************************************************************|

Соответственно если ф-ция вернула 1 повторяем попытку поставить ордер, если 0 то выход из функции открытия ордеров.

 
Всем привет! Кто-нибудь пользуется отладкой в МТ4? В МТ5 все работает здесь не идет.
 

Граждане, подскажите, кто знает, почему на терминале Альпари не получается выставить ордер.

Функция OrderSend выглядит так

ticket_b = OrderSend(Symbol(), OP_BUY, Lot_b, (MarketInfo (Symbol(), MODE_ASK)), 3, ((MarketInfo (Symbol(), MODE_ASK))-SL), ((MarketInfo (Symbol(), MODE_ASK))+TP), "V 5.11 market", Magic, 0, CLR_NONE);

SL = NormalizeDouble (StopLoss * RealPoint,Digits);
TP = NormalizeDouble (TakeProfit * RealPoint,Digits);

Параметры 
Lot_b
Magic

Объявлены и посчитаны ранее.

RealPoint посчитан и равен 0,1

Параметров равных нулю нет. Проверял.

Минимальная дистанция для стопа и профита по условиям терминала = 0.1

Терминал выдает ошибку 130 и пишет про неверный стоп или профит.

Параметры SL и TP равны соответственно 11 и 1 (после нормолизации).

На терминалах Афорекс, Diven FX, ForexClub, AlfaForex - никаких проблем с тем же кодом.

 
fmv_for_a_way:

Граждане, подскажите, кто знает, почему на терминале Альпари не получается выставить ордер.

Функция OrderSend выглядит так

Параметров равных нулю нет. Проверял.

Минимальная дистанция для стопа и профита по условиям терминала = 0.1

Терминал выдает ошибку 130 и пишет про неверный стоп или профит.

Параметры SL и TP равны соответственно 11 и 1 (после нормолизации).

На терминалах Афорекс, Diven FX, ForexClub, AlfaForex - никаких проблем с тем же кодом.


покупаете/продаете без стопа и тейка sl=0;tp=0, потом модифицируете-->sl=100;tp=300
 
pako:

покупаете/продаете без стопа и тейка sl=0;tp=0, потом модифицируете-->sl=100;tp=300


Такая мысль уже посещала от отчаяния...

Однако, вопрос в том, почему при всех верно указанных параметрах ордер не выставляется.

Поскольку это график золота, то цифры 11 и 1 вполне корректны. В переводе это означает 10 и 110 пунктов.

Проверял цены и параметры стопа и профита. Между профитом и стопом ровно 120 пунктов, а цена открытия почему-то = 0,000.

 
2014.05.21 10:35:52.480 '6991883': order buy stop 0.25 XAUUSD opening at 1293.100 sl: 1282.100 tp: 1294.100 failed [Invalid S/L or T/P]

Попытка выставить отложенный ордер тоже ничего не принесла....

Все чудесатее и чудесатее.

 

Всем доброго времени суток!

Подскажите пожалуйста как наиболее оптимальным образом закодировать следующее условие

Если все без исключения свечки с 1 по 20 медвежии (кол.пунктов между открытием и закрытием каждой свечи значение не имеет)

Открыть ордер.

Спасибо.

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