← Zurück

Разные результаты тестов в разных версиях S#

Еще полгода назад начинал писать одну из версий скальпера. тестер показывал стабильную прибыль. сейчас обновился до последней версии S#, логика осталась абсолютно без изменений — тестер показывает стабильный минус.

Цены исполнения всех сделок в среднем на 10 п хуже, чем были раньше. Пробовал выставить в новой версии «UseMarketDepth = false» - выскакивает ошибка, т.к. все заявки отправляются через Security.BestAsk.Price + 500 (по рынку, используя цену лучшего бида или оффера)… старая версия не ругалась на это.

пошел дальше… убрал в коде все BestBid и BestAsk, т.е. любое обращение к стакану и заменил на Security.LastTrade.Price +- 500. и о чудо, результаты тестов стали совпадать )))

и вот тут сам по себе возник вопрос… какая разница, используя я стакан или нет, если в обоих случаях выставляется рыночная заявка? и как это может влиять на цены исполнения заявок, если, как я понимаю, цена исполнения определяется исходя из последующих сделок?

War dieses Thema hilfreich?

Thema teilen

Kommentare (3)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

pyhta4og
pyhta4og

рыночная заявка сводится по стакану. покупка - по биду. Если вы тестируете без стакана (useMD=false) то идет эмпирика по цене сведения равной LastTrade +- проскальзывание Slippage. По умолчанию проскальзывание ноль. Поэтому переписав свой код вы получили тоже что и раньше.

Но то что вы получили - это нереалистично потому что проскальзывание без использования стаканов вычислить невозможно. Поэтому, видимо, ваш скальпер на тестировании со стаканами показывает более реалистичный минус.

profts
profts Autor

Спасибо. Вроде разобрался. Кстати, у меня наоборот - тест без стаканов и результат на реале почти совпадают. теперь возникала другая проблема... при тестировании стало выскакивать исключение System.OutOfMemoryException... во время Indicator.Process(candle). даже 2 дня не получается протестировать. пробовал в конце дня разово делать Indicator.Container.ClearValues(); - после этого индикаторы вообще не хотят нормально считаться. значения даже близко на правду не похожи.

profts
profts Autor

вообще конечно странно... после Indicator.Container.ClearValues(); - некоторые индикаторы продолжают считаться правильно, некоторые абсолютно нет.
стал тупо перебирать все возможные индикаторы... Highest - нормально продолжает, а Lowest - постоянно выдает 0. т.е. нет никакой закономерности... помогитееее )))

if (Security.LastTrade.Time.Hour == 19 && ClearIndicator == false) { this.AddInfoLog("ОЧИЩАЕМ ИНДИКАТОРЫ"); ClearIndicator = true;

        Highest.Container.ClearValues();
        Lowest.Container.ClearValues();
    }

Highest.Process(candle.ClosePrice); Lowest.Process(candle.ClosePrice);

        if (ClearIndicator == true)
        {
            this.AddInfoLog("Highest1 =   {0}", Highest1.GetValue<decimal>(0).ToString());
            this.AddInfoLog("Lowest1 =   {0}", Lowest1.GetValue<decimal>(0).ToString());
        }

2012.12.03 19:00:01.000| |SS_SPFB.RTS@RTS_test account|ОЧИЩАЕМ ИНДИКАТОРЫ 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Highest = 144950.00000 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Lowest = 0 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Highest = 144950.00000 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Lowest = 0 ... 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Highest = 144960.00000 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Lowest = 0 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Highest = 144960.00000 2012.12.03 19:00:02.000| |SS_SPFB.RTS@RTS_test account|Lowest = 0