Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы совсем не мыслите логически. Как изменение магического числа поможет вам больше, чем знание OrderOpenTime()? Это то же самое.
Потому что мне нужно сделать несколько частичных закрытий с одним ордером... Если я сделаю одно OrderClose() и сравню с OrderOpenTime(), а затем сделаю еще одно OrderClose() с тем же ордером, но снова сравню с помощью OrderOpenTime(), это не сработает, потому что в истории будет существовать закрытый ордер, и он не закроет вторую функцию OrderClose()...
Теперь, если бы я мог OrderClose(), используя Magicnumber 1234, а затем, после завершения OrderClose(), я мог бы изменить магический номер ордера на 12345, поэтому первая функция, которая вызвала MagicNumber 1234, больше не будет применяться к оставшемуся ордеру, так как оставшемуся ордеру теперь присвоен магический номер 12345. Теперь с этим MagicNumber 12345 я мог бы использовать его в другой функции OrderClose() (если она применима) и повторять процесс до тех пор, пока то, что у меня есть, не будет работать и выполняться так, как я хочу.
До тех пор функция OrderOpenTime() может сработать только один раз...
Если я сравню текущий OrderOpenTime() с исторически закрытыми позициями на том же Symbol() и не найду совпадений, то CloseOrder() будет запущен. Теперь, если вызывается вторая функция CloseOrder() (цена выше, чем у первой CloserOrder(), и я хочу закрыть еще несколько лотов по тому же ордеру), я могу сравнить OrderOpenTime() и OrderCloseTime(). Если OrderOpenTime(OpenPosition) == OrderOpenTime(History) && OrderCloseTime(history) > OrderOpenTime(OpenPosition) THEN OrderClose() вторая функция...?
Вы никогда не говорили ничего о многократном частичном закрытии, вы сказали, что просто хотите наполовину закрыть ордер, но в любом случае вы слишком много думаете об этом и полностью упускаете очевидное.
Почему OrderOpenTime() работает только один раз?
static datetime partclosedonce;
static datetime partclosedtwice;
если ордер соответствует критериям закрытия части 1 уровня и opentime не совпадает с partclosedonce, частично закрываем его, добавляем временную метку к partclosedonce.
если заказ удовлетворяет критериям закрытия 1 и его opentime совпадает с partclosedonce, он уже был закрыт один раз, поэтому пока не закрывайте его снова.
если заказ соответствует критериям закрытия части 2 и не совпадает с partclosedtwice, частично закройте его и добавьте метку времени в переменную partclosedtwice.
Также вам не следует ничего делать с OrdersHistory. Если вы проводите длительный бэктест, у вас могут быть сотни, даже тысячи ордеров в истории, и ваш советник будет сравнивать ваш открытый ордер со всеми ними на каждом тике. Это очень медленно, и ваши бэктесты будут становиться все медленнее и медленнее, так как чем дольше они выполняются, тем больше становится история.
Также вам не следует ничего делать с OrdersHistory. Если вы проводите длительный бэктест, у вас могут быть сотни, даже тысячи ордеров в истории, и ваш советник будет сравнивать ваш открытый ордер со всеми ними на каждом тике. Это очень медленно, и ваши бэктесты будут становиться все медленнее и медленнее, так как чем дольше они выполняются, тем больше становится история.
Как еще я могу это сделать...?
Я только что показал вам, как это сделать!!! Если есть более простой способ сделать это, чем этот, я хотел бы знать, что это такое. Делайте это с историей, если хотите, я просто высказал свое мнение по поводу этого способа.
Я только что показал вам, как это сделать!!! Если есть более простой способ сделать это, чем этот, я хотел бы знать, что это такое. Делайте это с историей, если хотите, я просто высказал свое мнение по поводу этого способа.
О, я вижу, что static datetime хранит дату и время OrderClose(), чтобы я мог сравнить его с начальным временем открытия текущего ордера, в отличие от просмотра чего-либо, связанного с историей?
да
Static Datetime - это довольно новое для меня понятие, поэтому я буду работать над этим завтра и посмотрю, что получится! Надеюсь, тогда я разберусь с этой раздражающей частью моего кода :)
Вы никогда не говорили ничего о многократном частичном закрытии, вы сказали, что просто хотите наполовину закрыть ордер, но в любом случае вы слишком много думаете об этом и полностью упускаете очевидное.
Почему OrderOpenTime() работает только один раз?
static datetime partclosedonce;
static datetime partclosedtwice;
если ордер соответствует критериям закрытия части 1 уровня и opentime не совпадает с partclosedonce, частично закрываем его, добавляем временную метку к partclosedonce.
если заказ удовлетворяет критериям закрытия 1 и его opentime совпадает с partclosedonce, он уже был закрыт один раз, поэтому пока не закрывайте его снова.
если заказ соответствует критериям закрытия части 2 и не совпадает с partclosedtwice, частично закройте его и добавьте метку времени в переменную partclosedtwice.
Удар! Это работает просто замечательно - намного проще, чем я себе представлял! Только начал смотреть на это, через 5 минут у меня все работает :) Большое спасибо за помощь! Теперь я включу мои многочисленные функции OrderClose() и посмотрю, смогу ли я заставить их работать. Как только я сделаю это, я собираюсь создать еще одну тему, чтобы вернуть помощь, которую я получил от других здесь! Я думаю, что это определенно то, что может пригодиться другим в одном кратком сообщении.
Я еще не выбрался из леса, но статический дататайм отлично работает с этим orderclose(). Я не вижу причин, почему бы ему не работать и с другими :)