При исполнении эксперта со временем заканчивается память и компьютер зависает, что делать? - страница 2

 
KimIV писал (а) >>
поправлю... секунда

Игорь,  тут зависит от стиля торговли  .. если это короткая быстрая  торговля то да можно секунду

если сделок в день максимум одна  если сделки открываются раз - день или в неделю

то минута нормально

 
YuraZ писал(а) >>

Игорь, тут зависит от стиля торговли

Юра, какой стиль? О чём ты? OrderOpenTime() и OrderCloseTime() возвращают время в секундах. Со стилем это никак не связано. Я говорю про технические ограничения. Например, нельзя упоминаемый тобой квант времени сделать 0,1 секунды. Девушку интересовала именно последняя сделка, а не результат торговли за квант времени, размером в час, например.

 

Совершенно верно. :)))

 
KimIV писал (а) >>

Юра, какой стиль? О чём ты? OrderOpenTime() и OrderCloseTime() возвращают время в секундах. Со стилем это никак не связано. Я говорю про технические ограничения. Например, нельзя упоминаемый тобой квант времени сделать 0,1 секунды. Девушку интересовала именно последняя сделка, а не результат торговли за квант времени, размером в час, например.

Тогда можно читать из истории просто последний ордер  

без цикла   -    в котором приходится бежать от начала или от конца к началу, в поисках последнего ордра!

Т Е достаточно считать количество ордеров в истории и обратиться к последнему закрытому 

--

что кстати еще и время экономит ( на оптимизациях тоже бодррее работать должно, особенно у тех у кого слабые машины )

--

//
// просто лезем в историю к последнему закрытому ордеру
//  ( полагаю оредра в истори должны быть сортированны ручками - по номеру ордера  - еслы вдруг вы отсортировали по профиту работать не будет )
int oh = OrdersHistoryTotal()-1;
OrderSelect(oh, SELECT_BY_POS,MODE_HISTORY); 
double LstOrderProfit =OrderProfit(); // профит последнего  ордера


--

Игорь поправь если, сей метод не годится   :-)

 
YuraZ писал(а) >>
Игорь поправь если, сей метод не годится :-)

Сей метод годится только для тестов на истории или в реале, когда нужно выбрать последнюю сделку из числа ваще всех сделок. А вот если нужно выбрать последнюю сделку конкретного эксперта или символа, приходится перебирать всю историю.

А вообще, мысль твоя, Юра, здравая! Можно с конца идти по списку. Найти то, что нужно и выйти из цикла по брику.

 
KimIV писал (а) >>

Сей метод годится только для тестов на истории или в реале, когда нужно выбрать последнюю сделку из числа ваще всех сделок. А вот если нужно выбрать последнюю сделку конкретного эксперта или символа, приходится перебирать всю историю.

угу! тут да

--

потому одновременно универсальной и быстрой функции не получиться, всегда приходится чем то руководствоваться при выборе!

для оптимизаций я бы юзал свой метод!

--

кстати  неудобно что нет условной компиляции - можно делать конструкции типа

код получается конечно громоздкий в обоих случаях - но бинарник был  бы без ветвлений

if ( isOptimization () == true )

{

  вызываем быстрый метод поиска профита последнего ордера

}

else

{

   вызываем более медленный но универсальный - в реальной  работе  

  (  тут еще кстати  :-)  для RefreshRates()   задежки увеличиваются , у меня эксперт на чемпионате 2008 иногда нарывается на реквоты и неверную цену

     на рынке 2007 код работы с ордерами не выделывался, а я его почти не менял,  а 2008  косяки идут, из за подобных задержек )

   потому даже небольшой цикл  ,  это плохо

   с  неверной ценой и реквотами конечно можно разобраться иначе -  уже знаю как -

    раньше времени хватало на быстром рынке не хватает


---

еще если сортировать историю то тоже могут быть проблемы! POS если не ошибаюсь подчинятеся сортировке

я точно не помню, проверить сейчас не могу 

---

 

Хорошо что развили мою тему, но она пошла не в ту сторону, сейчас попробую изложить снова:

1. Я играю на всех парах с помощью одного присоединенного эксперта.

2. Эксперт каждый раз обращается к пользовательскому индикатору на разных парах, что выглядит в логе очень страшно имя_индикатора, пара, М15, loaded successfully и так каждые 3-5 секунд.

3. Даже, если поставить Sleep(15000), все-равно не решает проблемы рано или поздно в системе вылезет сообщение о малом кол-ве памяти, эдак через часов 6-12.

4. Памяти Gb.

5. Как решить проблему, я так понимаю возможен кеш индикатора или что-то в этом духе, зачем же все время загружать индикатор???

 

Вариантов может быть много: может индикатор просто криво написан и его вполне можно оптимизировать, можно сделать его расчет по закрытым барам, ограничить колво баров для перерасчета 1 периодом вычислений. Без кода индикатора навярняка никто не скажет и вариант только один - нарастить до упора память.

 
Helex >>:
Создал эксперта решил для повышения эффективности тестировать стратегии и торговать на всех парах. Эксперт использует пользовательский индикатор для принятия решений. Так как пар много он часто загружает индикатор, скорее всего в этом и проблема... загрузив его так пару тысяч раз естественно возникает проблема, есть ли решение чтобы эксперт торговал сразу на всех парах используя польз.индикаторы и при этом не сжерал память? пишу быстро пока не завис :)

1. ОЗУ побольше. Максимально возможное надо установить.

2. Увеличить файл подкачки, если нет ОЗУ.

3. Уменьшить количество баров на графике хотя бы до 50000.

 
Zhunko писал(а) >>

1. ОЗУ побольше. Максимально возможное надо установить.

2. Увеличить файл подкачки, если нет ОЗУ.

3. Уменьшить количество баров на графике хотя бы до 50000.

имя_индикатора, пара, М15, loaded successfully - от этого можно избавится почему он все время перегружает вместо того чтобы использовать то что загрузил ранее? Я думаю в этом и проблема, утечик памяти и т.п. помогите с реальным ответом, из данного более менее реален 3й пункт