Господа алготрейдеры, помогите решить проблему.
Бьюсь несколько дней с созданием кода в 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;
И так далее.
Но в итоге на тестах программа работает, не так как задумано.
Подскажите, каким образом лучше сделать такую логику на игру от уровней. Может, будет легче поработать как-то с массивами? Тогда как?