Встречал у разных авторов на СЛ утверждение, что найти оптимальную (наилучшую) ТС невозможно — поэтому лучше использовать портфель субоптимальных систем.
Но чтобы искать оптимальную систему и сделать вывод, что она никак не находится, нужно понимать, что именно ты ищешь.
Отсюда вопросы:
Если перед нами несколько систем, как понять, какая из них оптимальная или ближе к оптимальной, чем другие?
Через какой один параметр можно оценить все их сильные и слабые стороны, чтобы понять — «вот оно»?
И если мы пришли к выводу, что оптимальную систему найти нельзя — то ведь даже этот вывод мы делаем на основании того, что некий параметр в рамках одной системы достичь невозможно.
Соответственно, какой это параметр?
//@version=4 strategy(title="Random Entries Work", shorttitle="REW", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD,commission_type=strategy.commission.percent,commission_value=0) // === GENERAL INPUTS === strategy = input(defval="Long Only",title="Direction",options=["Long Only", "Short Only", "Random"]) enter_frequency = input(defval=10,minval=1,maxval=100,title="Percent Chance to Enter") exit_frequency = input(defval=3, minval=0,maxval=100,title="Percent Chance to Exit",tooltip="This should be much lower than Percent Chance to Enter. Higher values decrease time in market. Lower values increase time in market.") start_year = input(defval=2020, title="Start Year") // === LOGIC === r = random(0,100) enter = enter_frequency > r[0] exit = exit_frequency > r[0] direction = random(0,100) >= 50 // === STRATEGY - LONG POSITION EXECUTION === enterLong() => strategy.opentrades == 0 and enter and (strategy == "Long Only" or (strategy == "Random") and direction) and time > timestamp(start_year, 01, 01, 01, 01) exitLong() => exit strategy.entry(id="Long", long=strategy.long, when=enterLong()) strategy.close(id="Long", when=exitLong()) // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => strategy.opentrades == 0 and enter and (strategy == "Short Only" or (strategy == "Random" and not direction)) and time > timestamp(start_year, 01, 01, 01, 01) exitShort() => exit strategy.entry(id="Short", long=strategy.short, when=enterShort()) strategy.close(id="Short", when=exitShort())
Первый шаг — сделать непонятные системные маркеры более «человекоподобными». Например, пусть маркер высокого риска будет называться BUY CAREFULLY — я по-прежнему могу купить в этом месте, но нужно чётко понимать, что вероятность получить убыток будет максимальной. Сами маркеры стали больше и аккуратнее.
Затем нужно было добавить разделение рынка на «стабильный» и «турбулентный», они обозначены зелёным и красным фоном. Стабильный рынок имеет выраженное восходящее направление движения, а в турбулентном можно получить много ложных сигналов или вовсе попасть в затяжной даунтренд:
Например, набираем портфель произвольный: только лонг, только шорт или в любой иной пропорции.
Если вырос — держим дальше.
Если снизился — переворачиваем в противоположную сторону.
И так плывём по течению, торгуя только свою собственную эквити и пластично подстраиваясь под её сигналы в виде прибыльных или убыточных дней.