Qlua. Не срабатывает while Run and trans_Status == nil do sleep(1); end; в коде. Помогите пожалуйста настроить флажок открытия заявки и позиции.https://cloud.mail.ru/public/5YEP/aAot7CJjr
Андрей К, message('Робот: trans_Status: '..tostring(trans_Status))
так срабатывает. но где то еще касяк, и на реальном счету функция пытается вечно покупать
Раз вы оккупировали СЛ вопросами. Я вам дам совет. Чем лучше зададите, тем больше шансов, что вам ответят. Нужно всегда больше подробностей. Что сделали, что происходит, какие симптомы. А из вас все время вытягивать надо. Тем более выводы у вас в вопросах зачастую могут быть не верными, из за недостатка опыта. То есть вы заведомо толкаете на неправильный путь.
Что касательно вашей проблемы. Расставляйте у себя в программе «ловушки». Возьмите на вооружение этот прием.
Поставьте перед своим while какой нибудь
message ('Сейчас будем ждать, сейчас статуc = '..trans_Status);
Поставьте после своего while какой нибудь
message ('Я дождался, сейчас статуc = '..trans_Status);
Утыкайте весь код своими ловушками и поймите что у вас происходит с программой.
Андрей К, придется, но вся беда в том, что на демо-счету все работает, а за дебаг на реальном счету придется платить деньги… вот и надеялся на помощь… а за совет спасибо
kvazar, если там работает, а там не работает, значит есть скрытые ошибки, которые нужно выявлять. Потому что когда она вылезет на бою, это может привести к большим денежным потерям.
Коду нужно создать условия, чтобы эта ошибка воспроизвелась на тесте.
Андрей К, попробовал на реальном счету включить скрипт и найти ошибки, цена не подошла и робот стал выводить ошибки. Но он должен был пытаться открыть позицию только 10 раз, а он зациклился и пытался, пока я его не остановил. Лог и код тут , посмотрите пожалуйста.
Функция предназначена для отправки транзакций в торговую систему.
Формат вызова:
STRING result sendTransaction(TABLE transaction)
Параметры:
result – строка, содержащая текст ошибки, если она случилась при обработке транзакции;
на реальном счёте может отличаться как счёт, так и способ кодирования инструмента. такого инструмента может просто не быть, в зависимости от брокера, у кого-то SiM7, а у кого-то Si-6.17
ПBМ, я все это проверил. транзакции успешно отправляются, скрипт покупает на все деньги, а не указанное число контрактов, когда заканчиваются деньги, он все равно пытается бесконечное количество раз покупать.
kvazar, Андрей К, попробовал на реальном счету включить скрипт и найти ошибки, цена не подошла и робот стал выводить ошибки. Но он должен был пытаться открыть позицию только 10 раз, а он зациклился и пытался, пока я его не остановил. Лог и код тут , посмотрите пожалуйста.
Андрей К, не специально, просто цена сильно скаканула, заодно ошибка проявилась. кажется я понял. 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;
срабатывает при транзакции?
так срабатывает. но где то еще касяк, и на реальном счету функция пытается вечно покупать
trans_Status = nil;
Раз вы оккупировали СЛ вопросами. Я вам дам совет. Чем лучше зададите, тем больше шансов, что вам ответят. Нужно всегда больше подробностей. Что сделали, что происходит, какие симптомы. А из вас все время вытягивать надо. Тем более выводы у вас в вопросах зачастую могут быть не верными, из за недостатка опыта. То есть вы заведомо толкаете на неправильный путь.
Что касательно вашей проблемы. Расставляйте у себя в программе «ловушки». Возьмите на вооружение этот прием.
Поставьте перед своим while какой нибудь
message ('Сейчас будем ждать, сейчас статуc = '..trans_Status);
Поставьте после своего while какой нибудь
message ('Я дождался, сейчас статуc = '..trans_Status);
Утыкайте весь код своими ловушками и поймите что у вас происходит с программой.
Коду нужно создать условия, чтобы эта ошибка воспроизвелась на тесте.
Функция предназначена для отправки транзакций в торговую систему.
Формат вызова:
STRING result sendTransaction(TABLE transaction)
Параметры:
на реальном счёте может отличаться как счёт, так и способ кодирования инструмента. такого инструмента может просто не быть, в зависимости от брокера, у кого-то SiM7, а у кого-то Si-6.17
--Если СОСТОЯНИЕ робота «В ПРОЦЕССЕ СДЕЛКИ»
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;
Только зарегистрированные и авторизованные пользователи могут оставлять ответы.
Залогиниться
Зарегистрироваться