Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я знаю, что проблема стоит прямо передо мной, но я не могу ее увидеть...
Однако у меня есть проблема; я пытаюсь частично закрыть один и тот же "OP_BUY" или "OP_SELL" до 4 раз по разным ценам... Я думаю, что вопрос, который я должен задать, заключается в том, могу ли я получить способ, при котором у меня есть правило, что ВСЕ частичные закрытия (любых лотов и цен на ОДНОЙ данной сделке) будут частично закрываться только ОДИН раз при заданных параметрах "OrderClose()"...
Этот способ, который я рассматриваю сейчас, с сопоставлением OrderOpenTime(), по сути, будет работать только один раз, и будет ограничивать любой другой тип функции OrderClose()... Я хочу найти способ, чтобы одно правило применялось к 4 функциям OrderClose()... (если это имеет смысл?)
Я знаю, что люди предлагают открыть 4 ордера, но, не вдаваясь в подробности, для меня это менее эффективно.
Почему бы просто не иметь двумерный массив, который хранит номер билета и количество доступных частичных закрытий, которые осталось выполнить.
Схема/псевдокод:
1. определите статический двумерный массив: cOrders[][2].
2. для каждого нового введенного заказа: изменить размер первого измерения cOrders на size+1, поместить номер билета нового заказа в [x][0] и количество оставшихся частичных закрытий (в данном случае 4) в [x][1].
3. через любой промежуток времени (например, каждый start()) просмотреть массив, выбрать каждый ордер по сохраненному номеру билета и определить, нужно ли выполнить частичное закрытие.
4. если необходимо выполнить частичное закрытие (см. шаг 3), частично закройте заказ с помощью OrderClose() и обновите cOrders[x][0], чтобы отразить новый номер билета и уменьшить cOrders[x][1] на 1.
5. удалите из cOrders все ордера, которые были закрыты или количество оставшихся частичных закрытий которых равно 0.
Единственный вопрос - что делать при перезагрузке платформы/компьютера. Можно хранить эту информацию в файле и считывать ее в init() при перезагрузке платформы.
Почему бы просто не иметь двумерный массив, который хранит номер билета и количество доступных частичных закрытий, которые осталось выполнить.
Схема/псевдокод:
1. определите статический двумерный массив: cOrders[][2].
2. для каждого нового введенного заказа: изменить размер первого измерения cOrders на size+1, поместить номер билета нового заказа в [x][0] и количество оставшихся частичных закрытий (в данном случае 4) в [x][1].
3. через любой промежуток времени (например, каждый start()) просмотреть массив, выбрать каждый ордер по сохраненному номеру билета и определить, нужно ли выполнить частичное закрытие.
4. если необходимо выполнить частичное закрытие (см. шаг 3), частично закройте заказ с помощью OrderClose() и обновите cOrders[x][0], чтобы отразить новый номер билета и уменьшить cOrders[x][1] на 1.
5. удалите из cOrders все ордера, которые были закрыты или количество оставшихся частичных закрытий которых равно 0.
Единственный вопрос - что делать при перезагрузке платформы/компьютера. Можно хранить эту информацию в файле и считывать ее в init() при перезагрузке платформы.
Я понятия не имею, как использовать части магического числа для определения различных параметров? Я думаю, что использование OrderOpenTime() не будет логичным маршрутом... Не могу поверить, насколько длинной становится эта тема. Лол.
Клянусь богом, я собираюсь сделать тему по этому вопросу, как только я (с большой помощью всех остальных!) разгадаю его.
Я думаю, что проще всего это сделать с помощью магических номеров ... использовать части номера для определения различных параметров, например: количество частей, номер заказа, день, месяц, номер эксперта ... все части будут иметь один и тот же магический номер и могут быть легко отслежены в истории. Я предполагаю, что закрытая часть и открытая часть слева имеют одинаковый магический номер. ...
Использование магического числа для кодирования частей информации вполне возможно, но я вижу несколько возможных ограничений. Во-первых, магическое число - это int и поэтому имеет длину 10 цифр, где крайняя левая цифра может быть только 1 или 2 (а если крайняя левая цифра - 2, то вторая по левому краю цифра должна быть 7 или меньше). Во-вторых, может потребоваться больше времени на start() для просмотра всей истории, чтобы найти все части каждого заказа, чтобы определить, нужно ли (или можно ли) частично закрыть текущий заказ. Просто не уверен, будет ли это большее время тривиальным или нет.
Подождите, а разве я не могу иметь несколько MagicNumber? Использовать один для начального OrderSend(), один для OrderModify(), после того, как половина позиции закрыта по первой цели 1:1, модифицировать ордер, чтобы изменить MagicNumber? Таким образом, когда я сначала хочу закрыть половину позиции на 1:1, она будет закрываться только на 1:1, пока текущий открытый "OP_BUY" соответствует магическому числу, которое я дал ей сначала? После того, как он частично закроется, модифицировать и изменить это магическое число?!
Лол? Разве это не очень просто?!
UPDATE: Мне явно нужно прекратить смотреть на это сегодня - вы не можете изменить MagicNumber - хотя, блин, хотелось бы... (facepalm) - Можете себе представить, насколько все это было бы проще...
Подождите, разве я не могу иметь несколько магических номеров? Использовать один для начального OrderSend(), один для OrderModify(), после того как половина позиции будет закрыта по первой цели 1:1, модифицировать ордер, чтобы изменить MagicNumber? Таким образом, когда я сначала хочу закрыть половину позиции на 1:1, она будет закрываться только на 1:1, пока текущий открытый "OP_BUY" соответствует магическому числу, которое я дал ей сначала? После того, как он частично закроется, модифицировать и изменить это магическое число?!
Лол? Разве это не очень просто?!
Нет. Во-первых, после первоначального OrderSend() вы не можете добавить/изменить Magic Number с помощью OrderModify(). Во-вторых, когда вы делаете частичное закрытие ордера с помощью OrderClose(), новый ордер (я предполагаю) получает тот же магический номер, что и старый.
Нет. Во-первых, после первоначального OrderSend() вы не можете добавить/изменить Magic Number с помощью OrderModify(). Во-вторых, когда вы делаете частичное закрытие ордера с помощью OrderClose(), новый ордер (я предполагаю) получает тот же магический номер, что и старый.
Да. Я понял, насколько я отсталый. Долгий день!
Да, после первого частичного закрытия оставшейся позиции присваивается тот же магический номер, с которым она начинала.
Это меня очень расстраивает... Если бы я только мог изменить magicnumber, это было бы слишком просто!? Должен быть логичный способ частично закрыть позицию ОДИН раз - и сделать это несколько раз по любой заданной предопределенной цене, указанной в OrderClose() - Должно быть обновление, позволяющее нам изменять MagicNumber()!
Вы совсем не мыслите логически.
1. Как модификация магического числа поможет вам больше, чем знание OrderOpenTime()? Это то же самое, что и идентификатор ордера.
2. зачем вы конвертируете его в формат день/час/минута с помощью timetostr? OrderOpenTime() уже в формате timestamp выглядит следующим образом: 1375356521 он представляет собой точное время с точностью до секунды, когда был открыт ордер.
Если бы вы могли изменить магическое число, вы бы сравнили магическое число ордера, чтобы убедиться, что у него нет магического числа, которое означает, что он уже был частично закрыт, верно?
Если бы вы могли это сделать, почему вы не можете сравнить OrderOpenTime ордера с меткой времени, которая, как вы знаете, означает, что он уже был частично закрыт?
static datetime alreadypartclosed;
если закрытие заказа прошло успешно
alreadypartclosed = OrderOpenTime();
если заказ соответствует критериям для частичного закрытия
if(OrderOpenTime() != alreadypartclosed )
Если вы управляете несколькими открытыми ордерами одновременно, используйте массив[] для хранения временных меток закрытых ордеров.