Эта тема содержит следующие разделы.
Торговая стратегия в WealthLab реализуется в виде кода метода Execute, в классе, наследнике WealthLab.WealthScript. Наш подход позволяет передавать торговые сигналы для исполнения, получать результаты исполнения и сохранять их для последующей загрузки истории сделок в будущем. Для этого мы предоставляем базовый класс WLRT.LiveTrading.WealthScript. В этом классе вам нужно реализовать метод Execute. По сути, вы можете просто скопировать код, который использовали для тестирования на истории. Для указания объемов позиции, используйте метод SetShareSize в стратегии и PositionSize: WealthScript Override для торговли из окна графика.
Следует помнить, что при поступлении нового бара(например наступлении очередной 5минутки) метод Execute исполняется целиком, несмотря на то, что при тестировании вы пишите цикл по барам, и на каждый бар выполняется не весь метод Execute, а только один шаг цикла. Т.о. ваша стратегия должна при запуске метода Execute понять свое состояние, и дальше сразу принимать торговое решение, сразу на последнем баре. Анализировать последовательность предыдущих баров нет смысла, т.к. торговать на прошедших данных вы не можете. Потому правильным подходом было бы избавиться от цикла, и оставить только логику принятия решения для одного бара, последнего.
Наследование от WLRT.LiveTrading.WealthScript
Если вы пишете стратегию для запуска из окна графика, вам достаточно заменить в строке public class MyStrategy : WealthScript базовый класс public class MyStrategy : WLRT.LiveTrading.WealthScript.
Использование SetShareSize
Обязательно используйте метод SetShareSize(10); для указания объема позиции. Не забывайте про лотность бумаги, например Сбербанк-ао имеет лотность 10, т.е. вы можете покупать только кратно 10 количество бумаг. Нельзя указать объем 3, для покупки 3х лотов следует указать объем 30.
Торговый цикл
В простых случаях вы можете оставить свою стратегию без каких-либо изменений(кроме описаных выше). Но правильным является написание стратегий без цикла. Стратегия должна в методе Execute понять свое текущее состояние, определиться с текущей позицией(лонг или шорт), понять следует ли входить в позицию, если активных позиций нет. После этого просто вызвать один из торговых методов, например BuyAtMarket(Bars.Count); на последнем баре+1 (Bars.Count-1 - последний бар, т.к. нумирация идет с 0 после добавления +1 получается, что в торговый метод надо передавать Bars.Count).