"Правильные" и "обобщённо правильные" по fxsaber`у ТС

8 марта 2020, 18:31
Aleksey Nikolayev
1
330

Здесь приведены некоторые соображения по поводу этой ветки.

Формальное определение.

Введём обозначения: r - ряд цен, s - система, e - эквити

Подаём цены на вход системы и получаем на выходе эквити: r -> s -> e

Обозначим через f, g и h преобразования, соответственно, цены, системы и эквити: r -> f(r), s -> g(s), e -> h(e), причём f и h - преобразования множества обычных функций на себя. g - преобразование множества алгоритмов на себя (алгоритмическое преобразование алгоритмов - алгоритм на алгоритмах). Поскольку множество возможных g слишком широкое, то введём ограничение. Положим s принадлежащим некоторому параметрическому семейству S и определим g как преобразование на множестве этих параметров.

Предполагается, что f, g и h принадлежат некоторым множествам F, G и H соответственно

Предполагается, что для любого f найдутся некоторые g и h, такие что из r -> s -> e следует, что f(r) -> g(s) -> h(e)

"Правильность" накладывает следующие ограничения на преобразования: F - задано, G и H - содержат только тождественные преобразования

"Обобщённая правильность" накладывает следующие ограничения на преобразования: F и G - задано, для ограничения на H возможны два варианта определений: а) оно содержит только тождественное преобразование; б) оно содержит только преобразования близкие к тождественному (в некотором смысле)

Пример "правильной" ТС приведён в блоге fxsaber`а. Ниже приведён пример формальной (не имеющей практического смысла) ТС, которая не является "правильной" на множестве F из примера fxsaber`а, но может быть переделана в "обобщённо правильную".

Вообразим себе некоего трейдера, уверенного в скором неминуемом крахе доллара. Причём эта уверенность становится очень сильной с наступлением весны и затухает лишь с наступлением зимы. Напишем несложный советник, автоматизирующий подобную "торговлю" на парах типа EURUSD или JPYUSD. В момент времени t_enter происходит вход в позицию против доллара, а в момент t_exit позиция закрывается. Позиция за время удержания не модифицируется, стоп и тейк-профит отсутствуют.

datetime t_enter = D'01.03.2019';
datetime t_exit = D'01.12.2019';

void ea1()
 {
  MqlTick tick;
  if(!SymbolInfoTick(_Symbol, tick))
    return;
  if(tick.time < t_enter)
    return;
  MqlTradeRequest treq = {0};
  MqlTradeResult tres = {0};
  treq.action = TRADE_ACTION_DEAL;
  treq.symbol = _Symbol;
  treq.volume = 1.0;
  if(PositionSelect(_Symbol))
   {
    if(tick.time >= t_exit)
     {
      treq.type = ORDER_TYPE_SELL;
      if(!OrderSend(treq, tres))
        Print("trading error number " + (string)GetLastError());
      Print("retcode " + (string)tres.retcode);
     }
   }
  else
    if(tick.time < t_exit)
     {
      treq.type = ORDER_TYPE_BUY;
      if(!OrderSend(treq, tres))
        Print("trading error number " + (string)GetLastError());
      Print("retcode " + (string)tres.retcode);
     }
 }

void OnTick()
 {
  ea1();
 }

Очевидно, для пар типа USDEUR и USDJPY этот советник уже не подойдёт - нужно его редактировать. Для этого достаточно поменять местами строки выделенные жёлтым цветом. Очевидно, обе эти версии советника не являются ни "правильными", ни "обобщённо правильными". Но обе эти версии можно очевидным образом совместить в одну, которая уже будет "обобщённо правильной" системой. Для этого надо добавить логическую input-переменную:

input bool even = true;

и переписать выделенные строки следующим образом:

treq.type = even ? ORDER_TYPE_SELL : ORDER_TYPE_BUY;

treq.type = even ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;

Таким образом, если преобразование f заключается в "перевороте" котировок (например, EURUSD -> USDEUR), то соответствующее ему преобразование g заключается в замене значения параметра even на логически противоположное (even -> !even).

Кратко о возможной практической пользе. Применений для "правильности" я пока не вижу, возможно потому что это слишком жёсткое ограничение. Для "обобщённой правильности" вижу применение в виде замены (или дополнения) к обычному моделированию методом Монте Карло. Для практической проверки последнего предположения нужно, кажется, больше возможностей в МТ для работы с кастомными символами чем имеется сейчас.

Поделитесь с друзьями: