несколько транзакций за одну секунду

Страницы: 1
RSS
несколько транзакций за одну секунду
 
Здравствуйте. есть код:


Код
stime = tostring(GetInfoParam("SERVERTIME")) 
base_time = "12:15:50" 
 if stime == base_time then  
make_transaction(stop_limit)  
make_transaction (by-sell)
при наступлении времени х - делаем стоп заявку, делаем заявку на куплю-продажу.

в итоге у меня 5 стопов, и один вход в рынок (и сообщения что нехватка денег на счету).

пока было условие, в течении одной секунды скрипт делал make_transaction, сколько успел столько и сделал?
 
Цитата
Валентин пишет:
пока было условие, в течении одной секунды скрипт делал make_transaction, сколько успел столько и сделал?
Здравствуйте,
Сколько запрограммируете столько и отправит
 
запрограммировал 2. откуда пять стопов?
 
Цитата
Валентин пишет:
запрограммировал 2. откуда пять стопов?
По присланному куску кода не видно что запрограммировано 2 транзакции
Вы проверяете время условием "if stime == base_time then" однако это условие может за секунду сработать далеко не один раз.
Установите ограничение, например в виде флага, чтобы избежать повторного срабатывания
 
ну вот. спасибо
 
stime = tostring(GetInfoParam("SERVERTIME"))
base_time = "12:15:50"
someflag = 0
if stime == base_time then  
 if someflag == 0 then
    make_transaction(stop_limit)  
    make_transaction (by-sell)
    someflag = 1


Данный скрипт работает постоянно (стартует при запуске квика и работает с функцией sleep(200).
при перезапуске квика someflag будет обнулен?
 
*скрипт работает постоянно - это значит, что в нем нет вызова onstop()
 
Цитата
Валентин пишет:
stime = tostring(GetInfoParam("SERVERTIME"))
base_time = "12:15:50"
someflag = 0
if stime == base_time then
if someflag == 0 then
make_transaction(stop_limit)
make_transaction (by-sell)
someflag = 1


Данный скрипт работает постоянно (стартует при запуске квика и работает с функцией sleep(200).
при перезапуске квика someflag будет обнулен?
someflag будет обнулен имено тогда когда вы запрограммируете.
В частности по коду он будет обнулен при следующем же вызове функции, а значит от него нет толку.
 
make_transaction(stop_limit)
make_transaction (by-sell)
sleep(2000)
скрипт срабатывает во время х, делает две транзакции, засыпает на 2 секунды и в следующий раз срабатывает на следующий день
 
Цитата
Валентин пишет:
скрипт срабатывает во время х, делает две транзакции, засыпает на 2 секунды и в следующий раз срабатывает на следующий день
по коду не было видно где установлен sleep
если его установить как написано и установить значение больше 1 секунды, тогда да будет работать как написано
и в этом случае someflag не нужен.
 
Довольно не надёжное решение, т.к. параметр "SERVERTIME" иногда может вернуться назад.
Лучше всё же использовать флаг, и сбрасывать его при смене даты на сервере.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
stime = tostring(GetInfoParam("SERVERTIME"))
base_time = "12:15:50"
someflag = 0
if stime == base_time then ...
Иногда бывает (я с этим реально встречался не раз), что stime сначала равен 12:15:49, а потом сразу 12:15:51, и робот пропустит сигнал. Поэтому логика должна быть несколько другая. Словами можно описать так: если base_time <= stime <= base_time + несколько секунд и ещё не было срабатывания, то исполнить, что надо, и поднять флаг срабатывания. Флаг срабатывания также нужно сбросить, если stime > base_time + несколько секунд.
 
Лучше использовать условие
Код
if time >= base_time then
При == можно просто "перескочить" через это условие.
Надо делать так, как надо. А как не надо - делать не надо.
 
Если необходимо посылать несколько заявок в какой-то отрезок времени, то лучше вычислять время по модулю значения отрезка.
Тогда полученное значение будет меняться от 0 до величины отрезка- 1 квант.
 
да, согласен про base_time и servertime. хотя за пол года проблем не было.
есть запас в 5 секунд, переделаю
 
я бы сразу перевел время в секунды и работал бы с числами, а не со строками в виде "12:15:50".
Если надо точнее, то берем локальное время в миллисекундах и синхронизируем.
Если сделать синхронизацию компьютера по серверу точного времени,
то можно просто взять внутреннее время с погрешность 0.1 секунда и вообще проблем нет.
 
какие варианты с переводом в цифру еще?
я сделал так

Код
stime = tostring(GetInfoParam("SERVERTIME"))
      curtime = tonumber(string.sub(stime, 0, 2) .. string.sub(stime, 4, 5) .. string.sub(stime, 7, 8))
      
      if curtime > 120753 and curtime < 121059 then worktime = 1 end
 
 
Цитата
Валентин пишет:
какие варианты с переводом в цифру еще?
я сделал так
Код
  stime  =  tostring(GetInfoParam( "SERVERTIME" ))
      curtime  =  tonumber( string.sub (stime,  0 ,  2 )  ..   string.sub (stime,  4 ,  5 )  ..   string.sub (stime,  7 ,  8 ))
      
       if  curtime  >   120753   and  curtime  <   121059   then  worktime  =   1   end 
   
На форуме есть варианты. Пошукайте.
добавьте проверку на корректность . может быть пустая строка
Страницы: 1
Читают тему
Наверх