Олег (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Перевод робота с lua 5.1 на lua 5.3
 
Добрый день.

Писал робота для Квика версии 7 на lua 5.1. При использовании на демо-версии Квика 7 версии робот работает; при использовании на реальной версии 8.12.0.41 - не выставляет отложку в соответствии с кодом.
Вопрос: каким образом нужно изменить код, чтобы робот заработал на новой версии Квика?
Возможно, есть какое-то руководство или отдельная тема на форуме, посвящённая изменениям в коде при переходе с lua 5.1 на lua 5.3?

Неработающая на новой версии Квика часть кода:

Код
function NewOtlLong(acc,emit,class)
   
   local NumOfCandlesM1 = getNumCandles (graphic_id)                     
   local t, n, _ = getCandlesByIndex(graphic_id, 0, NumOfCandlesM1-3, 3)      
   
   transaction={                                                
               ["ACCOUNT"] = acc,
               ["CLASSCODE"] = class,
               ["SECCODE"] = emit,
               ["ACTION"] = "NEW_STOP_ORDER",
               ["TRANS_ID"] = "001",
               ["OPERATION"] = "B",
               ["QUANTITY"] = "1",
               ["STOPPRICE"] = tostring((t[1].low)+60),
               ["PRICE"] = tostring((t[1].low)+60),
               ["EXPIRY_DATE"] = "GTC"
            }
   transaction.CLIENT_CODE = "РОБОТ"
   local res = sendTransaction(transaction)                        
   return 1                                                   
end
Отменить цикличность появления сообщения
 
Добрый день.

Пишу простой код на Lua. Задача: при выполнении определённых условий высвечивать на экране сообщение "Возможна сделка в бай, ...".
Столкнулся с проблемой: окно сообщения появляется на экране каждые 5 секунд (и то только благодаря тому, что добавлена в код строка "sleep (5000)").
Вопрос: как прописать код, чтобы сообщение появлялось либо раз в N минут (но тогда именно сразу после открытия новой свечи), либо просто появлялось всего один раз на каждое условие, а не зацикливалось по кругу?

Фрагмент кода привожу ниже:

function Body()


Problem = ""

sleep (20000)

local TransCount = 0
local PosNow = PosNowFunc(Emit,MyAccount)
local Signal = SignalCheck()
local OtlPos = OtlPosFunc (Emit,MyAccount)

local NumOfCandlesM1 = getNumCandles (graphic_id)
local t, n, _ = getCandlesByIndex(graphic_id, 0, NumOfCandlesM1-3, 3)

if (Signal==1) and (OtlPos==0) and (PosNow==0) and (t[1].high-t[1].low)>=60 then
message ("Возможна сделка в бай")
end

--M1
local N1=getNumCandles(graphic_id)
   local t1,n1,l1=getCandlesByIndex(graphic_id, 0, N1-2, 2)
end
Робот не работает на графике с Аллигатором
 
Доброго времени суток.

Пишу робота, который входит в сделку по определённой свечной формации. Всё отлично работает, но стоит задача привязать робота к индикатору Аллигатор. А как только добавляю индикатор на график, робот перестаёт работать и реагировать на какие-либо сигналы. Методом проб вычислил, что так же робот ведёт себя при добавлении индикатора Ichimoku, - предполагаю, что дело в сдвиге линий индикатора и сдвиг линий сбивает процесс считывания информации...

В чём может быть причина и как мне сонастроить Аллигатора с роботом?
вывод данных метки, Как вывести параметр метки при помощи GetLabelParams?
 
Добрый день.

Задача - из метки, созданной при помощи робота (AddLabel), вернуть параметр YVALUE (т.е. цену, на уровне которой находится метка), чтобы затем использовать эту цену как переменную.
Пробую сделать это при помощи функции GetLabelParams, ошибка - Декода выдаёт GetLabelParams=nil.

Вот часть кода:
Код
local StopPointBuy = GetLabelParams(graphic_id,label_id)
Переменные graphic_id и label_id определяются. В чём ошибка? Или есть более простой способ вывести из таблицы метки значение параметра?
Сообщение при открытии позиции
 
Добрый день.

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

Пишу программу, чтобы робот выводил сообщение, когда открывается позиция.
Пока вот такой код. Сообщения не выдаёт, ошибки тоже не показывает. Что здесь не верно?...
Идентификатор в графике прописан.
Код
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
Страницы: 1
Наверх