Андрей К, скажите пожалуйста как это сделать. я написал так, но он не работает:
Price1=«PRICE_SAR»
ParMed1=«SAR_1»
function crossOver()
if tPrice1[0].close<tPrice2[0].close and tPrice1[1].close>tPrice2[1].close then
return true
else return false
end
end
function crossOver()
— tPrice1,n1,s1 = getCandlesByIndex (Price1, 0, NumCandles-2, 2)
— tPrice2,n2,s2 = getCandlesByIndex (ParMed1, 1, NumCandles-2, 2)
if tPrice1[0].close>tPrice2[0].close and tPrice1[1].close<tPrice2[1].close then
return true
else return false
end
end
function main()
— Выводит сообщение
message('Простой MA-робот: '..ROBOT_STATE);
— «Бесконечный» цикл
while Run do
NumCandles1=getNumCandles(Price1)
NumCandles2=getNumCandles(ParMed1)
tPrice1,n1,s1 = getCandlesByIndex (Price1, 0, NumCandles1-2, 2) --считывает данные с графика
tPrice2,n2,s2 = getCandlesByIndex (ParMed1, 1, NumCandles2-2, 2) --считывает данные с графика
sleep(500);
1) NumCandles. Что за переменная, взята из воздуха.
2) Что за единица? Это номер линии в индикаторе. Там точно есть две линии? Если используете SAR, то там вроде их нет.
Эта функция должна выглядеть примерно вот так
Дальше ниже у вас еще идет вызов CrossUp (примерно на 187 строчке), а функции такой у вас нет
kvazar, есть такое понятие, как область видимости.
То что вы описали в Main, не будет видно в ваших функциях выше.
Есть два пути:
1) или сделать локальные переменные, как я вам показал. (NumCandles1, NumCandles2)
2) или NumCandles описать в самом верху, чтобы она была видна везде.
Price1=«PRICE»
Par1=«Ind1»
function crossOver(Price1,Par1)
tPrice1,n1,s1 = getCandlesByIndex (Price1, 0, NumCandles-2, 2)
tPrice2,n2,s2 = getCandlesByIndex (Par1, 1, NumCandles-2, 2)
if tPrice1[0]<tPrice2[0]and tPrice1[1]>tPrice2[1] then
return true
else return false
end
end
getCandlesByIndex выдает свечи. Потом у свечи нужно взять значение.
Например вот так
if tPrice1[0].Close < tPrice2[0].Close and… then
Price1=«PRICE_SAR»
ParMed1=«SAR_1»
function crossOver()
if tPrice1[0].close<tPrice2[0].close and tPrice1[1].close>tPrice2[1].close then
return true
else return false
end
end
function crossOver()
— tPrice1,n1,s1 = getCandlesByIndex (Price1, 0, NumCandles-2, 2)
— tPrice2,n2,s2 = getCandlesByIndex (ParMed1, 1, NumCandles-2, 2)
if tPrice1[0].close>tPrice2[0].close and tPrice1[1].close<tPrice2[1].close then
return true
else return false
end
end
function main()
— Выводит сообщение
message('Простой MA-робот: '..ROBOT_STATE);
— «Бесконечный» цикл
while Run do
NumCandles1=getNumCandles(Price1)
NumCandles2=getNumCandles(ParMed1)
tPrice1,n1,s1 = getCandlesByIndex (Price1, 0, NumCandles1-2, 2) --считывает данные с графика
tPrice2,n2,s2 = getCandlesByIndex (ParMed1, 1, NumCandles2-2, 2) --считывает данные с графика
sleep(500);
придется подождать, исправлять там у вас много
1) NumCandles. Что за переменная, взята из воздуха.
2) Что за единица? Это номер линии в индикаторе. Там точно есть две линии? Если используете SAR, то там вроде их нет.
Эта функция должна выглядеть примерно вот так
Дальше ниже у вас еще идет вызов CrossUp (примерно на 187 строчке), а функции такой у вас нет
NumCandles описывается в функции main, нужно перенести NumCandles в функцию crossOver?
kvazar, есть такое понятие, как область видимости.
То что вы описали в Main, не будет видно в ваших функциях выше.
Есть два пути:
1) или сделать локальные переменные, как я вам показал. (NumCandles1, NumCandles2)
2) или NumCandles описать в самом верху, чтобы она была видна везде.
Лучше сделать по первому пути.
удалите из облака свой код.
Только зарегистрированные и авторизованные пользователи могут оставлять ответы.
Залогиниться
Зарегистрироваться