Как в Lua задать условие пересечения индикатора с ценой (сигнал нужно получить в момент пересечения, до закрытия свечи)? Мой не рабочий вариант ниже.

  • обсудить на форуме:
  • Quik Lua
★1
ВНИМАНИЕ! КОММЕНТАРИИ ПЕРВОГО УРОВНЯ В ВОПРОСАХ УПОРЯДОЧИВАЮТСЯ ПО ЧИСЛУ ПЛЮСИКОВ, А НЕ ПО ВРЕМЕНИ ПУБЛИКАЦИИ.

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
avatar
Андрей К, а как можно взять значение из не закрытой свечи?

kvazar, можно, просто будет выдавать текущее значение
avatar
Андрей К, скажите пожалуйста как это сделать. я написал так, но он не работает:

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);

kvazar, уточните, что именно не работает… не запускается?
avatar
kvazar, скидывайте куда нибудь полный файл. В том что вы тут скинули, полно ошибок
avatar
Андрей К, вот ссылка https://cloud.mail.ru/public/ApRH/ddVorrubZ
kvazar, вы когда запускаете скрипт, читайте текст ошибки с адресом строки в коде

придется подождать, исправлять там у вас много


avatar
Андрей К, большое спасибо, я только начал изучать QLua, поэтому сильно касячу. 


1) NumCandles. Что за переменная, взята из воздуха.
2) Что за единица? Это номер линии в индикаторе. Там точно есть две линии? Если используете SAR, то там вроде их нет.

Эта функция должна выглядеть примерно вот так



Дальше ниже у вас еще идет вызов CrossUp (примерно на 187 строчке), а функции такой у вас нет

avatar
Андрей К, Спасибо, я исправил писку crossOver  на crossUnder.
 NumCandles описывается в функции main, нужно перенести  NumCandles в функцию crossOver?

kvazar, есть такое понятие, как область видимости.

То что вы описали в Main, не будет видно в ваших функциях выше.
Есть два пути:

1) или сделать локальные переменные, как я вам показал. (NumCandles1, NumCandles2)
2) или  NumCandles описать в самом верху, чтобы она была видна везде.

Лучше сделать по первому пути.

avatar
Андрей К, спасибо, скрипт заработал
kvazar, поздравляю =)
удалите из облака свой код.
avatar

Только зарегистрированные и авторизованные пользователи могут оставлять ответы.

Залогиниться

Зарегистрироваться

теги блога Трейдер Вася

....все тэги



UPDONW
Новый дизайн