Как влияет message на работу скрипта?

Страницы: 1
RSS
Как влияет message на работу скрипта?, Простенький скрипт не работает без message
 
Доброго времени суток.
Написал коротенький скрипт, который в квике 8.0.5.2 (демка) не работает совсем.
Когда решил проверить где косяк и вставил мессаги по коду, то все заработало.
Опытным путем выяснил, что когда в блоке есть message, то он работает (например функция отправки транзакций). Как только удалил, перестает работать.
Это прикол какой то или я дурак?

Полный код.
Код
--/*НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ*/
ACCOUNT           = 'SPBFUT00419';        -- Идентификатор счета
CLASS_CODE        = 'SPBFUT';             -- Код класса
SEC_CODE          = 'SRU9';               -- Код бумаги
INTERVAL          = INTERVAL_M1;          -- Таймфрейм графика

 
--/*РАБОЧИЕ ПЕРЕМЕННЫЕ РОБОТА (менять не нужно)*/
SEC_PRICE_STEP    = 0;                    -- ШАГ ЦЕНЫ ИНСТРУМЕНТА
trans_id          = os.time();            -- Задает начальный номер ID транзакций
trans_Status      = nil;                  -- Статус текущей транзакции из функции OnTransPeply
trans_result_msg  = '';                   -- Сообщение по текущей транзакции из функции OnTransPeply
 
Run               = true;                 -- Флаг поддержания работы бесконечного цикла в main

function OnInit()
   -- Получает доступ к свечам графика
   DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL);
   --message("start");
   --sleep(100);
   -- Подписывается на обновления графика
   DS:SetEmptyCallback()
 
   -- Получает ШАГ ЦЕНЫ ИНСТРУМЕНТА
   SEC_PRICE_STEP = getParamEx(CLASS_CODE, SEC_CODE, "SEC_PRICE_STEP").param_value;
end;
 
function main()
   -- "Бесконечный" цикл
   while Run do 
      --message("hello again =/");
      --sleep(1000);
      LOBI = DS:Size();
      if DS:O(LOBI-1) < DS:C(LOBI-1) then
         --message("Trade B");
         Trade('B');
      elseif DS:C(LOBI-1) > DS:O(LOBI-1) then
         --message("Trade S");
         Trade('S');
      end;

      sleep(10);
   end;
end;

function OnStop()
   Run = false;
end;
 
-----------------------------
-- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ --
-----------------------------
function Trade(Type)
   --Получает ID транзакции
   trans_id = trans_id + 1;
 
   local Price = 0;
   --message("trans");
   --sleep(1000);

   -- Заполняет структуру для отправки транзакции
   local Transaction={
      ['TRANS_ID']   = tostring(trans_id),
      ['ACTION']     = 'NEW_ORDER',
      ['CLASSCODE']  = CLASS_CODE,
      ['SECCODE']    = SEC_CODE,
      ['OPERATION']  = Type, -- операция ("B" - buy, или "S" - sell)
      ['TYPE']       = 'M', -- по рынку (MARKET)
      ['QUANTITY']   = '1', -- количество
      ['ACCOUNT']    = ACCOUNT,
      ['PRICE']      = tostring(Price),
      ['CLIENT_CODE']= '111'
   }
   -- Отправляет транзакцию
   sendTransaction(Transaction);
   --message("trans sended");
   --sleep(100);
end;
 
Цитата
Д К написал:
квике 8.0.5.2 (демка)
Как сейчас посмотрел, реальная версия квика 8.0.0
 
Добрый день.

Сама  функция message не должна что-то изменить, не совсем понятно что  подразумевается под «работает» и «не работает», не подаются транзакции?

Проверьте, что возвращает функция sendTransaction(Transaction).
 
У вас по коду между строками: DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL); и  DS:SetEmptyCallback() нету ожидания получения источника данных вообще. Когда вы добавляете message, то он какое-то время занимает, пока выполняется, в это время часть или все данные могут успеть получиться.
Может проблема в этом. Обычно там небольшой цикл вставляют на ожидание и проверку. что данные получены.
trdrobot.ru
 
Цитата
Egor Zaytsev написал:
Добрый день.

Сама  функция message не должна что-то изменить, не совсем понятно что  подразумевается под «работает» и «не работает», не подаются транзакции?

Проверьте, что возвращает функция sendTransaction(Transaction).
Конкретно вижу, что транзакций нет. Меняю в коде только message.
Ответ sendTransacrion проверю, спасибо за подсказку.
 
Цитата
Александр М написал:
У вас по коду между строками: DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL); и  DS:SetEmptyCallback() нету ожидания получения источника данных вообще. Когда вы добавляете message, то он какое-то время занимает, пока выполняется, в это время часть или все данные могут успеть получиться.
Может проблема в этом. Обычно там небольшой цикл вставляют на ожидание и проверку. что данные получены.
Хорошая мысль. Стоит опробовать, спасибо.
 
Только что заметил. Проблема в другом. Скрипт только покупает, но не продает.
Дело не в message. Это я дурак, неправильно условие записал. Всем спасибо.
Страницы: 1
Читают тему (гостей: 1)
Наверх