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

 
AlexeyVik:

Извини меня за настойчивость, но мне всё-же хочется понять почему ты не хочешь пользоваться переводчиком, если знаешь английский так-же как я, то-есть никак.

Вот что означает полученное предупреждение

А конкретней, функция OrderClose() при успешном выполнении возвращает true или false в случае неудачи, вот это и надо проверить... успешно-ли выполнена функция.

И почему ты решил что предупреждение как-то связано с номером ордера в списке? Не понимаю...

 Ну, с английским-то я могу справиться и без посторонней помощи, а вот с mql4 что-то не получается. Объясни, чем проверить  успешно - не успешно, какой функцией или чем еще? А связано с номером тикета не предупреждение, а мои поиски проверки выполнения функции, проводимые без понимения сути.

 
rapid_minus:

 Ну, с английским-то я могу справиться и без посторонней помощи, а вот с mql4 что-то не получается. Объясни, чем проверить  успешно - не успешно, какой функцией или чем еще? А связано с номером тикета не предупреждение, а мои поиски проверки выполнения функции, проводимые без понимения сути.


 Совсем худо. Владимир, Вы процитировали фразу, содержащую однозначный и кристально ясный ответ на Ваш вопрос; и тут же этот вопрос повторили, упрекая ответившего: 

" ... функция OrderClose() при успешном выполнении возвращает true или false в случае неудачи, вот это и надо проверить... успешно-ли выполнена функция... " 

Не пора ли начать вдумываться в суть?  

 
tara:

Бзззз... Ну вы просто заставляете изучить mql4.

Не ставил я себе такой цели. Была поставлена чисто локальная задача - самому написать работающего советника по своей стратегии, изучая язык только в пределах минимально необходимого объема. Перечитав кучу постов в разных ветках форума, я только укрепился в уверенности реальности поставленной задачи, т.к. увидел множество трейдеров, написавших экспертов на mql, при этом оставаясь безграмотными даже в русском языке.

Но вижу, что в этой ветке знатоки не желают помогать, а желают заставить изучить язык. Не как продекларировано: "любой вопрос..", а: "не задавайте глупых вопросов". Даже ткнуть носом в главу учебника или справки, или пример, где этот вопрос решен - и то недостойно Великих Учителей.

По-моему, вы немного ошибаетесь - новички сюда заходят не для того, чтобы полюбоваться вами и поаплодировать вашим знаниям.

Подростку для защиты от хулиганов не надо быть бойцом карате - достаточно знать пару приемов. 

ЗЫ: а вообще-то складывается впечатление, что вам самим для ответа на вопрос надо лезть в учебник, а неохота... 

И боже упаси меня кого-то в чем-то здесь упрекать. Излагаю только свое мнение. И то спасибо, что время на меня тратите. 

 

Пришлось самому залезть в документацию чтобы понять непонятное...

В документации пример остался старый.

В общем: если функция возвращает какое-либо значение, то это значение надо присвоить переменной соответствующего типа и проверить значение этой переменной.

Примерно так:

bool res;

res = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 40);
if(!res) Print("нихрена ордер не заерылся. Ошибка ", GetLastError());
 
AlexeyVik:

Пришлось самому залезть в документацию чтобы понять непонятное...

В документации пример остался старый.

В общем: если функция возвращает какое-либо значение, то это значение надо присвоить переменной соответствующего типа и проверить значение этой переменной.

Примерно так:

Чаще заглядывайте. Меньше вопросов будет. Лучше знания будут. 
 
AlexeyVik:

Пришлось самому залезть в документацию чтобы понять непонятное...

В документации пример остался старый.

В общем: если функция возвращает какое-либо значение, то это значение надо присвоить переменной соответствующего типа и проверить значение этой переменной.

Примерно так:

bool res;

res = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 40);
if(!res) Print("нихрена ордер не заерылся. Ошибка ", GetLastError());

С чего бы лишнюю переменную? Прекрасно работает прямая проверка:

if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 40)) Print("нихрена ордер не заерылся. Ошибка ", GetLastError());
Переменную заводить нужно, когда необходимо видеть значение функции из разных точек программы, чтобы не вызывать её несколько раз.
 
evillive:

С чего бы лишнюю переменную? Прекрасно работает прямая проверка:

Переменную заводить нужно, когда необходимо видеть значение функции из разных точек программы, чтобы не вызывать её несколько раз.

Вот те на! Такие дебаты, а от меня требуют "вдумываться в суть"...

Ошибки исправил, компиляция выдает: ошибок 0, предупреждений 0, но другая беда (вернее две): при первой же возможности открытия ордера они окрываются беспрестанно, пока не кончатся средства, а потом, при наступлении условий закрытия, все закрываются и новых ордеров не открывает, хотя закрытые ордера в итоге дают профит. 

 
rapid_minus:

Вот те на! Такие дебаты, а от меня требуют "вдумываться в суть"...

Ошибки исправил, компиляция выдает: ошибок 0, предупреждений 0, но другая беда (вернее две): при первой же возможности открытия ордера они окрываются беспрестанно, пока не кончатся средства, а потом, при наступлении условий закрытия, все закрываются и новых ордеров не открывает, хотя закрытые ордера в итоге дают профит. 

Есть несколько способов ограничения количества ордеров:

1) по количеству - считать количество уже открытых ордеров и сравнивать с заданным пользователем, если открыто уже сколько задано, то больше не открывать;

2) по времени - учитывать время, прошедшее с момента открытия предыдущего, если времени прошло меньше заданного, не торговать;

3) по расстоянию в пипсах от цены открытия предыдущего ордера до текущей рыночной цены (или рассчитанной, для отложенных ордеров), если расстояние меньше, опять же не торговать.

Обычно используют разные комбинации этих ограничений.

 
evillive:

Есть несколько способов ограничения количества ордеров:

1) по количеству - считать количество уже открытых ордеров и сравнивать с заданным пользователем, если открыто уже сколько задано, то больше не открывать;

2) по времени - учитывать время, прошедшее с момента открытия предыдущего, если времени прошло меньше заданного, не торговать;

3) по расстоянию в пипсах от цены открытия предыдущего ордера до текущей рыночной цены (или рассчитанной, для отложенных ордеров), если расстояние меньше, опять же не торговать.

Обычно используют разные комбинации этих ограничений.

Спасибо, попробую задать количество 1
 

Что до

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