여튼 argument 관련 셋팅에 대해 찾아보다 많이 쓰는 셋팅을 찾았는데 아래와 같았다.
set COMMANDLINE_ARGS= --xformers --opt-split-attention --autolaunch --enable-insecure-extension-access --medvram
하나씩 보면
--xformers : enable xformers for cross attention layers -
--opt-split-attention : force-enables Doggettx's cross-attention layer optimization. By default, it's on for cuda enabled systems.
--autolaunch : open the webui URL in the system's default browser upon launch
--enable-insecure-extension-access : enable extensions tab regardless of other options
--medvram : enable stable diffusion model optimizations for sacrificing a little speed for low VRM usage 해석해봐도 뭔소린지 알 수 있는건
autolaunch 는 CMD에서 webui-user.bat 실행하면 자동으로 브라우저로 webui 올라온다는거고
--medvram 은 속도는 조금 떨어질지언정 VRAM의 사용량을 줄이게 해준다는거 그래서 이게 out of memory 오류를 해결해준것이었다.
여튼 이렇게 일단 argument setting을 마치고 webui 설정들을 여기저기 사이트 찾아서 수정해보았다.
그리고 Model이라는게 그림체를 설정하는 역할을 하는데 애니메이션처럼 그릴것인지 실사처럼 그릴것인지 등등 을 결정한다. 이 model 관련 파일을 다운받아서 실행하는하는데 검색해보니 여러 종류가 있었다. 용량도 상당하다.
일단 몇가지 모델에 따른 예는 좀 있다가 만들어보고
Stable Diffusion으로 만든 그림을 보면 질문들에 프롬프트가 뭐냐는 질문이 많았다. 이게 그 이렇게 만들어라 하는 명령어 같은데
Positive Prompt : 이렇게 만들어라
Negative Prompt : 이렇게 만들진 말아라
기본적으로 이렇게 두개가 있고 당연하겠지만 찾아보니 엄청나게 많은 종류가 있어 다 퍼오기도 힘들다.
간단한 예시가 있어 하나 가져오면
Positive Prompt : masterpiece, best quality, 1girl, black hair, golf course
- 좋은 퀼러티의 검은머리 여자 한명이 골프장 배경으로 만들어라
Negative prompt: lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name
- 안좋은 퀼리티나 일반으로 만들지 말고, 손 나쁘게 만들지 말고 사인이나 유저이름 나오게 하지 말고 등등)
지금 회사에서 개발하고 있는 제품중 nRF52832를 이용하는게 있다. 나름 최대한의 전송속도와 전송량이 필요해서 테스트용 Central / Perpheral 기기 만들어서 테스트 중인데 막상 체크해보면 max throughput 은 안되는것 같다. 뭐 무선의 한계일수도 있고 펌웨어 문제일수도 있고
여튼 peripheral 에서 central로 전송되는 실제 속도등을 확인해보고자 sniffer를 만들어서 설치해보기로 한다.
여기서 nRF sniffer란 Central - Peripheral 사이의 무선 패킷을 캡춰하는 프로그램이라고 할 수 있겠다.
정확한 내용은 아래
nRF Sniffer forBluetooth LE
The nRF Sniffer forBluetooth®LEis a useful tool for learning about and debuggingBluetooth Low Energy(LE) applications. It provides a near real-time display of Bluetooth packets that are sent between a selectedBluetooth Low Energydevice and the device it is communicating with, even when the connection is encrypted.
음... 그러고 나니 진공관 Pre-Amp에 Class-D Power-Amp 라니 이 무슨 독특한 조합인가? ㅋㅋㅋ
이왕 이렇게 된거 제대로 된 혼종을 만들어 보기로 한다.
일단 머리에 떠오르는대로 막 진공관 프리앰프 - TPA3116 파워앰프를 가운데 두고 출력 스피커로는 4인치 풀레인지 달고 아쉬우면 1인치 트위터 추가하고 입력으론 블루투스 오디오 리시버 모듈 알리에서 싼거 하나사고, 예전에 사놓고 안쓴 SBC인 Orange PI PC에 안드로이드 설치해서 MUX로 입력 받고, 안드로이드 깔았으니 터치스크린도 하나 달고 이왕이면 움직일 수 있게 파워뱅크도 전류소모량 체크해서 18650으로 구성해서 하나 달고
인클로저는 MDF로 하면 좋겠지만 이거 음질을 생각해서 만드는것도 아니고 목재 가공도 어렵고하니 역시 집에서 몇년째 묵히고 있는 폼보드로 적당히 포개서 만들어 보는걸로 하고
OK!
일단 파워쪽은 구성전까지 어댑터로 테스트 하기로 하고 필요한걸 더 주문하자. - 4인치 풀레인지 : 삼미 CW-100B25 50W 4인치 풀레인지 \8,400 (+ 배송비 \3,000) - 1인치 풀레인지 : 알리익스프레스 $1.73 (+ 배송비 $0.75)
자 각각 K가 0.3, 0.7로 바꿔서 놓고 실행해보면 목표가가 0.3일 때 36561.5원, 0.7일 때 36723.5원 으로 바뀌는 것을 볼 수 있다.
K = 0.3
K = 0.5
K = 0.7
\36561.5
\36642.5
\36723.5
이 매수조건에 현재가가 5일 이동평균선과 10일 이동평균선 위에 있어야 한다는 조건이 추가되어 있는데
이 부분이 buy_etf() 함수에서 get_movingaverage() 함수를 불러 이동평균을 구하고 조건을 추가하는식이다.
...
ma5_price = get_movingaverage(code, 5) # 5일 이동평균가
ma10_price = get_movingaverage(code, 10) # 10일 이동평균가 ...
if current_price > target_price and current_price > ma5_price and current_price > ma10_price:
자 그렇다면 이제
1. 무엇을 살 것인가는 ETF 중에서 또는 관심가는 종목 중 골라서 종목코드를 매수대상 종목리스트 symbol_list에 넣어두면 되고
2. 얼마에 살 것인가는 위에 조건처럼 K값과 이동평균선 조건에 따라서 매수하고 장마감에 매도
이런 아주 기초적인 조건으로 매매는 시작할 수 있게 되겠다.
그러고보니 매수대상을 종목리스트에 넣어두는 것은 자동은 아니네 --a
그리고 추가로 설명할 부분이 주문조건과 주문호가가 있는데 프로그램에서는 ETF를 기본으로 하고 있다보니
거래량이 다른 주식대비 많지 않아 비싼 가격을 지불하지 않도록 [최유리 FOK 매수 주문] 방법으로 매수하고
매도는 [최유리 IOC 매도] 방법으로 매도하도록 되어있다.
비록 아직은 매수대상 종목리스트는 수작업으로 하지만 프로그램의 실행은 윈도우가 알아서 실행하도록 해보자.
우선 PC가 켜지는 것은
1) 켜두거나
2) BIOS가 지원한다면 BIOS에서 해야하는데 각 회사마다 다르겠지만
기본적으로 BIOS진입 - Advanced - ACPI Configuration - RTC Alarm Power On 에서 예약 부팅 을 해두면 된다.
그리고 PC가 켜지면 윈도우키 + S 를 누른뒤 "작업 스케줄러"로 검색/실행을 하면 아래와 같이 작업스케줄러가 실행이된다.
그리고 좌측 창의 [작업 스케줄러 라이브러리] 클릭하면 가운데 창이 아래 그림처럼 나오는데 그 창에서
우측 클릭 - 새 작업 만들기
그러면 나타나는 창에서
이름과 설명은 원하는 대로 작성하고 형광펜의 '가장 높은 수준의 권한으로 실행' 에 체크
그리고 트리거 탭으로 가서 '새로만들기' 누른뒤 나타나는 창에서 '매일' '오전 8:20' 그리고 아래에 '사용'에 체크
그럼 트리거가 하나 만들어진다.
그리고 동작탭으로 넘어가서 역시 '새로만들기'
설정의 프로그램/스크립트 에서는 찾아보기 버튼을 누른뒤 python.exe가 있는 폴더에 들어가서 선택해주고
인수추가에는 실행할 python 파일 이름 위 그림엔 AutoConnect.py 시작위치는 AutoConnect.py가 있는 폴더의 경로 그리고 확인을 누르면 된다.
그리고 같은 방법으로 8:30 정도에 AutoTrade.py도 등록해주면 윈도우즈의 작업스케줄러가 알아서 실행한다.
- 지금까지 대부분의 정보는 "파이썬 증권 데이터 분석" 이라는 책의 내용을 보고 정리한 내용이며 일부 현재 동작하지 않는 Slack의 requests 같은 부분은 내가 검색해서 수정하였음을 미리 밝힌다. 그래서 세세한 소스는 직접 책에서 제공하는 github로 링크하였다.
- 현재 나도 아직 이 방식으로 주식거래를 시작하지 않았다. '주식투자자동화' 관련 포스팅은 여기서 끝나는게 아니고
일단 서둘러 해보고 싶은 분들을 위해 1부? 여튼 일단 시작할 수 있는 정도까지 서둘러 포스팅한다.
나는 여기서 종목을 골라서 리스트에 넣는 부분과 K값을 조금씩 조절하고 그에 따른 결과를 자동으로 기록하는 부분까지는 조금 더 프로그램하고 작은 금액이라도 실제 투자해볼 생각이다.
그 부분은 차근차근 여기다 포스팅하고 수익이 나던 손해가 나던 일정 기간 후 역시 결과도 포스팅 해 볼 예정이다.
------------------------------------------------------------------------------------------------------- from pywinauto import application import time import os
os.system('taskkill /IM coStarter* /F /T') os.system('taskkill /IM CpStart* /F /T') os.system('taskkill /IM DibServer* /F /T') os.system('wmic process where "name like \'%coStarter%\'" call terminate') os.system('wmic process where "name like \'%CpStart%\'" call terminate') os.system('wmic process where "name like \'%DibServer%\'" call terminate') time.sleep(5)
14번째줄 (끝에서 두번째줄) userid 에 ID 넣고, pwd에 password 넣고 pwdcert에 인증서암호 넣고
그리고 Autoconnect.py 로 저장하고 실행하면 끝
소스의 설명은 딱히 할게 없다.
11번째 줄까지는 혹시 CREON Plus가 실행하고 있으면 끝내고
5초 대기
CREON Plus 를 실행하고 60초 대기
그리고 이 소스에서 ------------------------------------------------------------------------------------------------------- from pywinauto import application import time import os
os.system('taskkill /IM coStarter* /F /T') os.system('taskkill /IM CpStart* /F /T') os.system('taskkill /IM DibServer* /F /T') os.system('wmic process where "name like \'%coStarter%\'" call terminate') os.system('wmic process where "name like \'%CpStart%\'" call terminate') os.system('wmic process where "name like \'%DibServer%\'" call terminate') time.sleep(5)
sda 250G, sdc 160G, sdd 160G 모두 잘 살아있다. (잘 안쓰이던 하드디스크를 모아서 서버를 만들었더니 갯수만 많다 ㅋ)
구체적인 방법은 여기를 참조했다. (http://koreaubuntu.wordpress.com/2011/12/18/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C%EA%B3%BC-%ED%95%98%EB%93%9C-%EB%A7%88%EC%9A%B4%ED%8A%B8%ED%95%98%EA%B8%B0/)
삽질이 조금 있었... ㅋ
여하튼
1) ls -l /dev/disk/by-uuid 로 하드디스크의 uuid를 표시하고 복사해두고
2) 마운트 하고자 하는 하드디스크들이 마운트 될 디렉토리를 만들자
나의 경우는 단순 무식하게 일단 /disk250G , /disk160G1 , /disk160G2 로 만들어 두었다.