Спасибо, Евгений, за статью! Многие пробелы в пазле моих знаний о валютном рынке практически полностью заполнились.
Есть один единственный нюанс: у некоторых читателей Вашей статьи советник в тестере стратегий может не запуститься, если у тестируемой валютной пары есть суффикс или префикс. Это нужно им учесть и прописать в настройках параметров советника.
А так - всё СУПЕР!!!
С уважением, Владимир.
Спасибо, Евгений, за статью! Многие пробелы в пазле моих знаний о валютном рынке практически полностью заполнились.
Есть один единственный нюанс: у некоторых читателей Вашей статьи советник в тестере стратегий может не запуститься, если у тестируемой валютной пары есть суффикс или префикс. Это нужно им учесть и прописать в настройках параметров советника.
А так - всё СУПЕР!!!
С уважением, Владимир.
Спасибо большое! Проверю завтра с префиксами у другого брокера. Если что - внесу дополнение)
Евгений, вчера не особо внимательно всматривался в код советника, т.к. в большей степени меня интересовала текстовая часть статьи, поэтому и не задал вопрос по той части кода, которая выделена желтым цветом:
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountOrders(string symb,ENUM_ORDER_TYPE type) { int count=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(OrderGetTicket(i))) { if(OrderGetInteger(ORDER_TYPE)==type && PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic) count++; } } return(count); }
На Ваше предупреждение сразу обратил внимание: Вот функции подсчета открытых ордеров и открытых позиций. CountOrders и CountTrades занимаются подсчетом открытых ордеров и позиций для определенного символа с учетом магического номера советника. Они по факту в коде пока не используются, но будут использоваться в будущих версиях, когда я наконец напишу нормальную функцию центровки спреда между лимитами...
Но не совсем понял - это Вами было так задумано или всё-таки должно быть как-то по другому?
С уважением, Владимир.
Евгений, вчера не особо внимательно всматривался в код советника, т.к. в большей степени меня интересовала текстовая часть статьи, поэтому и не задал вопрос по той части кода, которая выделена желтым цветом:
На Ваше предупреждение сразу обратил внимание: Вот функции подсчета открытых ордеров и открытых позиций. CountOrders и CountTrades занимаются подсчетом открытых ордеров и позиций для определенного символа с учетом магического номера советника. Они по факту в коде пока не используются, но будут использоваться в будущих версиях, когда я наконец напишу нормальную функцию центровки спреда между лимитами...
Но не совсем понял - это Вами было так задумано или всё-таки должно быть как-то по другому?
С уважением, Владимир.
Задумано - ведь иначе советник может начать путать ордера своего магика с другими) По symb задумано для того, чтобы в будущем сделать мультивалютную версию советника. У меня пока не получается ее сделать)))
Задумано - ведь иначе советник может начать путать ордера своего магика с другими) По symb задумано для того, чтобы в будущем сделать мультивалютную версию советника. У меня пока не получается ее сделать)))
С ордерами всё понятно, только зачем в этой функции проверяются символ и магик позиции? ))
С уважением, Владимир.
Это позор MQ, а не статья. Как можно такое пропускать к публикации?
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountTrades(string symb) { int count=0; for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i))) { if(PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic) { count++; } } } return(count); }
PositionGetTicket(i) согласно документации «Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней…» И зачем выбирать позицию по её тикету, функцией PositionSelectByTicket если она уже выбрана? Это вы учите новичков как не надо делать?
И замечание Владимира вполне справедливо. А ответ ваш совсем не о том… Зачем проверять символ и магик ПОЗИЦИИ если работаем с ордерами???
кроме кода, мне и текстовая часть не понравилась
чушь какая то, не более чем с миру по нитке.
тема интересная, не спорю
какого маркет-мейкинга создаем, чо к чему?
то что его не получилось создать - факт, т.к. автору не хватило матчасти
а ее там - мама не горюй.
надо как минимум еще лет ..дцать подумать, может и получиться сделать.
как начало и как путь к совершенствованию - норм, в этом поддерживаю.
Renat Akhtyamov #:
какого маркет-мейкинга создаем, чо к чему?
то что его не получилось создать - факт, т.к. автору не хватило матчасти
Статью нужно читать не по диагонали, а от начала и до конца, т.е. полностью, вот тогда подобные вопросы не будут возникать.
С критикой Алексея Викторова по поводу использования функции PositionSelectByTicket(), когда тикет уже и без неё был выбран, полностью согласен. Сам, кстати, не обратил на это внимание.
Но за статью, Евгений, всё равно спасибо!
С уважением, Владимир.
Статью нужно читать не по диагонали, а от начала и до конца, т.е. полностью, вот тогда подобные вопросы не будут возникать.
С критикой Алексея Викторова по поводу использования функции PositionSelectByTicket(), когда тикет уже и без неё был выбран, полностью согласен. Сам, кстати, не обратил на это внимание.
Но за статью, Евгений, всё равно спасибо!
С уважением, Владимир.
Не тикет выбран, а позиция выбрана для работы с её свойствами посредством соответствующих функций.
Не тикет выбран, а позиция выбрана для работы с её свойствами посредством соответствующих функций.
Привет, Алексей! Спасибо за уточнение. )) Когда писал своё сообщение, тогда опирался на туже самую документацию (выделил желтым цветом):
Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString. ulong PositionGetTicket( int index // номер в списке позиций ); Параметры index [in] Индекс позиции в списке открытых позиций, начиная с 0. Возвращаемое значение Тикет позиции. В случае неудачного выполнения возвращает 0.
С уважением, Владимир.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Создаем алгоритм маркет-мейкинга на MQL5:
Как работают маркет-мейкеры на рынке? Рассмотрим этот вопрос и создадим примитивный алгоритм маркет-мейкинга.
Многим думается, что маркет-мейкер вообще не несет никаких рисков. Но это не так. Основной риск маркет-мейкера - это риск инвентаризации, или inventory risk. Этот риск заключается в том, что возможен резкий набор позиции в одну сторону, без возможности ее реализовать и заработать на спреде. К примеру, когда оголтелая толпа продает и продает актив, а маркет-мейкер вынужден выкупать все предложение, цена идет в минус, загоняя ММ в убытки.
Компании пытаются избежать этого риска с помощью использования специальных формул центровки спреда и определения оптимальной цены для покупки и реализации. Но это не всегда достижимо: даже если цена не оптимальна, твоя работа в поставке ликвидности на рынок, и ты должен делать эту работу, даже если временно работаешь себе в убыток.
Автор: Yevgeniy Koshtenko