MT4. Вопрос по написанию советника: не срабатывает условие завязанное на рыночной цене - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А ничего он там не пишет (((
Пишет, что идут покупки (как и следует),
но о попытке закрыть Лонги ничего не пишет.
Ваше сообщение "Пытаюсь закрыть бай" не указывается нигде
Значит условие не выполняется. Об этом я вам и пытался сказать ранее смотрите другую часть кода.
Почему режим отладки включается на EUR/USD?
Можно изменить как-то на другой инструмент?
В метаедиторе сервис -> настройки закладка "отладка" установите галочку "использовать указанные настройки" и настройте так как вам надо.
Значит условие не выполняется. Об этом я вам и пытался сказать ранее смотрите другую часть кода.
В метаедиторе сервис -> настройки закладка "отладка" установите галочку "использовать указанные настройки" и настройте так как вам надо.
Спасибо.
На счет условия - они выполняются, но видимо ручки кривоваты )))
Спасибо.
На счет условия - они выполняются, но видимо ручки кривоваты )))
Если не пишет "пытаюсь закрыть бай" значит одно из условий
не выполняется.
Но как может быть, что в тестере позы открываются, а в отладчике - нет ?
Вроде в МТ4 отладка запускается в реальном времени. Поэтому запускайте на демо. Может у вас отключена автоторговля.
Если не пишет "пытаюсь закрыть бай" значит одно из условий
}
не выполняется.
Вроде в МТ4 отладка запускается в реальном времени. Поэтому запускайте на демо. Может у вас отключена автоторговля.
Да, все верно - в режиме реального времени запускается.
Так может не открываются сделки, потому что счет, на котором я запускаю отладку - нулевой?
... понятно, все равно не открываются позы...
буду дальше курить код
ухх нелегкий ваш труд )))
Может попробуем сначала?:
Как выглядит мой код:
int start()
{
if(iTime(_Symbol,NULL,1) == prevtime) return(0);
prevtime=iTime(_Symbol,NULL,1);
//----------------УСЛОВИЯ ДЛЯ ВХОДА В LONG-------------------------------------------------------------------+
if(здесь условия перечислены)
Print("Пытаюсь открыть бай");
//----------------ОТКРЫТИЕ ЛОНГ-ПОЗИЦИИ----------------------------------------------------------------------+
{
ticketB=OrderSend(Symbol(), OP_BUY, Lots, Ask, 10, Low[1]-SL*Point, 0);
if(ticketB<0)
{Alert("Покупка Лонга не прошла");}
Может чего в нем не так? Почему он в процессе отладки выдает мне сообщение "Покупка Лонга не прошла" ?
Может попробуем сначала?:
Как выглядит мой код:
int start()
{
if(iTime(_Symbol,NULL,1) == prevtime) return(0);
prevtime=iTime(_Symbol,NULL,1);
//----------------УСЛОВИЯ ДЛЯ ВХОДА В LONG-------------------------------------------------------------------+
if(здесь условия перечислены)
Print("Пытаюсь открыть бай");
//----------------ОТКРЫТИЕ ЛОНГ-ПОЗИЦИИ----------------------------------------------------------------------+
{
ticketB=OrderSend(Symbol(), OP_BUY, Lots, Ask, 10, Low[1]-SL*Point, 0);
if(ticketB<0)
{Alert("Покупка Лонга не прошла");}
Может чего в нем не так? Почему он в процессе отладки выдает мне сообщение "Покупка Лонга не прошла" ?
1. Нормализуйте значение Low[1]-SL*Point с помощью функции NormalizeDouble()
2. Сравните цену Ask и Low[1]-SL*Point() возможно что вы ставите стоп слишком близко.
3. После попытки установить ордер напишите
if (ticketB<=0)
{
int err = GetLastError() ;
if (err>0) Print("Покупка Лонга не прошла. Ошибка "+err);
}
Смотрите в журнале код ошибки и ищите причину.
Функцию Alert() я бы не стал использовать в советнике если предполагается работа на полном автомате. Лучше выводить сообщения в журнал.
Если не пишет "пытаюсь закрыть бай" значит одно из условий
не выполняется.
Вроде в МТ4 отладка запускается в реальном времени. Поэтому запускайте на демо. Может у вас отключена автоторговля.
Точно, забыл разрешить автоторговлю.
Спасибо. Позы открываются
1. Нормализуйте значение Low[1]-SL*Point с помощью функции NormalizeDouble()
2. Сравните цену Ask и Low[1]-SL*Point() возможно что вы ставите стоп слишком близко.
3. После попытки установить ордер напишите
if (ticketB<=0)
{
int err = GetLastError() ;
if (err>0) Print("Покупка Лонга не прошла. Ошибка "+err);
}
Смотрите в журнале код ошибки и ищите причину.
Функцию Alert() я бы не стал использовать в советнике если предполагается работа на полном автомате. Лучше выводить сообщения в журнал.
SL выставляется как и запланировано :) Они выставляются.
Что касается п.3, то Вы здесь правы. Робот будет на автомате работать и эти сообщения со звуками будут мешать от ручной торговли ))) Как все будет готов - пропишу это, а пока // :)
Буду дальше ковыряться. Сегодня с коллективной помощью шаг вперед сделал - это круто! Спасибо
SL выставляется как и запланировано :) Они выставляются.
Что касается п.3, то Вы здесь правы. Робот будет на автомате работать и эти сообщения со звуками будут мешать от ручной торговли ))) Как все будет готов - пропишу это, а пока // :)
Буду дальше ковыряться. Сегодня с коллективной помощью шаг вперед сделал - это круто! Спасибо
Почитайте справку к функции OrderSend() в самом конце примечание.
....
Нельзя использовать расчетную либо ненормализованную цену. .... В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS).
Цены должны быть нормализованы. Для тестера может и так сойдет, но для реала нет.