Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На списания во время клиринга можно не обращать внимания.
Пример. Открыта сделка бай по цене 50, в момент начала клиринга цена допустим 70. Во время клиринга вашу сделку удалят и начислят вам 20 тугриков, после клиринга ваша сделка будет открыта по цене 70.
Если вы закроете её по цене 100, то в итоге в терминале отразится одна сделка с прибылью 50 тугриков.
Проблема обычно возникает при написании трала или БУ. Допустим мы когда сделка 15+ хотим поставить БУ в +5.
Тогда если брать цифры из примера, получится, что перед клирингом у нас стоп лосс уже будет стоять в +5 пунктов, а после клиринга, он окажется -5 пунктов. Но если сделка в итоге закроется по стопу, то мы всё равно получим свои 5 тугриков плюса.
Поэтому в тестере клиринг можно не учитывать.
Реально просто, а главное надёжно.
Да простит меня автор топика за оффтоп, но может у вас есть рецепт определения когда закончился клиринг?
Проблема такая: брокер открывашка, во время клиринга удаляет отложенные ордера, а поле клиринга по новой их не выставляет.
Не знаю как на фьючах, но на акциях клиринг заканчивается в разное время.
Так вот, програмно я так и не смог определить момент окончания клиринга по конкретной бумаге.
Тупо отправляю по таймеру приказ на выставление ордера, до тех пор пока он не откроется.
Мне такой подход не нравится, а другого у меня нет.
На списания во время клиринга можно не обращать внимания.
Пример. Открыта сделка бай по цене 50, в момент начала клиринга цена допустим 70. Во время клиринга вашу сделку удалят и начислят вам 20 тугриков, после клиринга ваша сделка будет открыта по цене 70.
Если вы закроете её по цене 100, то в итоге в терминале отразится одна сделка с прибылью 50 тугриков.
Проблема обычно возникает при написании трала или БУ. Допустим мы когда сделка 15+ хотим поставить БУ в +5.
Тогда если брать цифры из примера, получится, что перед клирингом у нас стоп лосс уже будет стоять в +5 пунктов, а после клиринга, он окажется -5 пунктов. Но если сделка в итоге закроется по стопу, то мы всё равно получим свои 5 тугриков плюса.
Поэтому в тестере клиринг можно не учитывать.
О! как интересно... надо будет углубиться и опробовать! :-)
написал (взял из статьи) ф-ию именно out считать из сделок по истори, по факту (это у кого поза кроется в плюса) - считаем последовательный минус и выводим на экран - типа УЧЕТ клиринга, может конечно не совсем это будет все корректно при торгах - просто пока смотрю...
В итоге чтобы ТОЧНО закрыть например позицию с учетом прошлого клиринга, если он был минусовой - то надо сравнивать значения закрываемого профита и предыдущего лосса по клирингу.
нашел ошибку - исправить:
в итоге вот такая картина на экране вверху до этого вставить:
потому что не было еще убытка по клирингу:
09.11.2021 года: все "out" - в плюса:
Ужас! Слишком много не правильно, чтоб комментировать.
Давайте по другому.
Зачем вам история сделок, если вас интересует позиция?
Имхо, достаточно при каждой новой сделке в переменную записать цену последней позиции, а когда придёт клиринг, скорректировать БУ на разницу между ценой записанной в переменной и ценой последнего перед клирингом тика.
Пример:
lot = 1;
double end_position=0;
первая сделка по цене 30, end_position = 30;
вторая сделка по цене 60, end_position = 45;
третья сделка по цене 90, end_position = 60;
То есть у вас есть позиция по цене 60 объёмом 3.
Допустим клиринг пришёл когда цена была 70, прибыль получается 30 тугриков.
double clearing_price = 70;
После клиринга у вас откроется позиция по цене 70, но мы то помним, что реальная цена этой позиции end_position == 60; соответственно именно от этой цены нужно рассчитывать трал или БУ.
Соответственно во время клиринга заполнить переменную
double corrector = 0;
corrector = clearing_price - end_position;
Допустим стар БУ у вас когда сделка будет в +20 пунктов , соответственно в функцию БУ дописываем, что старт БУ равен: 20 - corrector;
А также БУ ставится сколько то пунктов в плюс, их тоже надо скорректировать на значение corrector.
После закрытия любой позиции corrector = 0;
Но это будет работать, только если после клиринга нет частичных закрытий или доливок. Если есть, то нужно по другому.
Реально просто, а главное надёжно.
Да простит меня автор топика за оффтоп, но может у вас есть рецепт определения когда закончился клиринг?
Проблема такая: брокер открывашка, во время клиринга удаляет отложенные ордера, а поле клиринга по новой их не выставляет.
Не знаю как на фьючах, но на акциях клиринг заканчивается в разное время.
Так вот, програмно я так и не смог определить момент окончания клиринга по конкретной бумаге.
Тупо отправляю по таймеру приказ на выставление ордера, до тех пор пока он не откроется.
Мне такой подход не нравится, а другого у меня нет.
У меня тоже открывашка, но на фьючах. Тоже проблема окончания клиринга, как определить - не знаю, просто беру 19:05.
Отложки же можно выставлять до даты, не только на сегодня. По крайней мере, на фьючах.
1. Ужас! Слишком много не правильно, чтоб комментировать.
Давайте по другому.
Зачем вам история сделок, если вас интересует позиция?
Имхо, достаточно при каждой новой сделке в переменную записать цену последней позиции, а когда придёт клиринг, скорректировать БУ на разницу между ценой записанной в переменной и ценой последнего перед клирингом тика.
Пример:
lot = 1;
double end_position=0;
первая сделка по цене 30, end_position = 30;
вторая сделка по цене 60, end_position = 45;
третья сделка по цене 90, end_position = 60;
То есть у вас есть позиция по цене 60 объёмом 3.
Допустим клиринг пришёл когда цена была 70, прибыль получается 30 тугриков.
double clearing_price = 70;
После клиринга у вас откроется позиция по цене 70, но мы то помним, что реальная цена этой позиции end_position == 60; соответственно именно от этой цены нужно рассчитывать трал или БУ.
Соответственно во время клиринга заполнить переменную
double corrector = 0;
corrector = clearing_price - end_position;
Допустим стар БУ у вас когда сделка будет в +20 пунктов , соответственно в функцию БУ дописываем, что старт БУ равен: 20 - corrector;
А также БУ ставится сколько то пунктов в плюс, их тоже надо скорректировать на значение corrector.
После закрытия любой позиции corrector = 0;
2. Но это будет работать, только если после клиринга нет частичных закрытий или доливок. Если есть, то нужно по другому.
1. Спс, что расписали. Я хочу пока посмотреть без корректора, т.к. у меня есть доливки и трал с бу + например, 30 пп, также после выставления трала могут быть частичные закрытия согласно логике работы робота. Т.е. после открытия стартовой, запомнил цену открытия, после доливки - усреднения - опять запомнил НОВУЮ цену открытия позиции совокупкой. И по сути уже клиринг и выставление после него новой цены открытия позиции брокером не будет иметь значения.
Я правильно понимаю, что такой подход тоже может иметь место быть согласно логики торгов выше здесь написанной в этом моем посте...
Далее уже если текущая цена актива позволяет, то перенос СЛ в БУ + 30 пп от ранее запомненной цены совокупной позиции.
И по фигу на актуальную цену открытия позиции по фьючу, выставленную брокером?
2.
" Но это будет работать, только если после клиринга нет частичных закрытий или доливок. Если есть, то нужно по другому. "
У меня есть доливки... и до и после - пока не переведет в БУ + 30 пп - неужели считать актуальную среднюю цену по всем ордерам рыночным через массивы, ведь нужна будет
и цена открытия ордера рыночного и их кол-во и объемы контрактов по каждому ордеру... чтобы вывести среднюю цену общую по ним - откуда перевод в БУ - считать...
СРЕДНЯЯ_ЦЕНА = ((OPEN_1 * VOLUME_1) +(OPEN_2 * VOLUME_2) +(OPEN_3 * VOLUME_3)+n) / (VOL_1+VOL_2 + VOL_3 + n), вот и получается что мне пока не перевел СЛ в БУ + 30 пп по всей совокупной позиции - необходимо все эти значения писать в массивы что ли? Веди при открытии N-ой доливки по рыночному ордеру - надо поднимать всю эту цепь, чтобы рассчитать СРЕДНЮЮ по всем?
или как- то можно обыграть через:
HistoryOrderSelect ()
HistoryOrderGetTicket ()
но там возникает вопрос, как брать начало и конец цикла АКТУАЛЬНЫХ ордеров рыночных, которые участвуют в формировании АКТУАЛЬНОЙ совокупной позиции?
ЕДНЯЯ_ЦЕНА = ((OPEN_1 * VOLUME_1) +(OPEN_2 * VOLUME_2) +(OPEN_3 * VOLUME_3)+n) / (VOL_1+VOL_2 + VOL_3 + n), вот и получается что мне пока не перевел СЛ в БУ + 30 пп по всей совокупной позиции - необходимо все эти значения писать в массивы что ли? Веди при открытии N-ой доливки по рыночному ордеру - надо поднимать всю эту цепь, чтобы рассчитать СРЕДНЮЮ по всем?
Увы, именно так.
Roman Shiredchenko #:
СРЕДНЯЯ_ЦЕНА = ((OPEN_1 * VOLUME_1) +(OPEN_2 * VOLUME_2) +(OPEN_3 * VOLUME_3)+n) / (VOL_1+VOL_2 + VOL_3 + n), вот и получается что мне пока не перевел СЛ в БУ + 30 пп по всей совокупной позиции - необходимо все эти значения писать в массивы что ли? Веди при открытии N-ой доливки по рыночному ордеру - надо поднимать всю эту цепь, чтобы рассчитать СРЕДНЮЮ по всем?
или как- то можно обыграть через:
но там возникает вопрос, как брать начало и конец цикла АКТУАЛЬНЫХ ордеров рыночных, которые участвуют в формировании АКТУАЛЬНОЙ совокупной позиции?
Достаточно хранить последнюю среднюю цену.
Достаточно хранить последнюю среднюю цену.
ОК а если я доливаю например, любым объемом - то как считать ее АКТУАЛЬНУЮ?
Я же показал. Берём эту последнюю усреднённую цену и объём позы, цену новой сделки и её объём. Всё посчитается правильно.