Перебор параметров

Зачем перебирать параметры

Зачастую в торговых стратегиях возникает необходимость подобрать какой-либо параметр на основе исторических данных. Для этого оказывается полезным интерфейс перебора параметров.

Передача параметров в стратегию

На странице с отправкой стратегии имеется возможность передавать стратегии набор параметров для перебора. Для этого внизу страницы в поле Имя параметра нужно ввести имя параметра, а в соседнее поле ввести значения параметра. Все значения могут быть целыми или вещественными с точкой в качестве разделителя.

Рассмотрим способы задания параметров:

  1. Постоянная:

  2. Список значений через запятую:

  3. Диапазон значений с шагом: (start, end, step):

После ввода поля значений параметра нужно добавить эти значения, нажав на кнопку Добавить. В таком случае параметры, заданные способами 1 и 2, передадутся как есть, а параметры, заданные диапазоном значений с шагом, раскроются в список параметров автоматически и отобразятся в таблице параметров.

Интерфейс перебора параметров позволяет добавлять несколько различных параметров, а также отключать перебор, задавая значение по умолчанию (default value):

  • Пример задания нескольких серий параметров. 2 значения для double_param и 4 значения для int_param дают 4 * 2 = 8 комбинаций. Здесь мы также видим, что, если осуществляется перебор параметра, то для него необязательно указывать значение по умолчанию.

  • Пример отключения перебора параметра double_param, значение по умолчанию равно 0. Для параметра int_param значение по умолчанию игнорируется, так как включен перебор этого параметра:

Чтение параметров из стратегии

Все переданные стратегии параметры можно извлечь из файла конфигурации, передаваемого в конструктор стратегии пользователя UserStrategy. В C++ параметры файла конфигурации приводятся к нужному типу с помощью метода as<param_type>(default_value). При этом если вы не выберете значения для параметра, для него будет использовано значение по умолчанию default_value. В Python можно воспользоваться стандартным преобразованием типов.

C++
Python
#include "participant_strategy.h"

using namespace hftbattle;

namespace {

class UserStrategy : public ParticipantStrategy {
public:
  // Параметры стратегии, которые хочется подобрать.
  int int_param;
  double double_param;
  Microseconds time_param;

  explicit UserStrategy(const JsonValue& config) {
    // Читаем целочисленный параметр, который обязательно должен быть указан в JSON файле.
    int_param = config["int_param"].as<int>();
    // Читаем вещественный параметр.
    // Если его нет в JSON файле, то он будет равен значению по умолчанию, т.е. 3.14.
    double_param = config["double_param"].as<double>(3.14);
    // Читаем временной параметр.
    // ! Временной параметр по умолчанию необходимо указывать с единицей измерения (литералом).
    // Возможные литералы:
    // h — часы,
    // min — минуты,
    // s — секунда,
    // ms — миллисекунды,
    // us — микросекунды.
    time_param = config["time_param"].as<Microseconds>(3s);
  }
};

}  // namespace

REGISTER_CONTEST_STRATEGY(UserStrategy, user_strategy)
# -*- coding: utf-8 -*-

from py_defs import *
from py_defs import Decimal as Price
from common_enums import *


# В конструктор стратегии участника передается файл конфигурации.
# В файл конфигурации из веб-интерфейса можно передать параметры стратегии.
def init(strat, config):
    # Параметры стратегии, которые хочется подобрать.
    # Тип параметра определяется только тем, как вы его зададите в JSON.
    # Числовые значения не надо заключать в кавычки.
    global int_param, double_param, time_param
    int_param = config["int_param"]
    # Читаем вещественный параметр. Если его нет в JSON файле, то он будет равен значению по умолчанию, т.е. 3.14.
    double_param = config.get("double_param", 3.14)
    # Здесь тоже хранится число.
    time_param = config["time_param"]

results matching ""

    No results matching ""