Примеры: Ошибка 146 ("Торговый поток занят") и как с ней бороться - страница 2

 
lukas1:
Вопрос в том, что расчет в соответствии с пунктом 2. нигде не используется и мне кажется его можно пропустить. Ведь мы всё равно повторно расчитывам уровни в пункте 6. Или я не прав?
Да, вы правы ;)
Но если ждать освобождения потока не придется, и обновлять ничего не надо будет.
 
Не дождался ответа и выкинул из эксперта пункт 2. Но. 10 штук модифицированных DoublePending_beta.mq4 не торгуют (на 10 графиках в одном терминале). Вставил первичный расчет - опять всё заработало.  Вопрос - какую функциональную задачу выполняет предварительный расчет(пункт 2), если потом эти данные пересчитываются?
 
lukas1:
Не дождался ответа и выкинул из эксперта пункт 2. Но. 10 штук модифицированных DoublePending_beta.mq4 не торгуют (на 10 графиках в одном терминале). Вставил первичный расчет - опять всё заработало.
Как именно они "не торгуют"? Какие ошибки возникают? Не получется "поделить" торговый поток?

lukas1:
Вопрос - какую функциональную задачу выполняет предварительный расчет(пункт 2), если потом эти данные пересчитываются?
Ни какой.
На самом деле, можно написать
    if ( RefreshRates() )
    {
        // пересчитываем уровни Стоп Лосс и Тейк Профит
        ...
    }
Тогда пересчет будет происходить только в случае появления новых данных.
 
<Как именно они "не торгуют"? Какие ошибки возникают? Не получется "поделить" торговый поток?>
В начале открытия терминала ничего не происходит (по-видимому это действует задержка 30 сек). Далее возникает ошибка # 146 от нескольких экспертов, т.е. много таких. Однократно встречается # 4107 (Неправильный параметр цены для торговой функции). Ну, и в общем - эксперты не начинают устанавливать отложенные ордера, а должны бы.
 
lukas1:
Далее возникает ошибка # 146 от нескольких экспертов, т.е. много таких.
Эксперты начинают торговать сразу после запуска?

Вы, случайно, не используете функцию TradeIsNotBusy() в функции init() эксперта?
Если да, то при каждом запуске каждого эксперта глобальная переменная-семафор обнуляется, и все эксперты считают, что можно торговать.
 
Ура. Я разобрался. Отложил задачу на несколько дней... и разобрался. Короче, проблемыа в торговле 11 экспертами на одном терминале должна была решаться так:

1.// определяем необходимость входа в рынок
2.// рассчитываем уровни Стоп Лосс, Тейк Профит и размер лота
3.// ждём освобождения торгового потока и занимаем его (если произошла ошибка,
4.// выходим)
5.// обновляем рыночную информацию
6.// пересчитываем уровни Стоп Лосс и Тейк Профит
7.// открываем позицию

А пункт 2 был безусловным, потому что пункт 1 там где-то в начале и я его потерял (в сущности). Если пункт 1 и 2 будет условием для перехода к пункту 3, то мы не будем непрерывно запрашивать освободился ли торговый поток или нет. Т.е. во втором пункте появилось условие нухно нам что-то пересчитать или не нужно.
А, вообще-то огромное, человеческое Спасибо за информацию и статью тоже.
 
Работаю на конкурсном счете (Демо, 57586). При попытке эксперта открыть позицию вылетают сообщения 133 и 146. Отключил советника, попытался поставить ордер вручную (Ф9). Все три кнопки неактивны, выпадающие меню в окне установки ордера - пустые. В чем причина? Я не работал продолжительно время, но никаких ограничений по уровню активности в Правилах нет.
Игорь
 
ingvar:
Работаю на конкурсном счете (Демо, 57586). При попытке эксперта открыть позицию вылетают сообщения 133 и 146. Отключил советника, попытался поставить ордер вручную (Ф9). Все три кнопки неактивны, выпадающие меню в окне установки ордера - пустые. В чем причина? Я не работал продолжительно время, но никаких ограничений по уровню активности в Правилах нет.
ERR_TRADE_DISABLED 133 Торговля запрещена
 
komposter:
ForexFox:
Хотел спросить, а разве не поможет в решении этой проблемы следующее :
if(IsStopped())
{
Print("Эксперт был остановлен пользователем!");
TradeIsBusy=0;
return(-1);
}
и тогда, при ручном удалении эксперта, переменная обнулится ?
Переменная - одна на всех экспертов. Если её обнулять из каждого эксперта, начнётся бардак ;)
Например, если удалить с графика эксперт, который в данный момент не торгует, он обнулит переменную, и несколько других экспертов "подерутся" за торговый поток.

Тогда проблему можно решить немного по другому. Значение глобальной переменной, равное нулю принимаем за зелёный свет (так же как Вы и сказали), а неравное нулю - за красный. Неравное нулю - имеется ввиду не семафорная (переизбыточная) единица, а целое MAGICMA конкретного советника. Таким образом, "уходя", советник просто проверит: не оставил ли он после себя лишнего "мусора" (сравнив глобальную переменную торгового потока со своим MAGICMA), и если оставил, то "уберёт за собой", освобождая торговый поток другим, жаждущим поторговать советникам.

Ведь "Решается проблема просто - не надо удалять эксперта с графика, если он торгует ;)" - это не выход. А скорее вход. Вход в дебри леса, когда увеличивается риск сбоя из-за присутствия человеческого фактора. ;)

Благодарю за статью! Нужная и полезная.

 
coaster:

Тогда проблему можно решить немного по другому. Значение глобальной переменной, равное нулю принимаем за зелёный свет (так же как Вы и сказали), а неравное нулю - за красный. Неравное нулю - имеется ввиду не семафорная (переизбыточная) единица, а целое MAGICMA конкретного советника. Таким образом, "уходя", советник просто проверит: не оставил ли он после себя лишнего "мусора" (сравнив глобальную переменную торгового потока со своим MAGICMA), и если оставил, то "уберёт за собой", освобождая торговый поток другим, жаждущим поторговать советникам.

Ведь "Решается проблема просто - не надо удалять эксперта с графика, если он торгует ;)" - это не выход. А скорее вход. Вход в дебри леса, когда увеличивается риск сбоя из-за присутствия человеческого фактора. ;)

Согласен, красивое решение. Надо будет реализовать.

Спасибо за идею ;)

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