После того, как вы определили переменную в Thinkscript и присвоили ее, она действительна только для одного бара, она ведет себя как константа, поэтому ее нельзя переназначить. Я почти уверен, что вы не можете даже поместить команду Def в условное выражение, как в большинстве кодов. Чтобы создать «динамический» SCORE, вам нужно назначить динамическое значение в той же строке, которую вы создаете. Вам не нужно
def score = 0;
, поскольку, когда вы определяете переменную, она все равно будет иметь нулевое значение.
Вам также не нужны дополнительные переменные для заполнителей trendisup, потому что на самом деле
secondLastTrendisUp
- это то же самое, что сказать
lastTrendisUp[1]
, потому что это ужевычисляется в последнем баре.
Вы можете выполнить счетчик без дополнительных переменных, используя инструкцию FOLD, например:
def score= fold index=0 to 4
with p=0
do p + ((bearcross[index] or bullcross[index]) and lastTrendisUp[index]);
Это добавит единицу к оценке каждый раз, когда условия выполняются, и назначит итоговое значение. в переменную SCORE. Я думаю, что это то, чего вы хотели бы достичь, я не могу сказать, так как вы никогда не покажете, что вы делаете с помощью переменной Score позже ... Если вы хотите просто выяснить, является ли bullcross или bearcrossУсловие , а также условие lasttrendisup оценивается как истинное в любом из последних пяти баров, затем вы добавляете 'while p = 0' выше с, и оно возвращает единицу в SCORE, как толькоон встречает первый истинный экземпляр.