Qlua. Не срабатывает while Run and trans_Status == nil do sleep(1); end; в коде. Помогите пожалуйста настроить флажок открытия заявки и позиции.https://cloud.mail.ru/public/5YEP/aAot7CJjr

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

срабатывает при транзакции?
avatar
Андрей К, message('Робот: trans_Status: '..tostring(trans_Status)) 
так срабатывает. но где то еще касяк, и на реальном счету функция пытается вечно покупать

kvazar, может быть ошибка в этой строчке
  trans_Status = nil;
kvazar, а как вы сделали вывод, что ожидание while не срабатывает?
avatar
Андрей К, мне сказали, но похоже работает(( но все равно где то касяк(( 

kvazar, хех. Доверяй, но проверяй.

Раз вы оккупировали СЛ вопросами. Я вам дам совет. Чем лучше зададите, тем больше шансов, что вам ответят. Нужно всегда больше подробностей. Что сделали, что происходит, какие симптомы. А из вас все время вытягивать надо.  Тем более выводы у вас в вопросах зачастую могут быть не верными, из за недостатка опыта. То есть вы заведомо толкаете на неправильный путь.

Что касательно вашей проблемы. Расставляйте у себя в программе «ловушки». Возьмите на вооружение этот прием.

Поставьте перед своим while какой нибудь 
message ('Сейчас будем ждать, сейчас статуc = '..trans_Status);

Поставьте после своего while какой нибудь
message ('Я дождался, сейчас статуc = '..trans_Status);

Утыкайте весь код своими ловушками и поймите что у вас происходит с программой.
avatar
Андрей К, придется, но вся беда в том, что на демо-счету все работает, а за дебаг на реальном счету придется платить деньги… вот и надеялся на помощь… а за совет спасибо

kvazar, если там работает, а там не работает, значит есть скрытые ошибки, которые нужно выявлять. Потому что когда она вылезет на бою, это может привести к большим денежным потерям.

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

Андрей К, попробовал на реальном счету включить скрипт и найти ошибки, цена не подошла и робот стал выводить ошибки. Но он должен был пытаться открыть позицию только 10 раз, а он зациклился и пытался, пока я его не остановил. Лог и код тут  , посмотрите пожалуйста.
kvazar, какие у вас мысли на этот счет?
avatar
Андрей К, почему то не срабатывает счетчик for i=1,10 do  , хотя по логике function Trade(Type)  в таком случае выводит фолс.
sendTransaction

 

Функция предназначена для отправки транзакций в торговую систему.

Формат вызова:

STRING result sendTransaction(TABLE transaction)

Параметры:

  • result – строка, содержащая текст ошибки, если она случилась при обработке транзакции; 


на реальном счёте может отличаться как счёт, так и способ кодирования инструмента. такого инструмента может просто не быть, в зависимости от брокера, у кого-то SiM7, а у кого-то Si-6.17
avatar
ПBМ, я все это проверил. транзакции успешно отправляются, скрипт покупает на все деньги, а не указанное число контрактов, когда заканчиваются деньги, он все равно пытается бесконечное количество раз покупать.

kvazar, Андрей К, попробовал на реальном счету включить скрипт и найти ошибки, цена не подошла и робот стал выводить ошибки. Но он должен был пытаться открыть позицию только 10 раз, а он зациклился и пытался, пока я его не остановил. Лог и код тут , посмотрите пожалуйста.
kvazar, а зачем вы задаете цену вне лимита?
avatar
Андрей К, не специально, просто цена сильно скаканула, заодно ошибка проявилась. кажется я понял. ROBOT_STATE = 'В ПРОЦЕССЕ СДЕЛКИ'; не меняется если позиция не открылась и поэтому начинает заново пытаться открыть сделку
Андрей К, может быть так заработает?

--Если СОСТОЯНИЕ робота «В ПРОЦЕССЕ СДЕЛКИ»
if ROBOT_STATE == 'В ПРОЦЕССЕ СДЕЛКИ' then
— Выводит сообщение
message('Робот: В ПРОЦЕССЕ СДЕЛКИ');
— Делает 10 попыток открыть сделку
local Price = false; — Переменная для получения результата открытия позиции (цена, либо ошибка(false))
for i=1,10 do
if not Run then return; end; — Если скрипт останавливается, не затягивает процесс

— Совершает СДЕЛКУ указанного типа [«BUY», или «SELL»] по рыночной(текущей) цене размером в 1 лот,
— возвращает цену открытой сделки, либо FALSE, если невозможно открыть сделку
Price = Trade(CurrentDirect);
— Если сделка открылась
if Price ~= false or ROBOT_STATE = 'ОТКРЫЛ ПОЗИЦИЮ №1' then
— Прерывает цикл FOR
break;
end;
sleep(100); — Пауза в 100 мс между попытками открыть сделку
if i=10 and Price ~= false and ROBOT_STATE == 'В ПРОЦЕССЕ СДЕЛКИ' then ROBOT_STATE='В ПОИСКЕ ТОЧКИ ВХОДА' end
end;
if not Run then return; end; — Если скрипт останавливается, не затягивает процесс
— Если сделка открыта
if Price ~= false then
ROBOT_STATE = 'ОТКРЫЛ ПОЗИЦИЮ №1'
message('Робот: ОТКРЫЛ ПОЗИЦИЮ №1');
end;


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

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

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

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

....все тэги



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