Ошибка 129, обьясните пожалуста!!
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Ошибка 129, обьясните пожалуста!!

  1. #1
    Новичок
    Регистрация
    23.08.2012
    Сообщений
    29
    Promo (¢)
    330
    Благодарности
    Получено: 1
    Отправлено: 12

    Ошибка 129, обьясните пожалуста!!

    Доброго дня! Я третий день не могу понять, с чем же может быть связана ошибка 129. Вот код, в нем, чтоб очень не разбираться, есть строки ордерсенд. Цену нормализовал. Вообще не пойму, в чём дело! Хотя бы тиоритически!

    Код:
    /+------------------------------------------------------------------+
     //| советник.mq4 |
     //| Copyright 2012, MetaQuotes Software Corp. |
     //|
     //+------------------------------------------------------------------+
     #property copyright "Copyright 2012, MetaQuotes Software Corp."
     #property link "http://www.metaquotes.net"
    
     #include <WinUser32.mqh>
     extern double lot = 1; 
     extern int taymfreym = 0 ; 
     extern double stoplos = 200 ; 
     extern double takeprofit = 500 ; 
     extern int magicnumber = 350;
     extern int ControlBar = 1; // номер бара на котором снимаем показания индикатора 
    
    
     void BreakPoint()
     {//if (!IsVisualMode()) return(0);
     keybd_event (19,0,0,0);
     Sleep (10);
     keybd_event (19,0,2,0);
     }
    
     //+------------------------------------------------------------------+
     //| expert initialization function |
     //+------------------------------------------------------------------+
     int init()
     {
     //----
     Print ( " НачалоНачал " ); 
     //----
     return(0);
     }
     //+------------------------------------------------------------------+
     //| expert deinitialization function |
     //+------------------------------------------------------------------+
     int deinit()
     {
     //----
    
     //----
     return(0);
     }
     //+------------------------------------------------------------------+
     //| expert start function |
     //+------------------------------------------------------------------+
     int i;
     int start()
     {
     //Print ( " Начало " ); 
     //----
     
     double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, 1),
     strela2 = iCustom (NULL, taymfreym, "индикатор", 3, 1);
     int BUY = 0, SELL = 0, ticket; Sleep(600);
     
    
     for (int i = OrdersTotal() - 1; i >= 0; i--)
     { Print (" i " , i );
     if (!OrderSelect (i, SELECT_BY_POS)) continue; // Если есть следующий
     if (OrderSymbol() != Symbol()) continue; // Не наш фин. инструм
     if (OrderMagicNumber() != magicnumber) continue;
     int type = OrderType();
     if (type > 1) continue;
     ticket = OrderTicket();
     if (type == 0) {BUY++; Print ("BUY++ " , BUY ," ticket ", ticket); break;}
     if (type == 1) {SELL++; Print ("SELL++ " , SELL ," ticket ", ticket); break;}
     }
     if (strela1 < strela2)
     {Sleep(600);
     if (SELL > 0) udalenie (OP_SELL);Sleep(600);
     if (BUY == 0)
     {Sleep(600);
     OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits), NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 
     int Error=GetLastError(); Print ("strela1<strela2&&BUY==0&&SELL==0 " , Error ," NormalizeDouble(Ask, Digits) ",NormalizeDouble(Ask, Digits)," stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits) ",
     NormalizeDouble ( Bid- (stoplos*Point),Digits)," takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));Sleep(60);
     if (Error==129)continue; }
    
    
     }
     else if (strela1 > strela2)
     {Sleep(600);
     if (BUY > 0) udalenie (OP_BUY);Sleep(600);
     if (SELL == 0)
     {Sleep(600);Print( "Sleep(600) " ); 
     OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits), NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
     Error=GetLastError(); Print ("strela1>strela2&& OP_SELL " , Error ," Bid ",Bid," stoplos= NormalizeDouble( Ask- (stoplos*Point),Digits) ",
     NormalizeDouble (Ask- (stoplos*Point),Digits)," takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));Sleep(60);
     Print( "strela1>strela2&& OP_SELL " , Error ," (stoplos*Point) ",(stoplos*Point)," Point ", Point," Digits ", Digits);
     if (Error==129)continue;Print( "continue " ); }
     }
     
     BreakPoint(); Sleep(600); 
     //----
     return (0);
     }
     //+------------------------------------------------------------------+
    
     void udalenie (int Type = -1)
     {
     int total = OrdersTotal();
     for (i = total - 1; i >= 0; i--)
     {
     if (!OrderSelect (i, SELECT_BY_POS)) continue;
     if (OrderSymbol() != Symbol()) continue; // Не наш фин. инструм
     if (OrderMagicNumber( ) != magicnumber) continue;
     int type = OrderType();
     if (type > 1) continue;
     if (Type > -1) if (Type != type) continue;
     bool result = false;
     switch (type)
     { 
     case OP_BUY : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
     case OP_SELL : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
     }
     if (!result)
     {
     int error = GetLastError(); 
     string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
     Print (errorcomment);
     } 
     } 
     }

    Вы не можете благодарить!
    Последний раз редактировалось Hamster; 09.11.2012 в 13:37. Причина: +code

  2. #2
    Теоретик Аватар для winner
    Регистрация
    26.09.2012
    Адрес
    Оренбург
    Сообщений
    1,476
    Promo (¢)
    5,224
    Благодарности
    Получено: 484
    Отправлено: 745
    Ошибка ERR INVALID PRICE 129 - Неправильная цена.

    Скорей всего написанный советник любит очень быстро открывать ордера, как вариант можно попробовать на ECN счёте.

    Вы не можете благодарить!

  3. #3
    Новичок
    Регистрация
    23.08.2012
    Сообщений
    29
    Promo (¢)
    330
    Благодарности
    Получено: 1
    Отправлено: 12
    Может. А слипы, собствено, разве не могут этому противостоять?[COLOR="Silver"]

    [SIZE=1]---------- Добавлено в 16:54 ---------- Предыдущее сообщение было размещено в 16:53 ----------[/SIZE]

    [/COLOR]На каком на ECN счёте? Меня пока интиресует альпари, фииксстарт..

    Вы не можете благодарить!

  4. #4
    Теоретик Аватар для FX-Steps
    Регистрация
    15.09.2012
    Сообщений
    2,327
    Promo (¢)
    210
    Благодарности
    Получено: 345
    Отправлено: 567
    Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
    Доброго дня! Я третий день не могу понять, с чем же может быть связана ошибка 129. Вот код, в нем, чтоб очень не разбираться, есть строки ордерсенд. Цену нормализовал. Вообще не пойму, в чём дело! Хотя бы тиоритически!
    Для полноты картины скиньте саму ошибку полностью.

    Что такое ECN и в чём главная особенность ECN-брокера?

    Система ECN (Electronic Communication Network) представляет собой электронную торговую сеть, в которой реализован механизм автоматического сопоставления заявок на покупку и продажу по цене, удовлетворяющей обе стороны сделки. Главными участниками ECN-систем являются банки, крупные маркет-мейкеры, инвестиционные фонды, брокеры и дилеры.

    Отличительной особенностью ECN-счетов является тот факт, что между брокером, применяющим ECN-технологию, и клиентом не существует конфликта интересов. RoboForex в качестве ECN-брокера передаёт все сделки клиентов своим контрагентам - Integral и Currenex, которые предоставляют ликвидность. При такой модели брокер заинтересован в росте объёмов торгов, поскольку он получает прибыль в виде комиссии за сделки.


    http://www.roboforex.ru/trade-condit...tegral-fxgrid/

    Вы не можете благодарить!
    Последний раз редактировалось Hamster; 09.11.2012 в 13:40.

  5. #5
    Новичок Аватар для subus
    Регистрация
    05.08.2012
    Сообщений
    37
    Promo (¢)
    360
    Благодарности
    Получено: 9
    Отправлено: 26
    У меня похожее было. В советник внес ошибку, сам не знаю где. Начало бить 129. Кинул исходник, который без ошибки. Не помогло. Два дня мучался. В итоге зачистил тестер, зачистил папку эксперт, главное mqlcache удалить.Поставил исходник.Выключил машину. На следующийдень включил, все нормально.

    Вы не можете благодарить!

  6. #6
    Новичок Аватар для subus
    Регистрация
    05.08.2012
    Сообщений
    37
    Promo (¢)
    360
    Благодарности
    Получено: 9
    Отправлено: 26
    Кое ,что подправил, поставил на демо ,открыл сделки в обе стороны. Ошибки 129 и близко нет.

    Вы не можете благодарить!

  7. #7
    Новичок Аватар для subus
    Регистрация
    05.08.2012
    Сообщений
    37
    Promo (¢)
    360
    Благодарности
    Получено: 9
    Отправлено: 26
    ERR_INVALID_PRICE 129
    Неправильная цена bid или ask, возможно, ненормализованная цена.
    Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку.
    Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
    При открытии рыночного ордера (OP_SELL или OP_BUY) в качестве цены открытия могут использоваться только
    самые последние цены Bid (для продажи) или Ask (для покупки).
    Если операция проводится по финансовому инструменту, отличному от текущего, то для получения
    последних котировок по этому инструменту необходимо воспользоваться функцией MarketInfo() с параметром MODE_BID или MODE_ASK.
    Нельзя использовать расчетную либо ненормализованную цену.
    Если запрашиваемой цены открытия не было в ценовом потоке либо запрашиваемая цена не нормализована в соответствии с количеством знаков после десятичной точки,
    то будет сгенерирована ошибка 129 (ERR_INVALID_PRICE).
    Если запрашиваемая цена открытия сильно устарела, то независимо от значения параметра slippage будет сгенерирована ошибка 138 (ERR_REQUOTE).
    Если же запрашиваемая цена устарела, но ещё присутствует в ценовом потоке, то позиция открывается по текущей цене и только в том случае, если текущая цена попадает в диапазон price+-slippage.

    Вы не можете благодарить!

  8. #8
    Теоретик
    Регистрация
    08.06.2013
    Адрес
    Украина, Полтава
    Сообщений
    263
    Promo (¢)
    0
    Благодарности
    Получено: 8
    Отправлено: 2
    Согласен с subus, для начала лучше попробовать изменить логику программы и все точки открытия ордера убрать\заменить на какое-то элементарное (со стандартными значиниями аргументов функции OrderSend). Если проблема в отправке ордера - тогда попробовать поэксперементировать с его параметрами. Я бы начал с обновления цены, а после - попытки вместо NormalizeDouble(Bid, Digits) написать просто Bid.

    Вы не можете благодарить!

  9. #9
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    473
    Promo (¢)
    690
    Благодарности
    Получено: 147
    Отправлено: 79
    Учитывая применение функции Sleep, использование RefreshRates просто необходимо.
    Эксперты и скрипты работают с собственной копией исторических данных. Копия данных по текущему инструменту создается при первоначальном запуске эксперта или скрипта. При каждом следующем запуске эксперта (напомним, что скрипт выполняется однократно и не зависит от приходящих тиков) первоначально созданная копия обновляется. За то время, пока эксперт или скрипт работает, может прийти один или несколько новых тиков, поэтому данные могут устареть.
    Т.е. насколько я понимаю пока советник полностью не выполнит код функция start() повторно не выполняется, т.е. обновление данных не происходит...

    Вы не можете благодарить!

  10. #10
    Новичок Аватар для zkeekz
    Регистрация
    18.06.2013
    Сообщений
    166
    Promo (¢)
    -10
    Благодарности
    Получено: 7
    Отправлено: 12
    Если сорветник запускается на пятизнаке, то слип 3пп может быть просто недостаточным, поэтому и выдается указанная ошибка, Нужно просто попробовать увеличить размер проскальзывания.
    PHP код:
    OrderSend (Symbol( ), OP_BUYlot,NormalizeDouble(AskDigits), 30NormalizeDoubleBid- (stoplos*Point),Digits), NormalizeDoubleAsk+( takeprofit*Point),Digits), NULLmagicnumber0CLR_NONE); 

    Вы не можете благодарить!

Страница 1 из 2 1 2 ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •