АвторСообщение



Пост N: 2
Зарегистрирован: 16.04.08
ссылка на сообщение  Отправлено: 18.04.08 23:58. Заголовок: Сюда можно дать приб..


Сюда можно дать приблизительный алгоритм???

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 41 , стр: 1 2 3 4 5 All [только новые]





Пост N: 9
Зарегистрирован: 07.01.10
ссылка на сообщение  Отправлено: 08.01.10 18:53. Заголовок: Scriptong пишет: Та..


Scriptong пишет:

 цитата:
Так ведь никто не мешает вам преобразовывать цену в пиксели


Да, я видел это, но стараюсь избегать обращения к системным dll. У Дениса Орлова есть такой советник: http://codebase.mql4.com/ru/6012http://codebase.mql4.com/ru/6012
Судя по комментариям, вполне работоспособный, но у меня почему-то глючит. Вместо того, что бы остановиться на заданном уровне подвешивает тачпад. Автор в недоумении. Я грешил на загаженность системы, но даже после ее переустановки глюк остался ( у меня XP, SP не ниже второго, лицензионная).



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 07.01.10
ссылка на сообщение  Отправлено: 08.01.10 19:02. Заголовок: SK пишет: Обратите ..


SK пишет:

 цитата:
Обратите внимание также на необходимость перерисовки графиков после изменения свойств объектов (см. WindowRedraw() ).


Упс! А вот об этом не подумал! Попробую...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 11
Зарегистрирован: 07.01.10
ссылка на сообщение  Отправлено: 09.01.10 01:23. Заголовок: Все равно ни чего не..


Все равно ни чего не получается.
Сергей, могли бы вы ответить всего на один конкретный вопрос?
Запустите, пожалуйста, этот советник в тестере, в режиме визуализации. Выделите и переместите созданный им в окне графика текст ( 1 ).
Собственно вопрос: почему третий алерт, из тех, что выводятся в результате этого действия, показывает ошибку 4202?

//+------------------------------------------------------------------+ 
//| тест.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

double LabPr;
datetime LabTm;
int Value;
int Shift;
int Flag;

int init()
{
Value=1;
Shift=6;
LabPr=Bid;
Flag=0;
LabTm=iTime(NULL,0,WindowFirstVisibleBar( )-Shift);

ObjectCreate("LabTest",OBJ_TEXT,0,LabTm,LabPr);
ObjectSetText("LabTest",DoubleToStr(Value,0) ,11,"Tahoma",Red);
}

int start()
{
if(LabPr!=ObjectGet("LabTest",OBJPROP_PRICE1)||
LabTm!=ObjectGet("LabTest",OBJPROP_TIME1))
{
if(Flag==0)
{
Value=Value*(-1);
Alert("Value=",Value);
Flag=1;
Alert("Поиск объекта - ",ObjectFind("LabTest"));
ObjectSetText("LabTest",DoubleToStr(Value,0) ,11,"Tahoma",Red);
Alert("Ошибка - ",GetLastError());
}
}
else Flag=0;
LabTm=iTime(NULL,0,WindowFirstVisibleBar( )-Shift);
ObjectSet("LabTest",OBJPROP_TIME1,LabTm);
ObjectSet("LabTest",OBJPROP_PRICE1,LabPr);
}


Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 568
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 09.01.10 13:59. Заголовок: После некоторых эксп..


После некоторых экспериментов выяснилось, что:
- поиск объекта всегда выполняется корректно (независимо от факта перемещения мышкой)
- изменение свойства ObjectSetText объекта (GetLastError()=0) выполняется только в том случае, если объект покоится (не перемещается мышкой)
- изменение свойства ObjectSetText объекта не выполняется (GetLastError()=4202), если объект перемещается мышкой; при этом указание программы изменить значение ObjectSetText запоминается терминалом и выполняется при ближайшем удобном случае (объект покоится)

В этом можно убедиться, установив медленную прокрутку (скорость образования новых баров).
Если объект сдвинуть и быстро отпустить, то скорее всего ошибка будет=0, т.к. перемещение объекта попадает на период между исполнениями start(), т.е. фактически на момент исполнения ObjectSetText() объект покоится.
Если объект сдвинуть и подержать до момента образования нового бара, то ошибка =4202, т.к. на момент исполнения start() объект перемещался мышкой.

Для наглядности добавьте одну строку:

Alert("Поиск объекта - ",ObjectFind("LabTest"));
Alert("Ошибка До- ",GetLastError());
ObjectSetText("LabTest",DoubleToStr(Value,0) ,20,"Tahoma",Red);
Alert("Ошибка После- ",GetLastError());


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 07.01.10
ссылка на сообщение  Отправлено: 10.01.10 01:21. Заголовок: SK пишет: при этом ..


SK пишет:

 цитата:
при этом указание программы изменить значение ObjectSetText запоминается терминалом и выполняется при ближайшем удобном случае (объект покоится)


Вообще-то первый удобный случай, как я понял, наступает в момент отпускания объекта, но проблема в том и заключается, что изменения свойства не происходит.
Однако за идею весьма признателен. Такой расклад вполне возможно обработать.
Кстати, Alert("Ошибка До- ",GetLastError()); будет в любом случае показывать 0. Переменная LastError обнуляется после вызова в строке Alert("Ошибка После- ",GetLastError()); и больше ей негде принять новое значение. :))
Сергей, говорят, Вы готовите учебник по MQL5. Не подскажете, когда его можно будет увидеть? Да и с самим MT5 как дела обстоят? А то окажется, что все мои искания напрасны... :)))
И спасибо вам за терпение!

Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 571
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 10.01.10 01:54. Заголовок: dhot пишет: Кстати, ..


dhot пишет:
 цитата:
Кстати, Alert("Ошибка До- ",GetLastError()); будет в любом случае показывать 0.

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

dhot пишет:
 цитата:
Вообще-то первый удобный случай, как я понял, наступает в момент отпускания объекта, но проблема в том и заключается, что изменения свойства не происходит.

Нет. Всё дело в подробностях. Случай не инициируется фактом отпускания объекта пользователем. Случай - это строка кода в функции start(). Start() запускается новым тиком и исполняется обычно быстро, т.е. успевает закончиться раньше, чем приходит новый тик. После того, как start() закончила своё исполнение, до нового запуска страт (на следующем тике) возникает пауза. Если в период исполнения старт (конкретно функции ObjectSetText) объект тянется мышей, то неизбежно возникает ошибка 4202. Если же пользователь успел отпустить объект в период паузы, т.е. до прихода нового тика, то ObjectSetText в start() (запущенной фактом прихода нового тика) исполнится без ошибки.
Если Вас интересуют эти подробности (что вполне понятно при создани функций обработки событий, связанных с объектами), то не поленитесь составить диаграмму, на кот. отобразить все варианты начала и окончания перетаскивания объекта по отношению к началу и концу исполнения start().

dhot пишет:
 цитата:
Сергей, говорят, Вы готовите учебник по MQL5. Не подскажете, когда его можно будет увидеть? Да и с самим MT5 как дела обстоят? А то окажется, что все мои искания напрасны... :)))

Это правда. Надеюсь, что учебник появится к концу лета. Более точно сказать не могу - как дело пойдёт. Что касается МТ 5, то, по моим представлениям (я не разработчик,- и платформу и язык создали сотрудники MQ), процесс отладки продолжится прибл. до конца года и выход учебника прибл. совпадёт по срокам с официальным представлением МТ 5.
Историю развития МТ 5 можно посмотреть здесь http://www.mql5.com/ru/forum, об учебнике немного здесь http://www.mql5.com/ru/forum/3/page3.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 07.01.10
ссылка на сообщение  Отправлено: 12.01.10 11:42. Заголовок: SK пишет: Случай - ..


SK пишет:

 цитата:
Случай - это строка кода в функции start(). Start() запускается новым тиком и исполняется обычно быстро, т.е. успевает закончиться раньше, чем приходит новый тик.


Я так понимаю, что при создании рабочего прототипа программы проще, быстрее и надежнее фиксировать состояние объектов в переменных и при каждом запуске start() приводить их в соответствие. Позже, когда будут доведены логика и интерфейс, попытаться оптимизировать какие-то процессы, если возникнет в том потребность.
Спасибо за советы. :)

Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 572
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 12.01.10 12:14. Заголовок: dhot пишет: Я так п..


dhot пишет:

 цитата:
Я так понимаю, что при создании рабочего прототипа программы проще, быстрее и надежнее фиксировать состояние объектов в переменных и при каждом запуске start() приводить их в соответствие


Думаю, что это зависит от задачи. start() запускается новым тиком. Если этого достаточно, то так и сделать. Во всяком случае, необходимо обрабатывать все ситуации, в том числе, делать анализ ошибок.
В Вашем случае нужно выловить ошибку 4202 и соотв. образом отреагировать. Например, не выполнять модификацию объекта и выйти из start(). Есть и другой способ - если координаты объекта смещены, то удалить объект. Объект не будет удалён, если в момент попытки удаления он перетягивается. И тут же проверить наличие объекта: если он есть, то его тянут; если его нет, то создать новый в новых координатах и с новыми параметрами. (отсутствие объекта нужно обрабатывать само собой, т.к. возможно случайное удаление)

Если же пойти по пути зацикленной start(), то это с одной стороны, позволит быстро реагировать на управляющие воздействия пользователя, с другой стороны, повлечёт необходимость более глубокого анализа ситуации (в т.ч. обработку факта перекл. таймфрейма - пересчёт координат).
И если идею развивать и углублять, то через некоторое время может получиться AutoGraf :)


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 01.04.10
ссылка на сообщение  Отправлено: 01.04.10 16:02. Заголовок: Здравствуйте Сергей!..


Здравствуйте Сергей!
Пожалуйста помогите разобраться.
Хочу реализовать в алгоритме советника изменение настроек в
зависимости от состояния рынка.
Например: задан стандартный шаг между ордерами,
нужно увеличить шаг при обвале рынка.
Когда изменяю этот шаг через коэффициент, шаг изменяется, но
зацикливается и либо увеличивается без остановки,
либо уменьшается до нуля.
Как правильно сделать эту функцию.

K = NormalizeDouble((AccountFreeMargin()/AccountBalance()),2); // коэффициент изменения шага
PromShag = Shag / K; //промежуточные вычисления
Shag = PromShag; //шаг между отложенными ордерами выраженный через промежуточную переменную


Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 626
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 01.04.10 20:07. Заголовок: В подобных случаях, ..


В подобных случаях, как всегда, решение кроется в скурпулёзном рассмотрении подробностей.
1. Что такое шаг? Дистанция в пунктах между отложенными ордерами?
2. Что значит увеличить шаг? Модифицировать все отложенники так, чтобы дистанция между ними увеличилась?
3. "шаг изменяется, но зацикливается и либо увеличивается без остановки либо уменьшается до нуля" - попробуйте сообразить, можно ли это понять? Для того, чтобы разобраться что там зацикливается, нужно же посмотреть код, включающий оператор цикла. Код Вы не даёте. Ну.. и что дальше?
4. "Как правильно сделать эту функцию" Какую функцию? Чтобы что-то сказать о том КАК сделать, нужно сначала иметь точное представление о том, ЧТО нужно сделать. Но Вы же не даёте Вашей идеи, т.е. какие факторы принимаются во внимание, чтобы расчитать шаг?

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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 41 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет