Структура рулит. Учимся структурировать программы, изучаем возможности, ошибки, решения и т.п. - страница 14

 
C-4:
В этом случае придется где-то хранить историю отработанных сигналов, что очень накладно. Снова обратимся к пересечению 2 средних. Допустим, мы перезапустили советник. Нового пересечения на вход нет, советник каким-то образом должен восстановить свою историю сделок и понять, что раньше было пересечение и что сейчас он должен находится в состоянии покупки, и что этот сигнал им был уже отработан и новую позицию открывать не надо, а надо найти свою старую позицию, но ее просто так не найти, потому что текущая позиция не обязательно принадлежит только ему одному...  В общем кошмар кошмарный. Мы упираемся в тернистый путь предложенный hrenfx'ом: писать свой исторический тестер внутри каждого робота, который бы  собирал бы исторические сигналы, рассчитывал отработаны они или нет, затем сихранизировал объемы стратегий и т.д. и т.п. В итоге сложность разработок возрастает на порядок, а надежного решение так и нет.

История сигналов это индикатор, индикаторы для этого и созданы чтоб производить расчёты, генерировать сигналы, и выгружать их в советник.

И не надо говорить что индикаторы перерисовываются, пишите не перерисовывающиеся индикаторы и будет вам счастье.


Нас никому не сбить с пути, нам похеру куда идти :)

 
C-4:

Как неважно!? Да в любой стратегии на уровне ее логики всегда известно ее текущее состояние!

Вот она базовая заморочка. Я с ней прекрасно знаком, облазил здесь все закоулки.  И она неверна.

Стратегии нет никакой нужды знать свою историю. Стратегия должна смотреть вперёд, а не назад. То что произошло - произошло уже в прошлом и его не вернуть.

Возьмем простую стратегию на пересечении двух средних: у нее только два состояния, она либо в покупке либо в продаже. Без запоминания своей позиции, она будет открывать длинную позицию, всякий раз, когда увидит что быстрая средняя находится выше медленной. И что делать синхронизатору? Говорить ей: "нет, у тебя уже есть длинная позиция, открыть еще одну не дам!"

:)

Ну я уже писал, вы решаете несуществующую проблему.  Проблема кажется реальной только при "ордерном" мышлении. При неттинговом её не сушествует.

Я говорю не о вашем или моём мышлении, я говорю о мышлении программы (стратегии).

В ордерной системе координат стратегия является производителем дискретных сигналов на покупку/продажу/закрытие.  В неттинговой - стратегия производит на выходе число (double) - рекомендуемую рыночную позицию.

Давайте на примере двух машек покажу как будет производить свой продукт переворотная  неттинговая TC, скажем при торговле постоянным лотом (псевдокод):

 Pos = Sign(MA(ShortPeriod) - MA(LongPeriod));

Это всё.

Стратегия будет удерживать на выходе +1 до тех пор пока короткая машка выше длинной, и -1 когда она ниже.

Решения о том какие ордера выставлять/закрывать для удержания этих поз в соответствующие моменты принимает рыночный драйвер.  Стратегии ни к чему с этим заморачиваться, её роль более аристократическая, ей вся это меркантильная суета по барабану.  Драйвер берёт рекомендованную позицию по инструменту вычитает из неё фактическую, разность выводит на рынок.  Если разность равна нулю - ничего не делает.

Мое решение универсально, стратегия сама решает сколько ордеров и в какую сторону она может держать открытыми.

А стратегия должна вообще париться насчёт каких-то там ордеров?  У меня эти мелкие вопросы решает рыночный драйвер.


Хочет одну позицию на покупку и две на продажу - не проблема.

Тут можно смеяться?  Это как раз проблема.  Называется "лок".

У меня все потенциальные локи разлочиваются ДО подачи совокупной позиции нескольких входных стратегий на рыночный драйвер:

  Pos=0;
  for (i=0; i<StrategyCount; i++)  Pos+= Strategy[i].GetPos();
  MarketDriver.Synhronize(Pos, Err);

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

Эксперт созданный по предложенному мной шаблону, автоматически будет обладать свойствами мульти-эксперта. Ничего делать и дописывать не придется. Позиции разных экспертов на одном инструменте не будут коллапсировать в неттинг, какой-нибудь гридер или локер в таком паттерне запрограммировать также легко как  и любую другую стратегию. Иными словами достигается полная унификация программной реализации не зависимо от логики эксперта!

Ээээ... у меня решение ещё более универсально, если учесть что локи в ней даже не возникают.  Любителям локов со мной явно не по пути.  А мне с ними.
 
MetaDriver:
 

... 

Стратегия будет удерживать на выходе +1 до тех пор пока короткая машка выше длинной, и -1 когда она ниже.

Решения о том какие ордера выставлять/закрывать для удержания этих поз в соответствующие моменты принимает рыночный драйвер.  Стратегии ни к чему с этим заморачиваться, её роль более аристократическая, ей вся это меркантильная суета по барабану.

А стратегия должна вообще париться насчёт каких-то там ордеров?  У меня эти мелкие вопросы решает рыночный драйвер.

...

Это все конечно очень хорошо, но что делать стратегиям, чья текущая "рекомендация" зависит от ранее открытой позиции. Допустим стратегия активно пирамидит и в ней такое условие (псевдокод):

