Что нужно начинающему трейдеру? Получить опыт, которого у него нет, и при этом сохранить свои деньги. Иначе зачем опыт, если торговать не на что. Хорошо бы при этом сохранить еще и свои нервы. Значит просадки должны быть небольшие. Еще хорошо бы с годик или полгодика самому понаблюдать за рынком. Но где взять для этого время!
Вот я и решил, в меру своих скромных способностей, помочь новичкам. Сделал простую, но не значит плохую, «ТС для новичка». Протестировал, как смог. С 10 августа, в течение месяца буду гонять «ТС для новичка» на реальных цифрах с рынка и выкладывать каждый день, вечером соответствующее видео. Чтоб, значит, новичок видел, как цены движутся, как позиция открывается и закрывается, как убытки расстраивают, и как доходы воодушевляют. Через месяц, всем, кого устроят результаты «ТС для новичка», вышлю открытый скрипт на мейл. Приятного просмотра.
Очень странно видеть историческое тестирование на интервале 1 квартал при котором было всего 12 сделок.
Если Вы скрипт сейчас не даёте по какой-то причине и раз у нас нет возможности сделать это самим, то сделайте тест на истории хотя бы лет за 5 с 2010 или 2011 года.
Бьюсь несколько дней с созданием кода в 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? Тогда как?