Сообщение при открытии позиции

Страницы: 1
RSS
Сообщение при открытии позиции
 
Добрый день.

Только начинаю программировать, нужна ваша поддержка.

Пишу программу, чтобы робот выводил сообщение, когда открывается позиция.
Пока вот такой код. Сообщения не выдаёт, ошибки тоже не показывает. Что здесь не верно?...
Идентификатор в графике прописан.
Код
MyAccount="---"          -- сюда вбить свой код клиента; или вбить в настройки индикатора в квике
class_code="SPBFUT"
Emit="RIZ8"
loss=100                   
loss_prosk=0
profit=110               -- количество пунктов от места входа в сделку до тейк профита; или вбить в настройки индикатора в квике
profit_otstup=0          -- отступ от максимума (параметр тейк-профита); или вбить в настройки индикатора в квике
profit_prosk=10          -- защитный спред (параметр тейк-профита); или вбить в настройки индикатора в квике

is_run=true

function main()

   while is_run do
      Body()
   end
end

function OnStop(stop_flag)              
     is_run=false
     stop_flag=1
end

function Body()

function PosNowFunc(emit,account)                           
   local nSize = getNumberOf("futures_client_holding")          --количество строк в таблице "Ограничения по клиентским счетам"
   if (nSize~=nil)then   
      for i = 0, nSize-1 do
         local row = getItem("futures_client_holding",i)
         if(row~=nil and row.sec_code == emit and row.trdaccid == account) then      --больше одной строки не должно быть для каждого инструмента
            return tonumber(row.totalnet)                                 --значение позиции на фортс   
         end
      end
   end
   return 0 
end

local PosNow = PosNowFunc(Emit,MyAccount)

local N=getNumCandles("M1")
t,n,l=getCandlesByIndex("M1", 0, N-6, 6)    --возвращает информацию о 5 последних свечах на графике с определённым идентификатором.

if PosNow>0 then

if t[5].low<t[4].low
and t[5].low<t[3].low
and t[5].low<t[2].low
and t[5].low<t[1].low
and t[5].low<t[0].low
then low_high=(t[5].low)-10
message("Стоп-лосс будет установлен по цене ".. tostring ((t[5].low)-10).."!")

elseif t[4].low<t[5].low
and t[4].low<t[3].low
and t[4].low<t[2].low
and t[4].low<t[1].low
and t[4].low<t[0].low
then low_high=(t[4].low)-10
message("Стоп-лосс будет установлен по цене ".. tostring ((t[4].low)-10).."!")


elseif t[3].low<t[5].low
and t[3].low<t[4].low
and t[3].low<t[2].low
and t[3].low<t[1].low
and t[3].low<t[0].low
then low_high=(t[3].low)-10
message("Стоп-лосс будет установлен по цене ".. tostring ((t[3].low)-10).."!")


elseif t[2].low<t[5].low
and t[2].low<t[4].low
and t[2].low<t[3].low
and t[2].low<t[1].low
and t[2].low<t[0].low
then low_high=(t[2].low)-10
message("Стоп-лосс будет установлен по цене ".. tostring ((t[2].low)-10).."!")

elseif t[1].low<t[5].low
and t[1].low<t[4].low
and t[1].low<t[3].low
and t[1].low<t[2].low
and t[1].low<t[0].low
then -- then low_high=(t[1].low)-10
message("Стоп-лосс будет установлен по цене ".. tostring ((t[1].low)-10).."!")

elseif t[0].low<t[5].low
and t[0].low<t[4].low
and t[0].low<t[3].low
and t[0].low<t[2].low
and t[0].low<t[1].low
then low_high=(t[0].low)-10
message("Стоп-лосс будет установлен по цене ".. tostring ((t[0].low)-10).."!")

end
end

if PosNow<0 then

message("Работает!")

end
end
 
Неправильно скопировал код...
Вот так будет более понятно, без лишних строк:
Код
MyAccount="SPBFUT00OI9"          -- сюда вбить свой код клиента; или вбить в настройки индикатора в квике
class_code="SPBFUT"
Emit="RIZ8"


is_run=true

function main()

   while is_run do
      Body()
   end
end

function OnStop(stop_flag)              
     is_run=false
     stop_flag=1
end

function Body()

function PosNowFunc(emit,account)                           --??? откуда здесь такие локальные переменные??? находим позицию по инструменту на фортс
   local nSize = getNumberOf("futures_client_holding")          --количество строк в таблице "Ограничения по клиентским счетам"
   if (nSize~=nil)then   
      for i = 0, nSize-1 do
         local row = getItem("futures_client_holding",i)
         if(row~=nil and row.sec_code == emit and row.trdaccid == account) then      --больше одной строки не должно быть для каждого инструмента
            return tonumber(row.totalnet)                                 --значение позиции на фортс   
         end
      end
   end
   return 0 
end

local PosNow = PosNowFunc(Emit,MyAccount)


if PosNow>0 then

message("Работает!")

end
end
 
Олег,
Добавьте sleep(1000) в цикл while is_run do
скорей всего причина в этом.
По остальному коду проблема у нас не воспроизводится.
 
Sergey Gorokhov, добавил; проблема осталась, всё равно не показывает сообщение...
 
Олег,
Тогда проверьте что попадает в PosNow перед if.
message("PosNow="..PosNow)
 
Цитата
Sergey Gorokhov написал:
Олег,
Тогда проверьте что попадает в PosNow перед if.
message("PosNow="..PosNow)
Не совсем понял...
Строка выглядит
if PosNow>0 then
, между if и PosNow ничего нет..?
 
Цитата
Олег написал:
между if и PosNow ничего нет..?

Между ними стоит добавить какой-то минимальный курс по программированию  :unamused:
 
Цитата
Олег написал:
Не совсем понял...

Добавить строку
message("PosNow="..PosNow)

перед строкой

if PosNow>0 then

Вот так:
Код
--остальной код
message("PosNow="..PosNow)
if PosNow>0 then
--остальной код
 
Часы Luminor Panerai

https://clck.ru/EXwsL

Элитные часы Luminor Panerai - отличный подарок для любителей изысканных аксессуаров. Отличаются строгим дизайном, высочайшим качеством и роскошным внешним видом.
Страницы: 1
Читают тему
Наверх