Блог им. melamaster

Торговая система "Будильник"

У данной торговой системы есть три параметра: время входа, время выхода и направление (купить-продать).

Делаем два простых шага:
1. Просчитываем эквити всех систем. Например, на часовом тайм-фрейме таких систем будет 105 штук.
2. Отбираем только те системы, которые достаточно стабильно зарабатывают и включаем их в портфель.

Результаты такого портфеля на часовиках (Si, RI, SR):
Торговая система "Будильник"



















Торговая система "Будильник"



















Торговая система "Будильник"




















Результаты такого портфеля на 15-минутках (Si, RI, SR):
Торговая система "Будильник"




















Торговая система "Будильник"




















Торговая система "Будильник"





















Ось абсцисс — номер дня, начиная с 2010 года по тек. время.
Ось ординат — проценты.

    ★9
    14 комментариев
    Ета...
    Комиссия учтена?

    Или для чего сей аналайз
    avatar
    виталюня, для понимания. Без учета комиссий, проскальзываний и т.п.
    avatar
    Результаты и количество сделок на 15 мин не сильно отличаются от часовиков, я не прав?
    Да, спасибо за анализ!
    avatar
    baron_samedi, они не могут различаться в том виде как посчитаны, поскольку у каждой системы (хоть 15- хоть 60-минутной) ровно 1 сделка в день.
    Ось абсцисс — номер дня, начиная с 2010 года по тек. время.
    avatar
    Sergey Pavlov, 
    Тогда следует понять так, что это простоэквити подневная, а сделок могло быть несколько....
    Ну да это не важно.
    Спасибо.
    avatar
    baron_samedi, кол-во сделок = кол-ву дней, ибо каждая система делает 1 сделку в день. Разница между 60- и 15-минутными система только в точности входов-выходов. В первом случае точность с точностью до часов. Во втором случае с точностью до четверти часа. в часовых системах участвует около 20 систем, т.е. каждая эквити это сумма эквити 20 систем, деленная на 20. Аналогично по 15-минутным, но там больше систем, около 100. Ну и общая эквити получается делением общей суммы по каждому дню на это же число примерно равное 100.
    avatar
    Sergey Pavlov, 
    А, тогда так, как я вначале и подумал…
    avatar
    Пахнет подгоном под историю. Вы рискнете такое торговать?
    avatar
    ch5oh, такое торговать не рискну, слишком низкий кпд. Однако, напомню, что любая автономная алгосистема — подгон под историю. Не нужно этого бояться.
    avatar
    Почему на часовом таймфрейме таких систем будет 105 штук?
    avatar
    SergeyJu, таково количество сочетаний. Всего у нас 14 часов. 1-1, 1-2, ..., 1-14, 2-2, 2-3,...2-14,...14-14. Таких пар всего получится 105 штук.
    avatar
    Рука тянется навесить еще какой-нибудь фильтр.
    avatar
    Господа алготрейдеры, помогите решить проблему.
    Бьюсь несколько дней с созданием кода в C#,  пока не получается справиться своими силами, так как не программист(.

    На начало дня задаем несколько уровней цены, допустим 3 значения выше текущей цены, 3 значения ниже (S1,S2,S3, B1,B2,B3).

    Играем на отбой от уровней, входим в сделку по цене уровня + некоторый отступ (для шорта) и уровень – отступ для лонга (level ± отступ). Отступ «заоптимизирую» потом. Если вошли в позицию, то уровень считаем отыгравшим и больше на него не ориентируемся.

    Не получается запрограммировать такую логику. Пока только смог придумать такой кривой код для определения текущего активного уровня (от которого идет сигнал на вход),  определяю какой уровень ближе к текущей цене:

    В цикле:

    currentprice = Bars.Close[bar];

    if (Math.Abs(S1 — currentprice) < Math.Abs(B1 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(B2 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(B3 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(S2 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(S3 — currentprice))

    selllevel = S1;

    else if (Math.Abs(S2 — currentprice) < Math.Abs(B1 — currentprice) && Math.Abs(S2 — currentprice) < Math.Abs(B2 — currentprice) && Math.Abs(S2 — currentprice) < Math.Abs(B3 — currentprice) && Math.Abs(S2 — currentprice) < Math.Abs(S1 — currentprice) && Math.Abs(S2 — currentprice) < Math.Abs(S3 — currentprice)

    selllevel = S2;

    и так далее для buylevel и каждого уровня B1,B2,B3.

    Потом, если пришел сигнал на вход, то опять таким же образом определяю на каком уровне сыграли и присваиваю ему значение 0, например:

    if (Math.Abs(S1 — currentprice) < Math.Abs(B1 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(B2 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(B3 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(S2 — currentprice) && Math.Abs(S1 — currentprice) < Math.Abs(S3 — currentprice)

     

    S1 = 0;

    И так далее.

    Но в итоге на тестах в Wealth Lab’е программа работает, не так как задумано.

    Подскажите, каким образом лучше сделать такую логику на игру от уровней. Может, будет легче поработать как-то с DataSeries? Тогда как?

     

     

     

     

    avatar

    теги блога Sergey Pavlov

    ....все тэги



    UPDONW
    Новый дизайн