if(LastPosition.NetProfit > 400 && LastPosition.PositionType == Long)
{
   double volume = LastPosition.Volume + 1;
   BuyAtMarket(volume, "Entry long by strengthening");
}

Еще пример, как система рекомендаций будет обрабатывать такое простенькое условие (псевдокод):

if(LastPosition.NetProfit < -400)
{
    CloseAtMarket(LastPosition, "Exit position by stop-loss");
    if(LastPosition.PositionType == Long)
       ShortAtMarket(volume, "Entry long by revers")
    else
       BuyAtMarket(volume, "Entry short by revers")
}
В реальности таких условий может быть вагон и маленькая тележка.
 
MetaDriver:
Вот она базовая заморочка. Я с ней прекрасно знаком, облазил здесь все закоулки.  И она неверна.

Стратегии нет никакой нужды знать свою историю. Стратегия должна смотреть вперёд, а не назад. То что произошло - произошло уже в прошлом и его не вернуть.

ты чего кричишь :) он совсем про другое сказал.


в любой стратегии на уровне ее логики всегда известно ее текущее состояние!

тут написано про текущее состояние а не историю.
 
C-4:

Это все конечно очень хорошо, но что делать стратегиям, чья текущая "рекомендация" зависит от ранее открытой позиции. Допустим стратегия активно пирамидит и в ней такое условие (псевдокод):

Этим стратегиям безусловно нужно лечиться.  На уровне философии торговли.  А именно залечивать именно эту дыру в голове:  "текущая рекомендация зависит от ранее открытой позиции."

Текущая рекомендованная позиция никогда не должна зависеть от ранее произведённых на рынке действий.

 
sergeev:

ты чего кричишь :) он совсем про другое сказал.

тут написано про текущее состояние а не историю.

Я общаюсь не с тем что он сказал, а с тем что он имел в виду.  Он имел в  виду предыдущее текущее состояние.

:)

 

:)

На самом деле для моей схемы нет принципиальных препятствий для создания стратегий учитывающих прошлую торговлю.

Более академичным языком:  Система без памяти может легко смоделировать систему с памятью.  Для этого память просто выносится вовне - становится для системы ещё одним входным индикатором.  Этого вполне достаточно.  Сама стратегия при этом остаётся "системой без памяти" и это хорошо и правильно.

 
MetaDriver:

Текущая рекомендованная позиция никогда не должна зависеть от ранее произведённых на рынке действий.

Что делать роботам, "выдающим свои рекомендации", чьи сигналы одномоментны? Робот увидел большую свечу верх - сигнал на покупку. Следующий бар уже обычный, сигнала никакого нет. Если робот не помнит своего состояния то его рекомендация на этом баре уже нулевая, а у робота который помнит не нулевая а длинная позиция. А ведь это два одинаковых робота.

MetaDriver:

Я общаюсь не с тем что он сказал, а с тем что он имел в виду.  Он имел в  виду предыдущее текущее состояние.

Ах, так вот что я на самом деле имел в виду! Буду знать:)
 
C-4: ... Это все конечно очень хорошо, но что делать стратегиям, чья текущая "рекомендация" зависит от ранее открытой позиции. Допустим стратегия активно пирамидит ...

Дело в том что у топикстартера скорее всего не стратегия, а прогнозатор цены.

MetaDriver: ... Задача стратегии - спрогнозировать будет ли рынок расти или падать в следующий момент времени, и с какой вероятностью.  От этого и зависит рекомендуемая рыночная позиция. Что там было в прошлом, есть ли сейчас открытые (в любую стороны) позы или нет - абсолютно неважно. ...
А то о чем вы (C-4) говорите это уже работа модуля Манименеджмента, которому на вход подаются как показания прогнозатора, так и результаты прошлой торговли (своего рода функция). Если ММ нет, то финальный алгоритм торговли, по сути превратит виртуальную позицию прогнозатора (которому по барабану прошлые результаты торговли) в реальную, где будущее направление рынка это знак рекомендуемой позиции, а уверенность/вероятность пропорциональна объему этой же позиции.

Модуль MM это прослойка между прогнозатором и драйвером, и результаты его работы могут быть любыми, от капитализации и ограничения риска (относительная просадка на X ... часов/сделок/пунктов движения ) до радикального переворота рекомендуемой прогнозатором позиции.

 
C-4:

Что делать роботам, "выдающим свои рекомендации", чьи сигналы одномоментны? Робот увидел большую свечу верх - сигнал на покупку. Следующий бар уже обычный, сигнала никакого нет. Если робот не помнит своего состояния то его рекомендация на этом баре уже нулевая, а у робота который помнит не нулевая а длинная позиция. А ведь это два одинаковых робота.

Этим роботам нужно однозначно лечиться.  Лечение может быть совсем несложным.  Нужна только мотивация. Это основное.

А чтоб появилась мотивация, нужно увидеть и заценить  колоссальное превосходство неттингового мышления над ордерным.  А пока они больны я их и близко не подпущу к здоровому населению - пусть отсиживаются в карантине..

:)

Ах, так вот что я на самом деле имел в виду! Буду знать:)
А что нет?  Мне уже извиняться?  Или таки я правильно угадал ход мыслей?  ;-))
Причина обращения: