Использование периода времени в выражениях IF - PullRequest
0 голосов
/ 16 января 2020

Итак, у меня есть переменная x, которая через некоторое время обновляется до нового значения через веб-сокет. L oop.

У меня есть оператор IF, где

if x >= 150 :
    #execute orders here

Теперь у меня проблема в том, что иногда значение x будет скачкообразно превышать 150 в течение доли секунды, возможно, даже не 0,01 секунды, и в этом случае я не хочу выполнять ордера и игнорирую это.

Я был думать о решении этого путем выполнения, если х> = 150 и остается таковым в течение 0,1 секунды.

Но я не уверен, как это выполнить. Возможно, я мог бы создать временную переменную y, когда x впервые превысит 150 и затем измерить разницу во времени с datetime.now. Проблема в том, что переменная y будет постоянно изменяться до текущего времени, так как x будет постоянно обновляться соединением веб-сокета.

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

1 Ответ

0 голосов
/ 03 февраля 2020

Это код, который я сделал для решения этой проблемы.

from datetime import datetime
from datetime import timedelta

x=100 # trigger value
y = datetime.now()

while True :
    try:
        if x > 150 :
            z= datetime.now()
            if z-y >= timedelta(seconds=5) : # time here represents how long it needs to stay past trigger point
                #execute code here
                print(y)
                y = datetime.now()
    except Exception as e: print( "this is the error1:" +str(e))    

Я также делал это в асинхронном режиме l oop. В этом случае лучшее решение можно найти здесь: Как я могу периодически выполнять функцию с asyncio?

...