[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 579

 
Ekburg:

результат тот же.. а что это за функции, какой в них смысл? не разу раньше не встречал и не пользовал


Это не функция, это просто проверка перед модификацией, если значения SL или TP отличаются достаточно сильно от прежних, то модифицируем. Нет смысла модифицировать ТР или SL на один пипс, хотя бы для того, чтобы не раздражать ДЦ.
 
Sepulca:


Это не функция, это просто проверка перед модификацией, если значения SL или TP отличаются достаточно сильно от прежних, то модифицируем. Нет смысла модифицировать ТР или SL на один пипс, хотя бы для того, чтобы не раздражать ДЦ.

спасибо, хорошая вещь, буду впредь ей пользоваться
 
TarasBY:
Позвольте Вам не поверить (что Вы всё перечитали или "так читали") - вопрос про ошибку № 1 освещён в учебнике и НЕОДНОКРАТНО обсуждался на форуме. Ответ найдёте здесь.


ну естественно я не во всё вчитывался, но то что связанно с моей проблемой несколько раз внимательно перечитывал, находил причины этой ошибки, но вроде бы их нет в коде.. щас посмотрю ссыль Вашу и почитаю ещё раз статью все на эту тему, спасибо что помогаете , что не забили:)
 

привет форумяне,

 

решил написать себе советника. читаю учебник по mql4, так как торгую МТ4. И вот какая интересная штука получилась. типовые файлы mqh скаченные из этого учебника открываются (автоматом) в МетаЭдиторе 5 (Мт5 тоже у меня установлен)! Значит ли это что с Мт4 они работать не будут?  

 
Ekburg:

результат тот же.. а что это за функции, какой в них смысл? не разу раньше не встречал и не пользовал


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

А проверка у меня такая:

//+------------------------------------------------------------------+ 
 double ND(double nd){return(NormalizeDouble(nd,Digits));}
//+------------------------------------------------------------------+ 
if(ND(price)!=OrderOpenPrice()||ND(SL)!=OrderStopLoss()||ND(TP)!=OrderTakeProfit()||Expiration!=OrderExpiration())
   {
   OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE);
}
else return;
     
 
lottamer:

привет форумяне,

 

решил написать себе советника. читаю учебник по mql4, так как торгую МТ4. И вот какая интересная штука получилась. типовые файлы mqh скаченные из этого учебника открываются (автоматом) в МетаЭдиторе 5 (Мт5 тоже у меня установлен)! Значит ли это что с Мт4 они работать не будут?  


Попробуйте скомпилировать, и узнаете.
 
rigonich:


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

А проверка у меня такая:

Говорите правильно, а делаете "по-своему"... А грамотнее (всё-таки):

//+------------------------------------------------------------------+ 
 double ND(double nd){return(NormalizeDouble(nd,Digits));}
//+------------------------------------------------------------------+ 
if (ND (price - OrderOpenPrice()) != 0.0 || ND (SL - OrderStopLoss()) != 0.0 || ND (TP - OrderTakeProfit()) != 0.0 || Expiration != OrderExpiration())
{OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE);}

...хотя не со всеми условиями сравнения я согласен. Про условия можно почитать здесь.

 
rigonich:

Попробуйте скомпилировать, и узнаете.

да..просто надо эти mqh файлы открывать 4-ым Эдитором...
 
Desead:

Нужно нормализовать график цен, любой валютной пары на выбор. Нужно для индикатора. Пробовал делить текущее значение на предыдущее-получаю некий осциллятор вокруг 1. Это не то, мне необходимо чтобы характер графика сохранился. Пришла в голову мысль что надо перевести график из абсолютной шкалы значений в относительную, то есть тогда я буду видеть процентное изменение котировки. Реализовал. Это уже лучше и практически то что надо. Но конечное желание у меня нормализовать котировки в диапазоне [0:1] . И вот как сделать это последний шаг ума не приложу.вот кстати то что надо но на буржуйском-мне бы тоже самое на русском: http://people.revoledu.com/kardi/tutorial/Similarity/Normalization.html

 

и второй вопрос про удаление ордеров ,уже устал с этим бороться, не удаляются нормально все ордера и всё тут. вот цикл которым удаляю:

 Почти всегда что то из отложенников остаётся, уже даже добавил в цикл FOR цикл WHILE и все равно остаются неудалённые ордера. Отложенников которые нужно удалять много, порядка 20, может в этом сложность какая то ?


Ура, я , кажется проблему удаления ордеров у себя решил. Отдельной функцией считаю количество "нужных"(подлежащих удалению) ордеров -- Total --, вызываю эту функцию, затем while с условием  ( Total>0) потом, цикл удаления for(int i=Total-1 ;i<=0l;i--), опять ф-я подсчета "нужных" , счетчик попыток удаления с выходом из   while при достижении заданного уровня. Так удаляются все. 
 
TarasBY:

Вот пример удаления ордеров, в том числе и отложенных (удалял вот этим):

В приведённом Вами коде присутствуют (в фильтре отбора) не все отложенники. Ещё вариант ошибки: проверьте Магик, получаемый отложками при открытии (в своём коде).

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

Я тут о чем подумал. У меня удаление всех отложенников стоит только в одном месте - когда я выгружаю робота ,те в разделе деинит. Может на этот раздел есть какое то ограничение по времени ? и поэтому ордера не успевают удалиться ? ведь когда ордеров мало все шикарно удаляется, а когда раскидывается полностью сетка то ппц что твориться, десяток ордеров всегда остаётся и руками потом это чистить не вариант, это же АТС вроде как.

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