• 카테고리

    질문 & 답변
  • 세부 분야

    금융 · 재테크

  • 해결 여부

    미해결

궁금점

21.11.08 16:27 작성 조회수 171

0

안녕하세요 ~ 강사님
 
저도 이제서야 봇 개발을 시작하고 있는데
여러 강의를 듣고 원하는 것만 취해서 개발 중이에요.
근데 다른 강의들은 로직을 만들고 cron으로 일정주기마다 실시를 하고
이 강의는 while true로 계속 돌면서
00초 01초 이렇게 원하는 타이밍에 로직이 돌게 만들었는데
 
문제는 00초 01초에 로직A가 있다면
이 로직A가 한번 실행되는게 아니라 00초 01초내에 컴퓨터가 돌 수 있는 속도에 따라서 계속 로직A가 반복이 되더라고요.
혹시 이걸 해결할 방법은 없나요? 한번만 실행하게요
 

답변 3

·

답변을 작성해보세요.

1

안녕하세요 김동혁님

강의에서 제공하는 프로그램에서 분데이터 조회는 매분 1초와 2초 사이에 일어납니다. 분데이터를 조회한 후 매매할 수 있도록  trade_flag를 0으로 만듭니다.

매매는 매분 59초와 0초 사이에 일어나는데 중복 매매를 방지하기 위해 trade_flag가 0일 때만 매매가 일어나도록 설정했습니다. 매매 후에는 trade_flag를 1로 만들어서 분데이터를 다시 조회하기 전까지 매매가 일어나지 않도록 방지하고 있습니다.

감사합니다.

 

 

0

데이터를 여러 번 가져오는 건 트레이딩과 무관하기 때문에 별도로 flag 처리를 하지 않았습니다. 만일 1분에 데이터를 1회만 가져오고 싶다면 이 부분도 flag를 하나 만드시면 될 것 같습니다.

감사합니다.

김동혁님의 프로필

김동혁

질문자

2021.11.09

time_second_flag[60] 이렇게 주고 안에 반복문으로 0을 채우고 

시행됐을때는 1로 바꾸고, 마지막 분이나 어떤 게 이루어졌을 때 0으로 다시 바꿔주고 이렇게 로직을 구현하면 되겠네요 

제공해주신 get_mm 함수로 이용해서 전체 데이터를 불러오는 큰 작업은 분마다 시행하고 

이렇게 구분해서도 구현할 수 있겠네요 

 

ps : 허나 그렇게 해도 

 

  check_ss = util.get_time_ss(time.time()) #초단위 체크

부분은 계속 호출이 되니깐 뭔가 좀 아쉬운 느낌이 계속 들긴하네요.. 

방법은 좀더 찾아볼게요 감사합니당

 

0

김동혁님의 프로필

김동혁

질문자

2021.11.09

답변 감사합니다.

while True:
    check_ss = util.get_time_ss(time.time()) #초단위 체크

    ######(3) 분데이터 가져오기, 분데이터는 1초후 생성 start ######
    if check_ss in ('01','02'):
        #데이터 가져오기
        df = util.get_web_1m_data(base_candle_url)
        time.sleep(process_sleep_time)

        #기술적 지표 생성
        df['wma120'] = calc.get_wma(df['c'], 120)
        df['wma240'] = calc.get_wma(df['c'], 240)
        df['bh'], df['bhi'], df['bl'], df['bli'], df['bm'], df['bw'] = calc.get_bb(df['c'], 20, 2)

        df_one = df.iloc[df.shape[0]-1:,] #마지막 한 건 가져오기
        wma120 = df_one['wma120'].values[0]
        wma240 = df_one['wma240'].values[0]
        bl = df_one['bl'].values[0]
        print('ddddd')

이 부분만 보면, 01초 02초에 print문이 한번만 호출되는게 아니라 계속 호출됩니다.(01초 02초 내에 여러번)

그러면 기술적 지표도 한번생성되면 되는데 컴퓨터 속도에 따라 분명 중복으로 계속 생성되는거같아서

뭔가 한번만 호출되면 좋겠다는 생각이 들어서요.