Стратегия FatPanel Visual Builder
FatPanel Visual Builder — перевод эксперта FAT Panel с MetaTrader на платформу StockSharp. В оригинальном MQL-проекте пользователь собирал стратегию, перетаскивая блоки сигналов, логики, состояний и приказов на панель. В версии для StockSharp вся схема описывается единственным JSON-документом, который стратегия читает при запуске.
Подход к конверсии
- Интерфейсные элементы (кнопки, вкладки, таймеры) удалены. Стратегия анализирует параметр
Configurationи на его основе создает индикаторы и логические блоки. - Все вычисления выполняются на закрытии свечи указанного типа
CandleType. Для скользящих средних используются встроенные индикаторы StockSharp (SMA,EMA,SMMA,WMA). - Блоки приказов в MQL принимали объем в “пунктах” и позволяли выбирать инструмент. Здесь используется базовый инструмент стратегии, а стоп-лосс и тейк-профит задаются параметрами
StopLossPointsиTakeProfitPoints, которые умножаются наPriceStep. - Временные и недельные фильтры повторяют поведение FAT Panel. Подписка на лучшую цену покупки (
Bid) активируется только при наличии соответствующего сигнала в конфигурации.
Параметры
| Параметр | Описание |
|---|---|
CandleType |
Тип и таймфрейм свечей, с которыми работает стратегия. |
Configuration |
JSON-строка с описанием правил, условий и действий. По умолчанию задан пример с пересечением EMA и SMA. |
Volume |
Базовый объем приказов, используемый если правило не указало собственный. |
StopLossPoints |
Дистанция стоп-лосса в шагах цены (0 — выключено). |
TakeProfitPoints |
Дистанция тейк-профита в шагах цены (0 — выключено). |
Обе дистанции активируют защиту только при положительном значении и наличии корректного PriceStep у инструмента.
Формат JSON
{
"rules": [
{
"name": "Произвольное имя",
"all": [ /* условия, которые должны выполниться все */ ],
"any": [ /* условия, из которых достаточно одного */ ],
"none": [ /* условия, которые должны быть ложными */ ],
"action": { "type": "Buy" | "SellShort" | "Close", "volume": 1.0 }
}
]
}
Допустимые типы условий:
| Тип | Поля | Назначение |
|---|---|---|
comparison |
operator, left, right, threshold |
Сравнение двух сигналов. Операторы: Greater, Less, Equal, CrossAbove, CrossBelow. Порог threshold задается в абсолютном выражении. Пересечение фиксируется, если на предыдущей свече сигналы находились по разные стороны, а текущая разница превысила порог. |
position |
required |
Контроль позиции: Any, FlatOnly, FlatOrShort, FlatOrLong, LongOnly, ShortOnly. |
time |
start, end |
Торговое окно внутри дня (HH:mm). Если start больше end, окно считается ночным, как в MQL. |
dayOfWeek |
days |
Список допустимых дней недели. При отсутствии берутся будние дни. |
Описание сигналов:
{ "type": "MovingAverage", "period": 20, "method": "Exponential", "price": "Close" }
{ "type": "Bid" }
{ "type": "Constant", "level": 1.2345 }
MovingAverageподдерживает методыSimple,Exponential,Smoothed,LinearWeightedи любой из цен OHLC.Bidиспользует последнюю цену лучшей покупки; до прихода стакана подставляется цена закрытия свечи.Constant— аналог блока HLINE, возвращает фиксированный уровень.
Доступные действия:
Buy— открытие или разворот в длинную позицию (при отсутствии длинной позиции).SellShort— открытие или разворот в короткую позицию.Close— закрытие текущей позиции вызовомClosePosition().
Каждое действие может задать собственное поле volume, переопределяя общий параметр Volume.
Последовательность работы
- При старте конфигурация JSON разбирается; в случае ошибки стратегия пишет сообщение в лог и прекращает запуск.
- Для каждого уникального сигнала создается один экземпляр индикатора, который может переиспользоваться в нескольких правилах.
- После закрытия свечи обновляются значения сигналов, затем проверяются правила: блок
allдолжен пройти целиком,any— хотя бы один элемент,none— ни одного истинного элемента. - При выполнении условий срабатывает соответствующее действие, о чем выводится информационный лог.
- Защитные стопы включаются один раз в методе
OnStartedпри положительных значенияхStopLossPoints/TakeProfitPoints.
Ограничения
- Поддерживается только основной инструмент стратегии; перекрестные связки из FAT Panel требуют нескольких экземпляров стратегии.
- JSON-модель (
all/any/none) покрывает большинство комбинаций AND/OR/NOT, однако сложные графы могут потребовать ручного упрощения. - Операторы
CrossAbove/CrossBelowанализируют только предыдущую свечу. В оригинале можно было задавать буфер и допуск в пунктах — используйте полеthreshold, чтобы добиться нужной чувствительности. - Элементы интерфейса FAT Panel (перетаскивание, диалоги, цветовые схемы) сознательно не воспроизводились.
Пример конфигурации
{
"rules": [
{
"name": "EMA crosses above SMA",
"all": [
{
"type": "comparison",
"operator": "CrossAbove",
"left": { "type": "MovingAverage", "period": 20, "method": "Exponential", "price": "Close" },
"right": { "type": "MovingAverage", "period": 50, "method": "Simple", "price": "Close" }
},
{ "type": "dayOfWeek", "days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] },
{ "type": "time", "start": "09:00", "end": "17:00" },
{ "type": "position", "required": "FlatOrShort" }
],
"action": { "type": "Buy" }
},
{
"name": "EMA crosses below SMA",
"all": [
{
"type": "comparison",
"operator": "CrossBelow",
"left": { "type": "MovingAverage", "period": 20, "method": "Exponential", "price": "Close" },
"right": { "type": "MovingAverage", "period": 50, "method": "Simple", "price": "Close" }
},
{ "type": "position", "required": "LongOnly" }
],
"action": { "type": "Close" }
}
]
}
При пересечении EMA(20) выше SMA(50) в рабочее время открывается длинная позиция; обратное пересечение закрывает её, если стратегия все еще находится в лонге.