Проблема в том, что ты проверяешь не последний закрытый ордер, а первый. Чтобы получить последний, надо сделать так:
OrderSelect (OrderHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
Проблема в том, что ты проверяешь не последний закрытый ордер, а первый. Чтобы получить последний, надо сделать так:
OrderSelect (OrderHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
Вот это да! После всего. Спасибо. А я понял как с барами, раз нулевой, значит последний.
Ну а за это вообще благодарствую. У KimIV наверно есть функции на все случаи жизни.
есть одна неприятная особенность работы тестера и реала или демо
void stats()
{
int iO;
iO = 0;
while ( true )
{
if ( OrderSelect(iO,SELECT_BY_POS,MODE_HISTORY) == true )
{
if ( OrderClosePrice() != 0 )
{
// в тестере приходит только СЮДА
Print( "1 OT="+TimeToStr( OrderClosePrice(), TIME_MINUTES|TIME_SECONDS)+" CT="+TimeToStr( OrderOpenTime(), TIME_MINUTES|TIME_SECONDS) );
}
else
{
// 22.06.08 СЮДА НИКОГДА НЕ ПРИЙДЕТ В ТЕСТЕРЕ! в реале естественно всегода будет приходють именно сюда
23.06.08 это я ошибся
Print( " 2 OT="+TimeToStr( OrderClosePrice(), TIME_MINUTES|TIME_SECONDS)+" CT="+TimeToStr( OrderOpenTime(), TIME_MINUTES|TIME_SECONDS) );
}
iO++;
}
else
break;
}
}
я всего лишь пытался как то
в deinit в режиме тестера
после тестирования - пробежаться по готовой истории - и собрать время удержания позиций
делать это во время тестирования и потом дальнейшей работы эксперта как то не хотелось да и не логично
---
в реале конечно проблем не возникало
----
картинка к сожалению не грузится.
Символ | AUDUSD (Australian Dollar vs US Dollar) | ||||
Период | 4 Часа (H4) 2008.03.03 00:00 - 2008.05.16 20:00 (2008.03.01 - 2008.05.19) | ||||
Модель | Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов) | ||||
Параметры | TP=80; SL=1; TP2=10; SL2=30; Lots=7; | ||||
Баров в истории | 1332 | Смоделировано тиков | 635616 | Качество моделирования | 52.30% |
Ошибки рассогласования графиков | 0 | ||||
Начальный депозит | 10000.00 | ||||
Чистая прибыль | 74345.40 | Общая прибыль | 121328.30 | Общий убыток | -46982.90 |
Прибыльность | 2.58 | Матожидание выигрыша | 1004.67 | ||
Абсолютная просадка | 1200.00 | Максимальная просадка | 14145.20 (15.39%) | Относительная просадка | 48.18% (8960.00) |
Всего сделок | 74 | Короткие позиции (% выигравших) | 36 (61.11%) | Длинные позиции (% выигравших) | 38 (76.32%) |
Прибыльные сделки (% от всех) | 51 (68.92%) | Убыточные сделки (% от всех) | 23 (31.08%) | ||
Самая большая | прибыльная сделка | 5622.40 | убыточная сделка | -4620.00 | |
Средняя | прибыльная сделка | 2378.99 | убыточная сделка | -2042.73 | |
Максимальное количество | непрерывных выигрышей (прибыль) | 7 (21450.80) | непрерывных проигрышей (убыток) | 3 (-2240.00) | |
Максимальная | непрерывная прибыль (число выигрышей) | 21450.80 (7) | непрерывный убыток (число проигрышей) | -8145.20 (2) | |
Средний | непрерывный выигрыш | 3 | непрерывный проигрыш | 1 |
if ( OrderSelect(iO,SELECT_BY_POS,MODE_HISTORY) == true )
{
if ( OrderClosePrice() != 0 )
{
// в тестере приходит только СЮДА
}
else
{
// СЮДА НИКОГДА НЕ ПРИЙДЕТ В ТЕСТЕРЕ! в реале естественно всегода будет приходють именно сюда
}С чего это вдруг? OrderClosePrice() всегда больше нуля для всех закрытых ордеров. С какой стати будет приходить в "else" в реале?
С чего это вдруг? OrderClosePrice() всегда больше нуля для всех закрытых ордеров. С какой стати будет приходить в "else" в реале?
опс... ошибся... устал наверно вчера :-)
---
проблема была вот какая!
в тестере я не мог пробегая по истории получить время открытия и время закрытия одного и того же
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь прикрутить что-то типа "мести" за Stoploss - позиция большим лотом на маленький Takeprofit (10 пунктов). Чтоб узнать закрылся ли последний ордер по Stoploss, я пробую использовать следующий метод:
ну и потом в условие открытия "мстительной" позиции закладывается условие что LastDealProfit должен быть меньше нуля.
Компилируем, тестируем, получаем такую картинку... мда, картинко как говорится не грузиццо (10 кб, а в течении 7-8 минут никак не загружается). Отвлёкся. Продолжу. Вобщем на одном периоде (период чемпионата 2007) эта мстительная позиция открывается по нескольку раз подряд, несмотря на то, что последний ордер закрыт положительно по тейку. На другом периоде (март-май 2008) вообще не срабатывает сие писание, работа идёт заранее регламентированным лотом, несмотря на редкие закрытия по стопу, т. е. мстительные позиции вообще не открываются.
Внимание вопрос! Является ли моё мнение правильным таким образом узнавать результат закрытия последней позиции? И являются ли эти перебои открытия мстительной позиции недочётом самого тестирования (особенностями тестера стратегий)?
Увидев неоднозначность понимания тестером того, что я хочу, я решил пойти иначе и заменить выше указаный код другим:
Но результат опять точно тот же самый что и с прошлым кодом. Почему эти восполняющие ордера срабатывают иногда по нескольку раз подряд, несмотря что последний ордер закрылся тейком, или на другом периоде не срабатывают вообще. Ведь переменная LastDealProfit чётко регламентирует результат закрытия последней позиции. Или нет? Что она тогда выдаёт?
Вобщем главный вопрос остался один: как корректно узнать что последний ордер закрылся по Stoploss или Takeprofit, для дальнейшего введения фильтра открываемой позиции?