Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 36 из 87 ПерваяПервая ... 2634353637384686 ... ПоследняяПоследняя
  1. 66
    Комментарии
    0
    Темы
    66
    Репутация Pro
     
    В начале пути

    2 Медалей
    а вообще лучше все предусматривать..
    например, начал ты удалять отложку, а она близко к рынку, цикл вылетит с ошибкой..
    если обработка ошибки предусмотрена, то пока то-то да се ордер может стать уже рыночным, а код об этом ни сном ни духом, опять цикл вылетит с ошибкой, в итоге остальные ордера, что еще пока подпадали под категорию удаляемых останутся в рынке и сработавший отложенный останется в рынке..
  2. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от Vladiger Посмотреть сообщение
    PHP код:
    int total OrdersTotal();
       for(
    int i=0i<totali++) {
    ....................................... 
    Тоже не помогло. Результат тот же.
    Помола именно полная смена порядка удаления. Сам не понимаю почему???:confused:
    А в логе что?
    Бывает - не сносит, когда Order Too Close To Market..
    Хотя.. На деме такого не встречал..))

    А скрипт такой - снести всех отложей - у меня работает.. От головы к хвосту..
    Без проблем..))
  3. 1,321
    Комментарии
    7
    Темы
    1547
    Репутация Pro
    Аватар для Владимир Гербатов  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    А в логе что?
    Бывает - не сносит, когда Order Too Close To Market..
    Да ничего там нет в логе. Ошибок нет, все четко. Только создано 5 ордеров, а удалено только 3.
    18:44:07 Test EURUSD,H4: loaded successfully
    18:44:21 Test EURUSD,H4: open #21541620 buy stop 0.10 EURUSD at 1.3750 ok
    18:44:25 Test EURUSD,H4: open #21541621 buy stop 0.10 EURUSD at 1.3755 ok
    18:44:26 Test EURUSD,H4: open #21541622 buy stop 0.10 EURUSD at 1.3760 ok
    18:44:27 Test EURUSD,H4: open #21541623 buy stop 0.10 EURUSD at 1.3765 ok
    18:44:27 Test EURUSD,H4: open #21541624 buy stop 0.10 EURUSD at 1.3770 ok
    18:44:27 Test EURUSD,H4: initialized
    18:44:28 Test EURUSD,H4: delete #21541620 buy stop 0.10 EURUSD at 1.3750 sl: 0.0000 tp: 0.0000 ok
    18:44:28 Test EURUSD,H4: delete #21541622 buy stop 0.10 EURUSD at 1.3760 sl: 0.0000 tp: 0.0000 ok
    18:44:46 Test EURUSD,H4: delete #21541624 buy stop 0.10 EURUSD at 1.3770 sl: 0.0000 tp: 0.0000 ok
    Сообщений об ошибке удаления вообще нет ни в логах ни в самом скрипте, а 2 ордера где то повисли в небытие.

    Цитата Сообщение от EQU Посмотреть сообщение
    А скрипт такой - снести всех отложей - у меня работает.. От головы к хвосту..
    Без проблем..))
    В том то и дело. Скрипт то стандартный из набора MT4, он же там не от балды написан, значит работает у людей. А у меня глюки какие то!!!:thumbsup_002:
    Вообщем решил проблему удаляя ордера в обратном порядке.
    Тупо конечно, но впрочем какая разница!:)
  4. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от Vladiger Посмотреть сообщение
    PHP код:
    int total OrdersTotal();
       for(
    int i=0i<totali++) {
    ....................................... 
    Тоже не помогло. Результат тот же.
    Помола именно полная смена порядка удаления. Сам не понимаю почему???:confused:
    нормальный советник всегда должен иметь функцию проверки ордеров в рынке....

    у меня они отдельные и для бая и для селла(на всякий пожарный случай)-возвращают колличество ордеров в рынке......
    а так же отдельные и функции удаления..

    а потом конструкция типа такой:
    if(flag_delete && check_open_buy()!=0) dell_buy();// тут как раз та функция с циклом
    if(flag_delete && check_open_buy()==0) flag_delete=false; // усё нету ордеров прекращаем вызывать удаление...


    на самом деле у меня и флаги разные...:D
    flag_del_buy, flag_del_sell


    где то там... flag взвели .... а потом прога в потоке "start()" его отрабатывает..
  5. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от Vladiger Посмотреть сообщение
    Да ничего там нет в логе. Ошибок нет, все четко. Только создано 5 ордеров, а удалено только 3.

    Сообщений об ошибке удаления вообще нет ни в логах ни в самом скрипте, а 2 ордера где то повисли в небытие.

    В том то и дело. Скрипт то стандартный из набора MT4, он же там не от балды написан, значит работает у людей. А у меня глюки какие то!!!:thumbsup_002:
    Вообщем решил проблему удаляя ордера в обратном порядке.
    Тупо конечно, но впрочем какая разница!:)
    если торговый поток будет занят, а проверки наличия ордеров нету- то и это работать не будет:smartass:
  6. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от Vladiger Посмотреть сообщение
    Да ничего там нет в логе. Ошибок нет, все четко. Только создано 5 ордеров, а удалено только 3.

    Сообщений об ошибке удаления вообще нет ни в логах ни в самом скрипте, а 2 ордера где то повисли в небытие.

    В том то и дело. Скрипт то стандартный из набора MT4, он же там не от балды написан, значит работает у людей. А у меня глюки какие то!!!:thumbsup_002:
    Вообщем решил проблему удаляя ордера в обратном порядке.
    Тупо конечно, но впрочем какая разница!:)
    У меня не из набора..;)

    Код:
    #property copyright "DelAllPending Copyright © 2009, EQU"
    
    int start(){
    int total=OrdersTotal();
    string s="kill All PENDING\n";
    Comment(s);
    for(int n=0;n<total;n++){
      if(!OrderSelect(n, SELECT_BY_POS))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderType()>1){
        if(!OrderDelete(OrderTicket()))
           s=s+OrderTicket()+" ERR:"+GetLastError()+"\n";
           else{s=s+OrderTicket()+" : OK\n";n--;}// Фишка - здесь..
      }
    }
    Comment(s);//Sleep(2000);Comment("");
    return(0);
    }
  7. 66
    Комментарии
    0
    Темы
    66
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от Vladiger Посмотреть сообщение
    В том то и дело. Скрипт то стандартный из набора MT4, он же там не от балды написан, значит работает у людей. А у меня глюки какие то!!!:thumbsup_002:
    Вообщем решил проблему удаляя ордера в обратном порядке.
    Тупо конечно, но впрочем какая разница!:)
    скрипт не от балды это верно..
    но там черным по белому написано, что удаляется первый из списка ордер и баста..
  8. 1,321
    Комментарии
    7
    Темы
    1547
    Репутация Pro
    Аватар для Владимир Гербатов  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от keekkenen Посмотреть сообщение
    скрипт не от балды это верно..
    но там черным по белому написано, что удаляется первый из списка ордер и баста..
    Ну да, точно!!! Гы-ы-ы-ы... А я и не заметил.:thumbsup_002:

    //+------------------------------------------------------------------+
    //| script "delete first pending order" |
    //+------------------------------------------------------------------+

    более того, там в цикле, после удаления стоит break;
    Всё верно.:geek:
  9. 1,321
    Комментарии
    7
    Темы
    1547
    Репутация Pro
    Аватар для Владимир Гербатов  
    Мастер форумных наук

    5 Медалей
    Код:
    for(int n=0;n<total;n++) {
    	if (OrderSelect(n, SELECT_BY_POS) == false || OrderSymbol() != Symbol()) continue;
    	if (OrderType() > 1) {
    		if (OrderDelete(OrderTicket()) == false) {
    			s=s+OrderTicket()+" ERR:"+GetLastError()+"\n";
    		} else {
    			s=s+OrderTicket()+" : OK\n";
    			n--; // Фишка - здесь..
    		}
    	}
    }
    А вот она истина!!! Действительно фишка в n--;
    Следуя этой логике, после удаления первого ордера, все остальные смещаются в позициях на единицу, т.е второй по счету ордер становится первым после удаления первого, а в простом цикле я эту особенность не учитывал.

    Спасибо, разобрался!:smartass:
  10. 66
    Комментарии
    0
    Темы
    66
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от Vladiger Посмотреть сообщение
    А вот она истина!!! Действительно фишка в n--;
    если использовать такой подход for(int n=total-1;n>=0;n--), то вышеописанная проблема испаряется..

Вверх
РегистрацияX

чтобы писать, читать, комментировать