Закрытие половинных участков. - страница 17

 
SDC:

Вы совсем не мыслите логически. Как изменение магического числа поможет вам больше, чем знание OrderOpenTime()? Это то же самое.


Потому что мне нужно сделать несколько частичных закрытий с одним ордером... Если я сделаю одно OrderClose() и сравню с OrderOpenTime(), а затем сделаю еще одно OrderClose() с тем же ордером, но снова сравню с помощью OrderOpenTime(), это не сработает, потому что в истории будет существовать закрытый ордер, и он не закроет вторую функцию OrderClose()...

Теперь, если бы я мог OrderClose(), используя Magicnumber 1234, а затем, после завершения OrderClose(), я мог бы изменить магический номер ордера на 12345, поэтому первая функция, которая вызвала MagicNumber 1234, больше не будет применяться к оставшемуся ордеру, так как оставшемуся ордеру теперь присвоен магический номер 12345. Теперь с этим MagicNumber 12345 я мог бы использовать его в другой функции OrderClose() (если она применима) и повторять процесс до тех пор, пока то, что у меня есть, не будет работать и выполняться так, как я хочу.

До тех пор функция OrderOpenTime() может сработать только один раз...
 
Я просто подумал, и поправьте меня, если я ошибаюсь, но что если я использую OrderOpenTime() И OrderCloseTime()?

Если я сравню текущий 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. Если вы проводите длительный бэктест, у вас могут быть сотни, даже тысячи ордеров в истории, и ваш советник будет сравнивать ваш открытый ордер со всеми ними на каждом тике. Это очень медленно, и ваши бэктесты будут становиться все медленнее и медленнее, так как чем дольше они выполняются, тем больше становится история.

 
SDC:

Также вам не следует ничего делать с OrdersHistory. Если вы проводите длительный бэктест, у вас могут быть сотни, даже тысячи ордеров в истории, и ваш советник будет сравнивать ваш открытый ордер со всеми ними на каждом тике. Это очень медленно, и ваши бэктесты будут становиться все медленнее и медленнее, так как чем дольше они выполняются, тем больше становится история.


Как еще я могу это сделать...?
 

Я только что показал вам, как это сделать!!! Если есть более простой способ сделать это, чем этот, я хотел бы знать, что это такое. Делайте это с историей, если хотите, я просто высказал свое мнение по поводу этого способа.

 
SDC:

Я только что показал вам, как это сделать!!! Если есть более простой способ сделать это, чем этот, я хотел бы знать, что это такое. Делайте это с историей, если хотите, я просто высказал свое мнение по поводу этого способа.


О, я вижу, что static datetime хранит дату и время OrderClose(), чтобы я мог сравнить его с начальным временем открытия текущего ордера, в отличие от просмотра чего-либо, связанного с историей?
 

да

 
Отлично - спасибо за помощь!

Static Datetime - это довольно новое для меня понятие, поэтому я буду работать над этим завтра и посмотрю, что получится! Надеюсь, тогда я разберусь с этой раздражающей частью моего кода :)
 
SDC:

Вы никогда не говорили ничего о многократном частичном закрытии, вы сказали, что просто хотите наполовину закрыть ордер, но в любом случае вы слишком много думаете об этом и полностью упускаете очевидное.

Почему OrderOpenTime() работает только один раз?

static datetime partclosedonce;

static datetime partclosedtwice;

если ордер соответствует критериям закрытия части 1 уровня и opentime не совпадает с partclosedonce, частично закрываем его, добавляем временную метку к partclosedonce.

если заказ удовлетворяет критериям закрытия 1 и его opentime совпадает с partclosedonce, он уже был закрыт один раз, поэтому пока не закрывайте его снова.

если заказ соответствует критериям закрытия части 2 и не совпадает с partclosedtwice, частично закройте его и добавьте метку времени в переменную partclosedtwice.


Удар! Это работает просто замечательно - намного проще, чем я себе представлял! Только начал смотреть на это, через 5 минут у меня все работает :) Большое спасибо за помощь! Теперь я включу мои многочисленные функции OrderClose() и посмотрю, смогу ли я заставить их работать. Как только я сделаю это, я собираюсь создать еще одну тему, чтобы вернуть помощь, которую я получил от других здесь! Я думаю, что это определенно то, что может пригодиться другим в одном кратком сообщении.

Я еще не выбрался из леса, но статический дататайм отлично работает с этим orderclose(). Я не вижу причин, почему бы ему не работать и с другими :)