252 Commits

Author SHA1 Message Date
kyh
2fd3e0e440 헌터 사는거 수정 2024-05-30 10:12:29 +09:00
kyh
11f3f76632 구름떼 관련 크로스할때 Over Status가 아닌 경우 End value 처리 2024-05-29 15:42:08 +09:00
kyh
339aadb539 구름떼Cross 관련 수정 2024-05-29 11:12:24 +09:00
kyh
81c301b6a7 바이어수정 2024-05-28 11:20:42 +09:00
kyh
80acc7b62c 오류 이것저것 수정 2024-05-27 13:33:16 +09:00
kyh
c1e6aafac4 Buyer나 Realtime의 경우 저가 고가 계산 안함 2024-05-24 10:12:58 +09:00
kyh
3b681659dd 카니발가자 2024-05-21 14:24:04 +09:00
kyh
11f52637a5 로그 표시 2024-05-21 09:58:08 +09:00
kyh
13ec7ba124 되돌리기 2024-05-21 09:57:48 +09:00
kyh
892aad131a 임시 2024-05-21 06:40:24 +09:00
kyh
d5abadae19 1. 여러가지 buyer 관련 오류 사항 수정
2. 가격 설정없으면 20%로 삼
3. 팔고나서 제일 작은 CandleType만큼 쉬고 나서 사도록 수정
2024-05-20 10:06:30 +09:00
kyh
2d4791596b 예외처리 코드 추가 2024-05-16 09:10:14 +09:00
kyh
d632fa85f7 사는거 10%로 바꿈 2024-05-13 15:05:49 +09:00
kyh
9592ff3bac 오류 수정 2024-05-09 14:20:44 +09:00
kyh
88ff08b535 1. overlap value는 계산된 저가와 고가 사이 데이터로 지정(돌파한 순간의 candle 데이터, 단순 비교 시 참이된 순간의 데이터, 크로스의 경우 크로스 된 시점 순간의 데이터등등)
2. value는 단순 계산된 값(bol, ichmok 3% 등등)
2024-04-30 18:19:12 +09:00
kyh
3b497108f0 임시 리셋 2024-04-30 15:51:57 +09:00
kyh
1e2f3d3f96 에러수정 2024-04-30 12:14:48 +09:00
kyh
2db5a4519d 에러 로그 수정 및 두번 계산 제거 2024-04-29 11:29:12 +09:00
kyh
46b7fcfd5b buyer에 사는가격 카운트 없을 시 갖고 있는 가격 25%로 구입 처리 2024-04-23 12:33:48 +09:00
kyh
8bdafc5b25 조건 단순 비교 관련 로직 변경 2024-04-23 10:31:17 +09:00
kyh
c51d6edcbd ichmok 데이터 가져오는 부분 수정 2024-04-23 10:15:03 +09:00
kyh
88d7b14b11 조건 단순과 Cross를 하나로 묶어서 Value 값 산정할 수 있도록 처리 2024-04-23 10:13:38 +09:00
kyh
570f4c6630 이전데이터로 롤백 2024-04-22 19:06:12 +09:00
kyh
d9f8efec2d 임시 2024-04-22 18:49:19 +09:00
kyh
332f0a5c7b 임시 수정 2024-04-09 09:17:33 +09:00
kyh
f9923155a8 hunter관련 수정 2024-04-05 11:22:25 +09:00
kyh
05b6522e94 임시 2024-04-03 09:39:49 +09:00
kyh
a2bf4afe44 마지막 판매 시간에 는안사도록 수정 2024-04-03 09:38:17 +09:00
kyh
b9d773d134 uuid 관련 데이터 수정 2024-03-28 19:08:37 +09:00
kyh
6ef71c45ab exception 판매 관련 수정 2024-03-28 19:02:25 +09:00
kyh
02c3fbbbb0 reulst 데이터 출력 정상적으로 될수 있도록 수정 2024-03-28 18:00:00 +09:00
kyh
b08d763dd4 order 관련 여러번 날아갈떄 빼고 sell 0 으로 요청(exception) 시 10번 도는거 수정 2024-03-28 17:44:11 +09:00
kyh
f04a2fcd45 1. 내가 산가격 및 구매 개수 최신화 처리
2. 한번에 구입 할 종목 및 금액 입력 안하면 금액의 20%씩 사기 처리
3. 기울기 판매 시 파는 조건 왔을 때 구입금액보다 종가가 높을때만 판매하도록 수정
2024-03-28 15:24:07 +09:00
kyh
e4bcceb715 buyer에 손절 기능 추가
크로스 일경우 buyer는 종가로 구매
2024-03-28 10:52:58 +09:00
kyh
d79fac132e 헌터에도 필터 ㄴ허음 2024-03-27 19:44:47 +09:00
kyh
fef8038520 1. 기울기 판매 filter 추가
2. buy할때 3틱 위에서 삼
2024-03-27 19:07:17 +09:00
kyh
3db4a833ac 1. 바이어에 돈 10%씩 투자하도록 수정(개수 제한은 없고 5000원이상)
2. 바이어관련은종가만 처리하도록 수정(크로스)
2024-03-18 19:25:45 +09:00
kyh
aaa3d47a2b buyer에 hunter처럼 예외처리 코드 추가 2024-03-18 11:00:53 +09:00
kyh
3424cba6a8 Cross관련 처리 2024-03-13 12:12:17 +09:00
kyh
e5eda18189 cross 관련 Overlap 데이터처리 2024-03-12 10:55:02 +09:00
kyh
577fc893f7 cross관련 수정 2024-03-11 15:01:59 +09:00
kyh
b2a685d9e2 Revert "조건 비교 관련 바이어에 예외처리 코드 추가"
This reverts commit fc9115fbf1.
2024-03-11 11:43:25 +09:00
kyh
1e4c4f09bb 임시 2024-03-06 14:09:39 +09:00
kyh
fc9115fbf1 조건 비교 관련 바이어에 예외처리 코드 추가 2024-03-05 12:03:23 +09:00
kyh
5e476c22a1 사는 시점 현재 갖고 있는 데이터 Count 2024-03-01 14:57:56 +09:00
kyh
c45276378b 1. 처음 시작했을때 사는조건이어도 안사게끔함(한번은 안사는조건을 갔다가 와야함)
2. 조건식중 제일 작은 CandleType 만큼동안은 안팜
2024-03-01 14:51:52 +09:00
kyh
83d3bba8ac 이것 저것 수정(중간선 관련) 2024-02-28 16:14:43 +09:00
kyh
9df8324d48 하향선 관련 처리 볼랜저 2024-02-27 13:27:42 +09:00
kyh
38a907ed15 3틱 삭제 (BTT는 제외하도록 되어 있음) 2024-02-22 09:54:02 +09:00
kyh
75f4152c02 Merge branch 'feature/V1.1' of http://59.26.54.110/Million into feature/V1.1 2024-02-16 11:17:15 +09:00
kyh
7919ce25e2 Ticker데이터 기준 양봉이 70프로 이상일 경우 거래량 Filter Count수를 2배 올림 2024-02-16 11:17:06 +09:00
kyh
a0412c2c91 9시 이후 데이터 2개 엮기 && 10개안되면 24시간 데이터 10개 넣기 2024-02-06 09:29:06 +09:00
kyh
131b45c476 추가 사는 로직 변경 2024-01-23 10:05:26 +09:00
kyh
62801ed8ac All Table Insert 관련 오류 수정 2024-01-18 10:37:42 +09:00
kyh
3d074df5d9 Merge branch 'feature/V1.1' of http://59.26.54.110/Million into feature/V1.1 2024-01-17 15:44:01 +09:00
kyh
cd0a9789ac Saver 관련 All Data 저장 기 능 추가 2024-01-17 15:28:14 +09:00
kyh
660579891c call api 관련 Error 소 2024-01-17 15:27:45 +09:00
kyh
96ee504102 로그 입력 2024-01-17 10:43:04 +09:00
kyh
b6cb826214 누적 거래 대금으로 변경 2024-01-15 09:07:40 +09:00
kyh
b7dbefad16 거래량 관련 buyer 예외처리 추가 2024-01-12 11:31:28 +09:00
kyh
7151fdc5b8 buyer에 거래량 top몇개 할 수 있도록 구현 완료 2024-01-04 17:39:28 +09:00
kyh
b1f6b01484 ERROR 수정 2024-01-04 11:28:11 +09:00
kyh
8e84429145 Merge branch 'feature/V1.1' of http://59.26.54.110/Million into feature/V1.1 2023-11-23 11:53:06 +09:00
kyh
faa2c8b7e2 에러수정 2023-11-23 11:52:40 +09:00
kyh
4558712a89 before 데이터 가져올때 안되는거 수정 2023-11-23 11:52:31 +09:00
DESKTOP-1A3P75F\lee
e9005de5ef .net 7.0으로 변경 2023-11-22 23:28:40 +09:00
DESKTOP-1A3P75F\lee
a75e360e26 dev버전 수정 2023-11-22 22:50:40 +09:00
kyh
14e3b2e533 예외처리 2023-11-10 10:23:28 +09:00
kyh
e0c78445f3 수정 2023-11-10 09:17:06 +09:00
kyh
891f37c5dd 원상복귀 2023-11-01 12:32:34 +09:00
kyh
e11d796642 바이어 관련 오류 수정 완료 2023-11-01 12:31:45 +09:00
kyh
1df326e9ea jwt 관련 API 별 예외처리 코드 추가 2023-10-31 10:17:48 +09:00
kyh
8de7d981eb 코드 최신화 처리 완료 2023-10-31 09:58:24 +09:00
kyh
fe065dbb45 Merge branch 'feature/V1.1' of http://220.123.49.58/Million into feature/V1.1 2023-10-18 10:28:11 +09:00
kyh
a6c58ad133 바이어에 filter 추가 2023-10-18 10:27:53 +09:00
kyh
04c73b08f9 hunter에 buy시 filter 기능 추가 2023-10-18 10:12:34 +09:00
DESKTOP-1A3P75F\lee
d9e439cf27 임시 라이센스 2023-08-27 22:15:18 +09:00
DESKTOP-1A3P75F\lee
6974dbdc23 라이센스 임시 적용 2023-08-27 22:14:37 +09:00
kyh
7e0ef8142b 볼랜저 sq 관련 소수 한자리까지 처리 될수 있게 수정 2023-08-22 14:14:10 +09:00
kyh
818cfb4974 데브적용 2023-08-21 11:22:03 +09:00
jhlee
791d88ded2 수정 2023-08-21 11:10:44 +09:00
jhlee
999eaad9e6 수정 2023-08-21 11:10:25 +09:00
jhlee
8579c58833 수정 2023-08-21 11:10:17 +09:00
jhlee
2c4ab25ee3 Dev 20.1.4 적용 2023-08-21 11:00:24 +09:00
kyh
0f480a2e7f 라이센스 삭제 2023-08-21 10:56:59 +09:00
kyh
7aec686051 전송 연결 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다에서 데이터를 읽을 수 없습니다. 2023-08-21 10:55:19 +09:00
kyh
6b39303095 서버 아이피 변경 2023-08-04 09:56:42 +09:00
kyh
1506e62f8c websocket close하다가 null되는 현상처리(2일째에서 발생) 2023-08-01 11:19:57 +09:00
kyh
67e03bab27 Websocket Close 관련 status description 처리 2023-08-01 11:11:19 +09:00
kyh
e0e46a087e 수정 2023-07-25 14:57:18 +09:00
kyh
d38bb3d3ca 영호 Key 변경 2023-07-25 10:08:12 +09:00
kyh
5166359e18 임시 수정 2023-07-25 09:59:43 +09:00
jwlee
fcebfbcb70 Merge branch 'feature/V1.1' of http://175.203.13.181/Million into feature/V1.1 2023-07-24 12:31:40 +09:00
jwlee
dbfbb49540 병합 커밋 2023-07-24 12:31:30 +09:00
jwlee
3b42a0fd4a 서버 IP 수정 2023-07-24 12:30:02 +09:00
kyh
0bcc8b1694 임시 수정 2023-07-24 09:54:46 +09:00
kyh
37c9e9ad27 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-07-11 09:30:12 +09:00
kyh
07568b3d4c Hunter 시간대 관련 수정완료 2023-07-11 09:29:59 +09:00
DESKTOP-1A3P75F\lee
2ee428ee23 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-07-07 13:06:29 +09:00
DESKTOP-1A3P75F\lee
566509b93a 임시 저장 2023-07-07 13:06:10 +09:00
kyh
10c95ba0a0 사용자가 의도치 않게 websocket 종료 될경우 다시 실행되도록 함 2023-07-03 14:32:59 +09:00
kyh
1cefd84298 시간봉 변경 2023-06-08 13:57:02 +09:00
kyh
fdbe0fcd1c buyer의 ticker 제거 후 RealtimeConclusion 교체 완료 2023-06-07 14:49:13 +09:00
kyh
f23c464362 buyvalue 가 고가 처리 2023-05-25 13:03:45 +09:00
kyh
6a95cdfb14 asdf 2023-05-24 16:22:24 +09:00
kyh
0f20d55d3f 1분봉 1시간봉 제외하고 다른 봉만 만들수있도록 수정 2023-05-24 09:54:33 +09:00
kyh
1a4cd1f61a Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-23 09:30:13 +09:00
kyh
41b38948a0 80개수로 변경 2023-05-23 09:29:24 +09:00
jwlee
2d0355a5cb GetConvertCandleDataList 변경 2023-05-23 09:27:20 +09:00
DESKTOP-1A3P75F\lee
2c300a5608 일부 수정 2023-05-22 13:55:31 +09:00
DESKTOP-1A3P75F\lee
437f66957f 시간 임시수정 2023-05-22 13:03:57 +09:00
DESKTOP-1A3P75F\lee
54c78cf09e GetConvertCandleDataList 임시 수정 2023-05-22 13:01:48 +09:00
jwlee
16e4b6d820 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-22 11:53:28 +09:00
jwlee
eee350d247 테스,트 보드 수정 2023-05-22 11:53:10 +09:00
kyh
09d8ea63fb StartValue Low Overlap Up 관련 처리
에러 임시 주석
2023-05-18 14:50:10 +09:00
kyh
dd264b0cc5 buyer에 여러 MCandleTimeType호환 되도록 수정 중 2023-05-17 15:31:55 +09:00
jwlee
365aad2cc4 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-17 00:02:42 +09:00
jwlee
3749475412 테스트보드 작성 2023-05-17 00:02:33 +09:00
kyh
3f000635f5 1440으로 수정 2023-05-16 16:10:29 +09:00
kyh
7115197522 MCandledatatype day도 가능하도록 완료 2023-05-16 16:09:26 +09:00
jwlee
f29aba7e7f Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-16 13:31:47 +09:00
jwlee
514b95abca 테스트보드 수정 2023-05-16 13:31:32 +09:00
kyh
ddc32903b9 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-16 13:27:35 +09:00
kyh
5e868ae373 분봉 관련 예외처리 코드 추가 2023-05-16 13:25:36 +09:00
JHLEE
e25a29d06d Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-16 13:22:39 +09:00
JHLEE
b614d31df9 update server 프로젝트 설정 변경 및 데이터 길이 늘림 2023-05-16 13:22:30 +09:00
jwlee
42ed896ca3 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-16 13:16:45 +09:00
jwlee
b1ece22258 테스트 보드 기능 작성 중 2023-05-16 13:16:25 +09:00
kyh
1d3929b84d 병렬처리 원복 2023-05-16 13:14:09 +09:00
kyh
7ed733e57b Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-16 13:12:10 +09:00
kyh
fb52c11b03 여러 시간봉 관련 데이터 처리 되도록 수정 2023-05-16 13:12:03 +09:00
DESKTOP-1A3P75F\lee
acba3c9201 수정 2023-05-16 12:02:23 +09:00
DESKTOP-1A3P75F\lee
66dc372af2 소켓통신 관리 프로젝트 추가 2023-05-16 09:48:25 +09:00
kyh
251650488c 1. hunter 최초돌파 조건 찬균이꺼로 초기화
2. buyer 최초돌파 조건 찬균이꺼로 초기화
3. buyer에 사는시점 전 고가 < 현 시가 추가
2023-05-16 09:24:52 +09:00
kyh
b2a9b9a535 Text 수정 2023-05-16 09:11:09 +09:00
kyh
c065695136 임시커밋 2023-05-16 09:07:46 +09:00
jwlee
ea950e0508 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-15 13:03:43 +09:00
jwlee
1fb5d2aeb4 테스트 폼 구현 중 2023-05-15 13:03:33 +09:00
kyh
14712fcf1e 사는 케이스에서 전봉의 고가가 현재 살 가격보다 높은 경우 예외처리 코드 추가 2023-05-12 13:36:47 +09:00
kyh
4820f5016e 조건단순비교 시 해당봉은 포함되지 않도록 수정 2023-05-11 10:47:57 +09:00
jwlee
b01f9d2a7f Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-10 16:34:21 +09:00
jwlee
8908ed4264 테스트 보드 수정 2023-05-10 16:33:58 +09:00
kyh
2df140ccab 이평에서 1개일 경우 단순만 해당 봉 데이터 처리 2023-05-10 15:17:24 +09:00
kyh
d2691a8ff1 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-10 12:20:38 +09:00
kyh
f6b69c2c6b 수 정 2023-05-10 12:20:28 +09:00
DESKTOP-1A3P75F\lee
eb99c5a8ad openxml 엑셀 출력 기능 추가, 승패시 수익률 계산 2023-05-10 12:14:42 +09:00
DESKTOP-1A3P75F\lee
679e923ba1 병합오류 수정 2023-05-09 17:43:23 +09:00
DESKTOP-1A3P75F\lee
0df8d12580 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-09 17:41:22 +09:00
DESKTOP-1A3P75F\lee
78cd321aea 병합 임시커밋 2023-05-09 17:41:18 +09:00
jwlee
37b116177f 커밋 2023-05-09 17:37:29 +09:00
jwlee
fc2b118c6c 병합 수정 중 2023-05-09 17:37:24 +09:00
jwlee
94ddacf08a 결과 폼 필터 구현 2023-05-09 17:33:06 +09:00
DESKTOP-1A3P75F\lee
b94b026a71 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-09 16:13:16 +09:00
DESKTOP-1A3P75F\lee
f7491b426a 이찬균 테스트 버튼 추가 2023-05-09 16:13:14 +09:00
kyh
7b4ba65d6a 병합 2023-05-09 16:06:40 +09:00
kyh
c132d34e2b Compare 기본 비교 로직 완료 2023-05-09 16:05:01 +09:00
jwlee
5e0832a7cc 인디케이터 중복 추가 수정 2023-05-09 15:15:59 +09:00
jwlee
4a3d918b86 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-05-09 14:50:14 +09:00
jwlee
ec5cfc4109 Result 기능 개선 2023-05-09 14:49:46 +09:00
kyh
8f1bcd521b 조건 단순 비교 임시 커밋 2023-05-09 13:51:56 +09:00
kyh
22fbf2e5b5 조건단순비교 추가 2023-05-09 13:22:20 +09:00
kyh
00e19d9c61 조건단순비교 조건 추가중 2023-05-09 12:37:03 +09:00
kyh
572391837e money volume 데이터 누적되도록 수정(1h) 2023-05-08 14:04:25 +09:00
kyh
c16a6e154a 중간 사는 캔들 삭제 2023-05-08 10:04:30 +09:00
DESKTOP-1A3P75F\lee
0cb7b8f2b3 딮카피 추가 2023-04-14 16:21:35 +09:00
kyh
7c90109652 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-04-12 15:38:27 +09:00
kyh
fa5aa8e9ef Buy List 추가 2023-04-12 15:37:54 +09:00
kyh
5b57bb3188 코드 정렬 2023-04-12 09:25:19 +09:00
jwlee
da32875c48 차트 UI 수정 완료 2023-04-11 08:09:18 +09:00
jwlee
31eb068a1b Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-04-11 00:05:47 +09:00
jwlee
c4d1f6a30d 차트 수정 2023-04-11 00:05:21 +09:00
DESKTOP-1A3P75F\lee
99ccac6231 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-04-10 17:29:12 +09:00
DESKTOP-1A3P75F\lee
9f1e551e9d 트리 디자인 변경 2023-04-10 17:29:10 +09:00
kyh
b2c7669408 1. 오타 수정
2. SavedResultData 삭제 함수 추가
2023-04-10 16:08:58 +09:00
kyh
475d5be8a9 Buy count 개수 count 처리 완료 2023-04-10 15:54:01 +09:00
kyh
d57fd0268d Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-04-10 13:06:12 +09:00
kyh
1bd0f1143c Rate 비율 오류 수정 2023-04-10 13:06:06 +09:00
jwlee
78dcb1f27d Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-04-10 12:52:01 +09:00
jwlee
2f1b424aa4 차트 수정 2023-04-10 12:51:50 +09:00
kyh
98bc353f46 거래량 관련 필드 수정 2023-04-10 09:26:27 +09:00
jwlee
60d5f0a35f 차트 수정 2023-04-06 05:38:58 +09:00
jwlee
a4120ea088 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-04-06 05:07:43 +09:00
jwlee
cb42a14c82 라이센스 제거 2023-04-06 05:07:25 +09:00
jwlee
10e7533398 차트 개발 2023-04-06 05:07:01 +09:00
DESKTOP-1A3P75F\lee
07673899be 이평 오류 수정 2023-04-05 23:23:11 +09:00
kyh
ea4f373818 수정 2023-04-05 13:12:01 +09:00
kyh
0ce9a2b040 End data 관련 수정 2023-04-05 12:47:26 +09:00
kyh
09a9ac5352 로그삭제 2023-04-05 12:44:31 +09:00
DESKTOP-1A3P75F\lee
10653f4b7e 영호형 코드 수정, 라이센스 파일 제거 2023-04-04 13:32:46 +09:00
kyh
9a9ab785bc 1. realtime hunter 메모리 터지는거 해결
2. 속도 개선함(영호 컴으로 2주 5분 1달 10분걸림)
2023-03-29 12:45:19 +09:00
jwlee
96768aa238 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-03-21 12:45:08 +09:00
jwlee
9958586239 차트 커밋 2023-03-21 12:44:53 +09:00
kyh
0105c8ae6c SearchResultList데이터 가져오는 속도 관련 로직 분할 2023-03-21 12:42:14 +09:00
jwlee
7d8d7de779 1. 차트 수정 중~~~ 2023-03-20 19:28:11 +09:00
jwlee
cc345b30b4 재 커밋 2023-03-15 21:39:11 +09:00
jwlee
aa7e7f7226 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-03-15 21:38:09 +09:00
DESKTOP-1A3P75F\lee
9e8af26afa Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2023-03-15 21:38:01 +09:00
DESKTOP-1A3P75F\lee
fa2468126c 임시 커밋 2023-03-15 21:37:58 +09:00
jwlee
011ade764d 차트 수정 중 ~~~~~~ 2023-03-15 21:37:55 +09:00
kyh
f37a843e29 새벽 1시마다 데이터 처리 될수 있게 처리 2023-02-16 10:37:43 +09:00
kyh
4b0f5560c1 자동 Saver 개발 (정시에 한번씩 돌게) 2023-02-16 10:30:03 +09:00
kyh
64fa1cbd62 로그기록 관련 수정 2023-02-15 12:55:15 +09:00
kyh
adf2f8dbee 구현 완료 테스트 필요 2023-02-15 12:23:29 +09:00
kyh
4987bce5d3 Saver 관련 오류 수정 2023-02-15 11:31:43 +09:00
kyh
f7e1efe47b Hunter 여러개 한번에 돌릴수 있는 모드 구성 완료 2023-02-15 11:17:08 +09:00
kyh
30f14f462e 1. List 추가 완료
2. List 계산 완료
2023-02-15 10:52:00 +09:00
kyh
03a5fac675 saved 데이터 위치 변경 2023-02-15 10:04:17 +09:00
kyh
fd36ae9418 안사용하는 필드 삭제 2023-02-14 10:25:29 +09:00
kyh
ca9935e2b8 +- 퍼센트 관련 처 2023-02-08 09:30:29 +09:00
kyh
791e85bcf2 Result 가져올 때 다르게 표시되는거 수정 2023-01-30 12:30:51 +09:00
kyh
493db793fb Hunter 데이터 가져오기 할때 빠지는 데이터 채워 줌(Clone) 2023-01-30 12:28:06 +09:00
kyh
1f847ba9ce 종료된 Order list는 가져올 필요가 없음(기존에 생각했던 방식으로 Upbit 가 주지 않음) 2023-01-30 12:17:41 +09:00
kyh
154427f6f1 5초에 한번씩 Update 2023-01-30 12:16:57 +09:00
kyh
40af036a55 Init 시 DB 데이터 초기화 할 수 있도록 함수 세분화 2022-12-15 10:47:29 +09:00
kyh
460fc40ccd lock 추가 2022-12-06 13:39:10 +09:00
kyh
b7f35ea1ef 구름떼 아래 하한선 관련 데이터 추가 2022-12-06 11:09:47 +09:00
kyh
0cf3bd3aa0 에러 수정 2022-12-02 15:29:45 +09:00
kyh
a083ba92fd indicator index 설정 수정 2022-12-02 09:07:48 +09:00
kyh
15c4ab5e5b 임시수정 2022-12-01 15:10:15 +09:00
kyh
98732038c1 인보크 추가 2022-12-01 14:47:05 +09:00
kyh
23f7f40e39 d임시 2022-12-01 14:41:39 +09:00
kyh
28d554eac8 수정 2022-12-01 11:30:41 +09:00
kyh
aa9263216f Hunter Realtime Mode 관련 데이터 수정 2022-11-30 13:33:56 +09:00
kyh
d69e6310a3 hunter realtime 모드 수정 완
1. Log manager 이용하여 데이터 처리할 수 있도록 수정
2. Json 메모리참조관련 Serialize할때 에러 안나도록 JsonIgnore 추가
2022-11-30 11:28:12 +09:00
kyh
33a840069a 속도 개선 2022-11-29 16:18:14 +09:00
kyh
6587e61312 저장 관련 수정 2022-11-29 16:05:52 +09:00
kyh
4b4c1d3a67 Hunter remove관련 수정 2022-11-29 16:03:16 +09:00
kyh
85412ef4a3 Hunter Realtime Mode 개발 완료 2022-11-29 15:59:33 +09:00
kyh
5d838a04f2 1. hunter Realtime 추가
2. hunter 기본모드 수정
2022-11-29 15:43:16 +09:00
kyh
0af9f7c502 Buyer 버그 수정 2022-11-29 10:26:58 +09:00
kyh
538ee16f98 Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2022-11-29 09:55:47 +09:00
kyh
40d8e80011 Sell Exception 관련 수정 2022-11-29 09:55:40 +09:00
kyh
a4afb09cd6 hunter 예외처리 2022-11-28 16:38:12 +09:00
kyh
5b609d34cd Rate 비율 정상동작 확인 2022-11-28 15:38:40 +09:00
kyh
353268e828 모두 팔기 버튼 추가 2022-11-28 12:32:57 +09:00
kyh
77aa5d21f6 Buyer에 손절조건처리 추가 2022-11-28 12:25:46 +09:00
kyh
6a192b4121 손절 조건 처리하는 Buyer기능 추가 2022-11-28 12:03:40 +09:00
kyh
aaa6163459 1. Hunter에 손절 조건 추가 2022-11-28 11:21:39 +09:00
kyh
ba228385a2 10분에 한번씩 저장되도록 수정 2022-11-25 11:32:56 +09:00
kyh
5c072a1a2f Merge branch 'feature/V1.1' of http://222.96.13.116/Million into feature/V1.1 2022-11-25 10:46:39 +09:00
kyh
a9e35b958c Saver 1분식 저장되게 수정 2022-11-25 10:46:19 +09:00
kyh
fbfe9c715b rd추가 2022-11-24 15:13:39 +09:00
kyh
337aa33cc5 Sell 후 Sub 로직 초기화 로직 추 2022-11-24 15:10:57 +09:00
kyh
f7f65a1cdb Buyer Ticker Mode 1차 구현 완료 2022-11-24 14:26:26 +09:00
kyh
448b167b88 1. Buyer Ticker 모드 개발 중
2. Ticker 데이터 Save 로직 변경
2022-11-24 14:06:44 +09:00
kyh
c988236c55 Buyer 관련 로직 정리 2022-11-24 12:10:21 +09:00
kyh
d9076e4046 Buyer 관련 Main 로직 함수 분기 1차 2022-11-24 11:35:24 +09:00
kyh
5026e2c732 Init관련 함수 정리 2022-11-24 10:53:31 +09:00
kyh
335fde4cde Saved buyer Result 처리 완료(Get 까지 ) 2022-11-23 15:50:44 +09:00
kyh
76532e1cd5 Create SavedBuyerResult Table 2022-11-23 15:15:10 +09:00
kyh
856adf9043 Main Log 데이터 가져갈 수 있도록 수정 2022-11-23 15:09:09 +09:00
kyh
b961c71eba Log 데이터 저장 기능 완료 2022-11-23 15:04:14 +09:00
150 changed files with 97338 additions and 3615 deletions

4
.editorconfig Normal file
View File

@@ -0,0 +1,4 @@
[*.cs]
# SYSLIB0011: 형식 또는 멤버는 사용되지 않습니다.
dotnet_diagnostic.SYSLIB0011.severity = warning

File diff suppressed because one or more lines are too long

View File

@@ -31,6 +31,12 @@
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
this.listBoxControl_logViewer = new DevExpress.XtraEditors.ListBoxControl();
this.panelControl2 = new DevExpress.XtraEditors.PanelControl();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.bt_ScheduleStop = new System.Windows.Forms.Button();
this.bt_ScheduleStart = new System.Windows.Forms.Button();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.button3 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.deletebtn = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
@@ -49,14 +55,13 @@
this.comboBoxEdit_MarketInfo = new DevExpress.XtraEditors.ComboBoxEdit();
this.button_AllMarketDataAcc = new System.Windows.Forms.Button();
this.button_SelectedMarketDataAcc = new System.Windows.Forms.Button();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
this.panelControl1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.listBoxControl_logViewer)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl2)).BeginInit();
this.panelControl2.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.de_end.Properties.CalendarTimeProperties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.de_end.Properties)).BeginInit();
@@ -67,7 +72,6 @@
this.groupBox_데이터누적.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_PaymentType.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_MarketInfo.Properties)).BeginInit();
this.groupBox2.SuspendLayout();
this.SuspendLayout();
//
// panelControl1
@@ -76,7 +80,7 @@
this.panelControl1.Dock = System.Windows.Forms.DockStyle.Right;
this.panelControl1.Location = new System.Drawing.Point(253, 0);
this.panelControl1.Name = "panelControl1";
this.panelControl1.Size = new System.Drawing.Size(227, 520);
this.panelControl1.Size = new System.Drawing.Size(227, 595);
this.panelControl1.TabIndex = 0;
//
// listBoxControl_logViewer
@@ -84,11 +88,12 @@
this.listBoxControl_logViewer.Dock = System.Windows.Forms.DockStyle.Fill;
this.listBoxControl_logViewer.Location = new System.Drawing.Point(2, 2);
this.listBoxControl_logViewer.Name = "listBoxControl_logViewer";
this.listBoxControl_logViewer.Size = new System.Drawing.Size(223, 516);
this.listBoxControl_logViewer.Size = new System.Drawing.Size(223, 591);
this.listBoxControl_logViewer.TabIndex = 0;
//
// panelControl2
//
this.panelControl2.Controls.Add(this.groupBox3);
this.panelControl2.Controls.Add(this.groupBox2);
this.panelControl2.Controls.Add(this.groupBox1);
this.panelControl2.Controls.Add(this.groupBox_DB접속);
@@ -96,9 +101,72 @@
this.panelControl2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelControl2.Location = new System.Drawing.Point(0, 0);
this.panelControl2.Name = "panelControl2";
this.panelControl2.Size = new System.Drawing.Size(253, 520);
this.panelControl2.Size = new System.Drawing.Size(253, 595);
this.panelControl2.TabIndex = 1;
//
// groupBox3
//
this.groupBox3.Controls.Add(this.bt_ScheduleStop);
this.groupBox3.Controls.Add(this.bt_ScheduleStart);
this.groupBox3.Location = new System.Drawing.Point(13, 526);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(231, 57);
this.groupBox3.TabIndex = 5;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "전체 데이터 스케쥴러";
//
// bt_ScheduleStop
//
this.bt_ScheduleStop.Enabled = false;
this.bt_ScheduleStop.Location = new System.Drawing.Point(120, 21);
this.bt_ScheduleStop.Name = "bt_ScheduleStop";
this.bt_ScheduleStop.Size = new System.Drawing.Size(93, 23);
this.bt_ScheduleStop.TabIndex = 4;
this.bt_ScheduleStop.Text = "중지";
this.bt_ScheduleStop.UseVisualStyleBackColor = true;
this.bt_ScheduleStop.Click += new System.EventHandler(this.bt_ScheduleStop_Click);
//
// bt_ScheduleStart
//
this.bt_ScheduleStart.Location = new System.Drawing.Point(17, 21);
this.bt_ScheduleStart.Name = "bt_ScheduleStart";
this.bt_ScheduleStart.Size = new System.Drawing.Size(97, 23);
this.bt_ScheduleStart.TabIndex = 3;
this.bt_ScheduleStart.Text = "시작";
this.bt_ScheduleStart.UseVisualStyleBackColor = true;
this.bt_ScheduleStart.Click += new System.EventHandler(this.bt_ScheduleStart_Click);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.button3);
this.groupBox2.Controls.Add(this.button2);
this.groupBox2.Location = new System.Drawing.Point(13, 458);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(231, 57);
this.groupBox2.TabIndex = 4;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Ticker 저장";
//
// button3
//
this.button3.Location = new System.Drawing.Point(120, 21);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(93, 23);
this.button3.TabIndex = 4;
this.button3.Text = "중지";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(17, 21);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(97, 23);
this.button2.TabIndex = 3;
this.button2.Text = "시작";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.deletebtn);
@@ -298,42 +366,11 @@
this.button_SelectedMarketDataAcc.UseVisualStyleBackColor = true;
this.button_SelectedMarketDataAcc.Click += new System.EventHandler(this.button_SelectedMarketDataAcc_Click);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.button3);
this.groupBox2.Controls.Add(this.button2);
this.groupBox2.Location = new System.Drawing.Point(13, 458);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(231, 57);
this.groupBox2.TabIndex = 4;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Ticker 저장";
//
// button2
//
this.button2.Location = new System.Drawing.Point(17, 21);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(97, 23);
this.button2.TabIndex = 3;
this.button2.Text = "시작";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(120, 21);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(93, 23);
this.button3.TabIndex = 4;
this.button3.Text = "중지";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(480, 520);
this.ClientSize = new System.Drawing.Size(480, 595);
this.Controls.Add(this.panelControl2);
this.Controls.Add(this.panelControl1);
this.Name = "MainForm";
@@ -343,6 +380,8 @@
((System.ComponentModel.ISupportInitialize)(this.listBoxControl_logViewer)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl2)).EndInit();
this.panelControl2.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.de_end.Properties.CalendarTimeProperties)).EndInit();
@@ -356,7 +395,6 @@
this.groupBox_데이터누적.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_PaymentType.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_MarketInfo.Properties)).EndInit();
this.groupBox2.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -386,6 +424,9 @@
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.Button bt_ScheduleStop;
private System.Windows.Forms.Button bt_ScheduleStart;
}
}

View File

@@ -1,6 +1,7 @@
using Million;
using Million.Data;
using Million.DbManagement;
using Million.Manager;
using System;
using System.Collections.Generic;
using System.Data;
@@ -16,7 +17,12 @@ namespace DataSaver
//public static string accessKey = "4jfMUL3lpwJ5GQSszm3rPp5M47tD8ssfIGew2dDb";
//public static string secretKey = "iAasVxQt8CyADjzXaAZiF5VZXTZPdElJOP4m97Bz";
bool flag = false;
int hours = 0;
Thread tickThread;
System.Timers.Timer timer = null;
string exchangedData = "";
public MainForm()
{
InitializeComponent();
@@ -34,28 +40,18 @@ namespace DataSaver
// 거래소 정보 콤보박스 초기화
comboBoxEdit_ExchangePlace.Properties.Items.Clear();
// Million으로부터 거래소 정보 가져오기
var exchangePlaceNames = Enum.GetNames(enumType: typeof(Million.CommonProperty.ExchangePlace));
comboBoxEdit_ExchangePlace.Properties.Items.AddRange(exchangePlaceNames);
comboBoxEdit_ExchangePlace.Properties.Items.AddRange(InitManager.GetMarketList());
// 종목 타입 설정
comboBoxEdit_PaymentType.Properties.Items.AddRange(Enum.GetNames(enumType: typeof(Million.CommonProperty.PaymentType)));
comboBoxEdit_PaymentType.Properties.Items.AddRange(InitManager.GetPaymentList());
comboBoxEdit_PaymentType.SelectedIndex = 0;
// DB 서버 정보 생성
var strConn = Million.CommonProperty.DbConnectionStr + comboBoxEdit_ExchangePlace.EditValue;
Million.CommonProperty.ConDbConnectionStr = strConn;
// Market Table없으면 생성해주기
foreach (var placeName in exchangePlaceNames)
{
var createTableSql = Million.DbManagement.DbServiceFunctions.CreateMarketTableQuery(placeName);
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionMarket, createTableSql);
}
/////TODO 임시로 Upbit 우선순위 설정
comboBoxEdit_ExchangePlace.SelectedIndex = 0;
InitManager.InitFunc(comboBoxEdit_ExchangePlace.Text, Million.CommonProperty.PaymentType.KRW);
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemChecked(i, true);
@@ -71,10 +67,13 @@ namespace DataSaver
{
// DB 종목(Market) 정보 가져오기
Million.DbManagement.DbServiceFunctions.GetMarketTable_FromDB(comboBoxEdit_ExchangePlace.SelectedItem.ToString());
updateMarketTableOfPlace();
var placeType = (CommonProperty.ExchangePlace)Enum.Parse(typeof(CommonProperty.ExchangePlace), comboBoxEdit_ExchangePlace.SelectedItem.ToString());
var paymentType = (CommonProperty.PaymentType)Enum.Parse(typeof(CommonProperty.PaymentType), comboBoxEdit_PaymentType.SelectedItem.ToString());
InitManager.UpdateMarketTableOfPlace(placeType, paymentType);
//초창기 생성시에 데이터가 없음으로 Update이 후 재 처리
if(CommonProperty.selectedMarketOfPlaceList == null || CommonProperty.selectedMarketOfPlaceList.Count == 0)
if (CommonProperty.selectedMarketOfPlaceList == null || CommonProperty.selectedMarketOfPlaceList.Count == 0)
Million.DbManagement.DbServiceFunctions.GetMarketTable_FromDB(comboBoxEdit_ExchangePlace.SelectedItem.ToString());
// 데이터 입력
@@ -89,8 +88,9 @@ namespace DataSaver
/// <param name="e"></param>
private void button_AllMarketDataAcc_Click(object sender, EventArgs e)
{
exchangedData = comboBoxEdit_ExchangePlace.SelectedItem.ToString();
var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList;
SetCandleData(comboBoxEdit_ExchangePlace.SelectedItem.ToString(), dbMarketDataList);
SetCandleData(exchangedData, dbMarketDataList);
}
/// <summary>
@@ -101,7 +101,7 @@ namespace DataSaver
private void button_SelectedMarketDataAcc_Click(object sender, EventArgs e)
{
//Create
if(!string.IsNullOrWhiteSpace(comboBoxEdit_PaymentType.SelectedItem?.ToString()) &&
if (!string.IsNullOrWhiteSpace(comboBoxEdit_PaymentType.SelectedItem?.ToString()) &&
!string.IsNullOrWhiteSpace(comboBoxEdit_MarketInfo.SelectedItem?.ToString())
)
{
@@ -137,6 +137,7 @@ namespace DataSaver
list.Add((int)data);
}
// 거래량 제외 Hunter
foreach (var item in list)
{
var recentlyDbDataList = Million.DbManagement.DbServiceFunctions.GetOldNewDataList_FromDB
@@ -144,6 +145,17 @@ namespace DataSaver
Million.DbManagement.DbServiceFunctions.SetCandleData(placeName, type, recentlyDbDataList, (CommonProperty.MCandleTimeType)item);
}
//거래량 포함 Hunter
foreach (var item in list)
{
var recentlyDbDataList = Million.DbManagement.DbServiceFunctions.GetOldNewDataList_FromDB_All
(marketList, placeName, (CommonProperty.MCandleTimeType)item);
Million.DbManagement.DbServiceFunctions.SetCandleData_All(placeName, type, recentlyDbDataList, (CommonProperty.MCandleTimeType)item);
}
MessageBox.Show("Completed Set Candle Data");
}
@@ -162,67 +174,17 @@ namespace DataSaver
foreach (var item in marketNameList)
sqlQuery += Million.DbManagement.DbServiceFunctions.CreateMarketTable_ToDB(item);
sqlQuery += Million.DbManagement.DbServiceFunctions.CreateMarketTable_ToDB_All();
if (!string.IsNullOrWhiteSpace(sqlQuery))
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
Million.DbManagement.DBConnection.QueryUpdateExecuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
}
/// <summary>
/// 선택한 거래소의 종목(Market) 업데이트
/// </summary>
private void updateMarketTableOfPlace()
{
var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList;
//거래소 가져오기
var placeIndex = comboBoxEdit_ExchangePlace.SelectedIndex;
CommonProperty.recentlyMarketOfPlaceList = new List<MarketData>();
switch (placeIndex)
{
case (int)CommonProperty.ExchangePlace.Upbit:
CommonProperty.recentlyMarketOfPlaceList = CommonProperty.UpbitApi.GetMarketDatas();
break;
//case (int)CommonProperty.ExchangePlace.Bithumb:
// marketList = Million.DbManagement.DbServiceFunctions.GetMarketTable_FromDB(
// comboBoxEdit_ExchangePlace.SelectedItem.ToString());
// break;
}
// 비교
// insert (신규)
var insertData = new List<MarketData>();
var sqlQuery = "";
var insertDatasss = CommonProperty.recentlyMarketOfPlaceList
.Where(x => dbMarketDataList.Count(s => x.CoinFullName == s.CoinFullName) == 0).ToList();
//var insertDatas = CommonProperty.recentlyMarketOfPlaceList.Except(dbMarketDataList).ToList();
foreach (var data in CommonProperty.recentlyMarketOfPlaceList)
{
if (!dbMarketDataList.Any(t => t.CoinFullName == data.CoinFullName))
sqlQuery += string.Format(
"INSERT INTO [dbo].[{0}]([CoinFullName], [ExchangePlace], [KorName], [CoinName], [Payment], [IsValid]) VALUES ('{1}','{2}','{3}','{4}','{5}',{6})",
comboBoxEdit_ExchangePlace.SelectedItem, data.CoinFullName,
data.ExchangePlace, data.KorName, data.CoinName, data.Payment, 1);
}
foreach (var data in dbMarketDataList)
{
if (!CommonProperty.recentlyMarketOfPlaceList.Any(t => t.CoinFullName == data.CoinFullName) && data.IsValid)
sqlQuery += string.Format(
"UPDATE [dbo].[{0}] SET IsValid = 0 WHERE [CoinFullName] = '{1}'",
comboBoxEdit_ExchangePlace.SelectedItem,
data.CoinFullName);
}
if(!string.IsNullOrWhiteSpace(sqlQuery))
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionMarket, sqlQuery);
}
/// <summary>
/// Delete 기능 추가
/// </summary>
@@ -254,12 +216,12 @@ namespace DataSaver
count++;
if (count % 50 == 0)
{
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
Million.DbManagement.DBConnection.QueryUpdateExecuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
sqlQuery = "";
}
}
if (!string.IsNullOrWhiteSpace(sqlQuery)) Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
if (!string.IsNullOrWhiteSpace(sqlQuery)) Million.DbManagement.DBConnection.QueryUpdateExecuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
MessageBox.Show("기간 삭제 완료");
@@ -296,7 +258,7 @@ namespace DataSaver
DbServiceFunctions.GetMarketTable_FromDB("Upbit", "KRW");
// Result Data DB에 생성
Million.DbManagement.DBConnection.QueryUpdateExcuter
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateVerifyTickerDataTableQuery());
//market List
@@ -313,43 +275,39 @@ namespace DataSaver
{
var date = DateTime.Now;
var tickerList = CommonProperty.UpbitApi.GetTickerList(coinFullNameList);
var dic = new Dictionary<string, object>();
var dateData = tickerList[0].DateTime;
foreach (var item in coinFullNameList)
{
dic[item] = 0;
}
if (tickerList.Count != 0)
{
foreach (var item in tickerList)
{
dic["CoinFullName"] = item.CoinFullName;
dic["Price"] = item.TradePrice;
dic["DateTime"] = item.DateTime;
}
var dic = new Dictionary<string, object>();
var ticker = tickerList.FirstOrDefault(t => t.CoinFullName == item);
dic["CoinFullName"] = item;
dic["EndValue"] = ticker.TradePrice;
dic["DateTime"] = ticker.DateTime;
list.Add(dic);
}
if(date.Minute == 0 && saveFlag)
if (date.Minute % 10 == 0 && saveFlag)
{
list = list.OrderBy(t => ((DateTime)t["DateTime"])).ToList();
var beforeDate = date.AddHours(-1);
beforeDate = beforeDate.AddMinutes(-1 * beforeDate.Minute);
var beforeDate = date.AddMinutes(-10);
beforeDate = beforeDate.AddSeconds(-1 * beforeDate.Second);
beforeDate = beforeDate.AddMilliseconds(-1 * beforeDate.Millisecond);
var recentlyDate = date.AddMinutes(-1 * date.Minute);
recentlyDate = recentlyDate.AddSeconds(-1 * date.Second);
var recentlyDate = date.AddSeconds(-1 * date.Second);
recentlyDate = recentlyDate.AddMilliseconds(-1 * date.Millisecond);
var dicList = list.Where(t => ((DateTime)t["DateTime"]) >= beforeDate && ((DateTime)t["DateTime"]) < recentlyDate).ToList();
DBConnection.QueryInsertExcuter_VerifyTickerData(dicList, beforeDate);
list.RemoveRange(0, dicList.Count);
DBConnection.QueryInsertExecuter_VerifyTickerData(dicList, beforeDate);
foreach (var item in dicList)
{
list.Remove(item);
}
saveFlag = false;
}
else if(date.Minute == 1)
else if (date.Minute % 10 != 0)
{
saveFlag = true;
}
@@ -361,7 +319,7 @@ namespace DataSaver
// //insertDateTime = insertDateTime.AddSeconds(-1 * insertDateTime.Second);
// //insertDateTime = insertDateTime.AddMilliseconds(-1 * insertDateTime.Millisecond);
// //var dicList = list.Where(t => ((DateTime)t["DateTime"]).Hour == hour).ToList();
// //DBConnection.QueryInsertExcuter_VerifyTickerData(dicList, insertDateTime);
// //DBConnection.QueryInsertExecuter_VerifyTickerData(dicList, insertDateTime);
// ////clear 작업
// //list = list.OrderBy(t => t["DateTime"]).ToList();
// //var index = list.FindLastIndex(t => ((DateTime)t["DateTime"]).Hour == hour);
@@ -372,7 +330,7 @@ namespace DataSaver
// //hour = date.Hour;
//}
Thread.Sleep(500);
Thread.Sleep(1000);
}
}
@@ -389,5 +347,64 @@ namespace DataSaver
if (tickThread.IsAlive) tickThread.Abort();
MessageBox.Show("Ticker Thread Stop 성공");
}
private void bt_ScheduleStart_Click(object sender, EventArgs e)
{
if (timer != null) return;
//시작 시 button 모두 disabled
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
bt_ScheduleStart.Enabled = false;
bt_ScheduleStop.Enabled = true;
button_AllMarketDataAcc.Enabled = false;
button_SelectedMarketDataAcc.Enabled = false;
deletebtn.Enabled = false;
exchangedData = comboBoxEdit_ExchangePlace.SelectedItem.ToString();
var runAt = 1;
var min = 60 - DateTime.Now.Minute;
var sec = 60 - DateTime.Now.Second;
hours = (24 - (+1)) + runAt;
var interval = ((hours * 60 * 60) + (min * 60) + sec) * 1000;
timer = new System.Timers.Timer();
timer.Interval = interval;
timer.Elapsed += new System.Timers.ElapsedEventHandler(ScheduleFun);
timer.Start();
}
private void bt_ScheduleStop_Click(object sender, EventArgs e)
{
//멈춤 시 button 모두 enabled
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
bt_ScheduleStart.Enabled = true;
bt_ScheduleStop.Enabled = false;
button_AllMarketDataAcc.Enabled = true;
button_SelectedMarketDataAcc.Enabled = true;
deletebtn.Enabled = true;
timer.Stop();
timer.Dispose();
timer = null;
}
/// <summary>
/// Timer 함수
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ScheduleFun(object sender, System.Timers.ElapsedEventArgs e)
{
if (hours != 24)
{
hours = 24;
timer.Interval = hours * 60 * 60 * 1000;
}
var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList;
SetCandleData(exchangedData, dbMarketDataList);
}
}
}

View File

@@ -1,111 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D9DE0F1B-BA15-421E-A263-6859F3D5A3BC}</ProjectGuid>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>DataSaver</RootNamespace>
<AssemblyName>DataSaver</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="DevExpress.Drawing.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v22.2.Core, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v22.2.Core, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.Desktop.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Linq" />
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="UIAutomationClient" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
<None Include="..\.editorconfig">
<Link>.editorconfig</Link>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Folder Include="FileManagerment\" />
<Folder Include="SaveData\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
<ProjectReference Include="..\Million\Million Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="log4net" Version="2.0.12" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<Compile Remove="SaverMainForm.cs" />
<Compile Remove="SaverMainForm.Designer.cs" />
<EmbeddedResource Remove="SaverMainForm.resx" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D9DE0F1B-BA15-421E-A263-6859F3D5A3BC}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>DataSaver</RootNamespace>
<AssemblyName>DataSaver</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.Desktop.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Linq" />
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="UIAutomationClient" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Folder Include="FileManagerment\" />
<Folder Include="SaveData\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<ItemGroup>
<Compile Update="MainForm.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("DataSaver")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DataSaver")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("d9de0f1b-ba15-421e-a263-6859f3d5a3bc")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,3 +0,0 @@
DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,3 @@
DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.12" targetFramework="net48" />
</packages>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -120,4 +120,7 @@
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>32</value>
</metadata>
</root>

View File

@@ -1,180 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7C6E28D6-A9CA-465B-88F2-1C3BA33B74BE}</ProjectGuid>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>Million_Buyer</RootNamespace>
<AssemblyName>Million Buyer</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.CodeAnalysis, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.6.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.6.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SubForm\IndicatorLoad.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\IndicatorLoad.Designer.cs">
<DependentUpon>IndicatorLoad.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="SubForm\IndicatorLoad.resx">
<DependentUpon>IndicatorLoad.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
<ProjectReference Include="..\Million\Million Core.csproj" />
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.3.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.3.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.3.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="4.3.0" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.12.0" />
<PackageReference Include="Microsoft.IdentityModel.Logging" Version="6.12.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.12.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.12.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
<PackageReference Include="System.Reflection.Metadata" Version="7.0.2" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7C6E28D6-A9CA-465B-88F2-1C3BA33B74BE}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Million_Buyer</RootNamespace>
<AssemblyName>Million Buyer</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraTreeList.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.CodeAnalysis, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.6.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.6.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SubForm\IndicatorLoad.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\IndicatorLoad.Designer.cs">
<DependentUpon>IndicatorLoad.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="SubForm\IndicatorLoad.resx">
<DependentUpon>IndicatorLoad.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
</Project>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<ItemGroup>
<Compile Update="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="SubForm\IndicatorLoad.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("Million Buyer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Million Buyer")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("7c6e28d6-a9ca-465b-88f2-1c3ba33b74be")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,2 @@
DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -35,6 +35,7 @@ namespace Million_Buyer.SubForm
this.SavedDateTime = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.BuyRegularExpression = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SellRegularExpression = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.SellExceptionRegularExpression = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.bt_Cancel = new System.Windows.Forms.Button();
this.bt_Ok = new System.Windows.Forms.Button();
this.bt_Delete = new System.Windows.Forms.Button();
@@ -49,7 +50,8 @@ namespace Million_Buyer.SubForm
this.NameField,
this.SavedDateTime,
this.BuyRegularExpression,
this.SellRegularExpression});
this.SellRegularExpression,
this.SellExceptionRegularExpression});
this.tl_Indicator.Cursor = System.Windows.Forms.Cursors.Default;
this.tl_Indicator.Location = new System.Drawing.Point(12, 12);
this.tl_Indicator.Name = "tl_Indicator";
@@ -103,6 +105,14 @@ namespace Million_Buyer.SubForm
this.SellRegularExpression.Visible = true;
this.SellRegularExpression.VisibleIndex = 4;
//
// SellExceptionRegularExpression
//
this.SellExceptionRegularExpression.Caption = "SellExceptionReg";
this.SellExceptionRegularExpression.FieldName = "SellExceptionRegularExpression";
this.SellExceptionRegularExpression.Name = "SellExceptionRegularExpression";
this.SellExceptionRegularExpression.Visible = true;
this.SellExceptionRegularExpression.VisibleIndex = 5;
//
// bt_Cancel
//
this.bt_Cancel.Location = new System.Drawing.Point(655, 415);
@@ -141,6 +151,7 @@ namespace Million_Buyer.SubForm
this.bt_Modify.TabIndex = 16;
this.bt_Modify.Text = "Modify";
this.bt_Modify.UseVisualStyleBackColor = true;
this.bt_Modify.Click += new System.EventHandler(this.bt_Modify_Click);
//
// IndicatorLoadForm
//
@@ -171,5 +182,6 @@ namespace Million_Buyer.SubForm
private DevExpress.XtraTreeList.Columns.TreeListColumn SellRegularExpression;
private System.Windows.Forms.Button bt_Delete;
private System.Windows.Forms.Button bt_Modify;
private DevExpress.XtraTreeList.Columns.TreeListColumn SellExceptionRegularExpression;
}
}

View File

@@ -28,7 +28,7 @@ namespace Million_Buyer.SubForm
{
tl_Indicator.ClearNodes();
datas = DBConnection.QueryGetExcuter_RealTimeIndicator();
datas = DBConnection.QueryGetExecuter_RealTimeIndicator();
if (datas.Count > 0)
{
@@ -41,7 +41,8 @@ namespace Million_Buyer.SubForm
item["Name"],
((DateTime)item["SavedDateTime"]).ToString("yyyy-MM-dd HH:mm:ss"),
item["BuyRegularExpression"],
item["SellRegularExpression"]
item["SellRegularExpression"],
item["SellExceptionRegularExpression"]
}, null);
}
tl_Indicator.EndUnboundLoad();
@@ -85,9 +86,14 @@ namespace Million_Buyer.SubForm
private void bt_Delete_Click(object sender, EventArgs e)
{
var strId = tl_Indicator.Selection.First()["Id"].ToString();
DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionResultData,
DBConnection.QueryUpdateExecuter(CommonProperty.DbConnectionResultData,
"DELETE FROM [ResultData].[dbo].[RealTimeIndicator] WHERE Id = " + strId);
Init();
}
private void bt_Modify_Click(object sender, EventArgs e)
{
}
}
}

View File

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.3.3" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.Scripting.Common" version="4.3.0" targetFramework="net48" />
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" />
<package id="Microsoft.IdentityModel.JsonWebTokens" version="6.12.0" targetFramework="net48" />
<package id="Microsoft.IdentityModel.Logging" version="6.12.0" targetFramework="net48" />
<package id="Microsoft.IdentityModel.Tokens" version="6.12.0" targetFramework="net48" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections.Immutable" version="6.0.0" targetFramework="net48" />
<package id="System.IdentityModel.Tokens.Jwt" version="6.12.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Reflection.Metadata" version="5.0.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="6.0.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>

File diff suppressed because one or more lines are too long

View File

@@ -32,9 +32,15 @@ namespace Million
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.comboBoxEdit_IndicatorSelection = new DevExpress.XtraEditors.ComboBoxEdit();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.groupBox11 = new System.Windows.Forms.GroupBox();
this.tb_SearchResultDataName = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.bt_InsertList = new DevExpress.XtraEditors.SimpleButton();
this.bt_CheckedList = new DevExpress.XtraEditors.SimpleButton();
this.bt_CalculateList = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_ToSellList = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_SetupEdit = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
this.bt_AllClear = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_SetupRefresh = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_SetupDelete = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_TobuyList = new DevExpress.XtraEditors.SimpleButton();
@@ -54,6 +60,8 @@ namespace Million
this.treeListColumn2 = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn3 = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.groupBox6 = new System.Windows.Forms.GroupBox();
this.rd_RealtimeHunter = new System.Windows.Forms.RadioButton();
this.rd_Hunter = new System.Windows.Forms.RadioButton();
this.label1 = new System.Windows.Forms.Label();
this.tb_BuyerIndicatorName = new System.Windows.Forms.TextBox();
this.bt_InsertBuyerIndicator = new DevExpress.XtraEditors.SimpleButton();
@@ -68,10 +76,25 @@ namespace Million
this.splitContainer_RegularExpression = new System.Windows.Forms.SplitContainer();
this.groupBox8 = new System.Windows.Forms.GroupBox();
this.groupBox9 = new System.Windows.Forms.GroupBox();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textEdit_SellExceptionRegularExpression = new DevExpress.XtraEditors.TextEdit();
this.groupBox10 = new System.Windows.Forms.GroupBox();
this.cb_StarValueLowOverlapUp = new System.Windows.Forms.CheckBox();
this.cb_DownBeforeValueFlag = new System.Windows.Forms.CheckBox();
this.cb_IncludeClearIndicator = new System.Windows.Forms.CheckBox();
this.cb_UpperMainIndi = new System.Windows.Forms.CheckBox();
this.tb_MoneyVolCnt = new System.Windows.Forms.TextBox();
this.groupBox12 = new System.Windows.Forms.GroupBox();
this.tb_BigMoneyVolCnt = new System.Windows.Forms.TextBox();
this.cb_BuyBigthanHighType = new DevExpress.XtraEditors.ComboBoxEdit();
this.cb_BigMoneyVolType = new DevExpress.XtraEditors.ComboBoxEdit();
this.ck_BigMoneyVol = new System.Windows.Forms.CheckBox();
this.ck_BuyBigthanHighVal = new System.Windows.Forms.CheckBox();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_IndicatorSelection.Properties)).BeginInit();
this.groupBox2.SuspendLayout();
this.groupBox11.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorSetup)).BeginInit();
this.groupBox5.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dateEdit_EndDateTime.Properties.CalendarTimeProperties)).BeginInit();
@@ -96,6 +119,11 @@ namespace Million
this.splitContainer_RegularExpression.SuspendLayout();
this.groupBox8.SuspendLayout();
this.groupBox9.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.textEdit_SellExceptionRegularExpression.Properties)).BeginInit();
this.groupBox10.SuspendLayout();
this.groupBox12.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.cb_BuyBigthanHighType.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.cb_BigMoneyVolType.Properties)).BeginInit();
this.SuspendLayout();
//
// groupBox1
@@ -122,27 +150,83 @@ namespace Million
//
this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox2.Controls.Add(this.groupBox11);
this.groupBox2.Controls.Add(this.simpleButton_ToSellList);
this.groupBox2.Controls.Add(this.simpleButton_SetupEdit);
this.groupBox2.Controls.Add(this.simpleButton1);
this.groupBox2.Controls.Add(this.simpleButton_SetupRefresh);
this.groupBox2.Controls.Add(this.simpleButton_SetupDelete);
this.groupBox2.Controls.Add(this.simpleButton_TobuyList);
this.groupBox2.Controls.Add(this.panelControl_IndicatorSetup);
this.groupBox2.Controls.Add(this.groupBox1);
this.groupBox2.Location = new System.Drawing.Point(12, 91);
this.groupBox2.Location = new System.Drawing.Point(12, 139);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(913, 393);
this.groupBox2.Size = new System.Drawing.Size(913, 345);
this.groupBox2.TabIndex = 0;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "조건 설정";
//
// groupBox11
//
this.groupBox11.Controls.Add(this.tb_SearchResultDataName);
this.groupBox11.Controls.Add(this.label4);
this.groupBox11.Controls.Add(this.bt_InsertList);
this.groupBox11.Controls.Add(this.bt_CheckedList);
this.groupBox11.Controls.Add(this.bt_CalculateList);
this.groupBox11.Location = new System.Drawing.Point(226, 25);
this.groupBox11.Name = "groupBox11";
this.groupBox11.Size = new System.Drawing.Size(457, 53);
this.groupBox11.TabIndex = 1;
this.groupBox11.TabStop = false;
this.groupBox11.Text = "List 계산";
//
// tb_SearchResultDataName
//
this.tb_SearchResultDataName.Location = new System.Drawing.Point(59, 23);
this.tb_SearchResultDataName.Name = "tb_SearchResultDataName";
this.tb_SearchResultDataName.Size = new System.Drawing.Size(105, 21);
this.tb_SearchResultDataName.TabIndex = 6;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(13, 26);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(47, 12);
this.label4.TabIndex = 7;
this.label4.Text = "Name :";
//
// bt_InsertList
//
this.bt_InsertList.Location = new System.Drawing.Point(170, 16);
this.bt_InsertList.Name = "bt_InsertList";
this.bt_InsertList.Size = new System.Drawing.Size(89, 31);
this.bt_InsertList.TabIndex = 3;
this.bt_InsertList.Text = "List에 추가";
this.bt_InsertList.Click += new System.EventHandler(this.bt_InsertList_Click);
//
// bt_CheckedList
//
this.bt_CheckedList.Location = new System.Drawing.Point(265, 16);
this.bt_CheckedList.Name = "bt_CheckedList";
this.bt_CheckedList.Size = new System.Drawing.Size(89, 31);
this.bt_CheckedList.TabIndex = 4;
this.bt_CheckedList.Text = "List 확인";
this.bt_CheckedList.Click += new System.EventHandler(this.bt_CheckedList_Click);
//
// bt_CalculateList
//
this.bt_CalculateList.Location = new System.Drawing.Point(360, 16);
this.bt_CalculateList.Name = "bt_CalculateList";
this.bt_CalculateList.Size = new System.Drawing.Size(89, 31);
this.bt_CalculateList.TabIndex = 5;
this.bt_CalculateList.Text = "List 계산하기";
this.bt_CalculateList.Click += new System.EventHandler(this.bt_CalculateList_Click);
//
// simpleButton_ToSellList
//
this.simpleButton_ToSellList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton_ToSellList.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(255)))));
this.simpleButton_ToSellList.Appearance.Options.UseBackColor = true;
this.simpleButton_ToSellList.Location = new System.Drawing.Point(807, 352);
this.simpleButton_ToSellList.Location = new System.Drawing.Point(807, 304);
this.simpleButton_ToSellList.Name = "simpleButton_ToSellList";
this.simpleButton_ToSellList.Size = new System.Drawing.Size(97, 31);
this.simpleButton_ToSellList.TabIndex = 2;
@@ -154,35 +238,35 @@ namespace Million
this.simpleButton_SetupEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton_SetupEdit.Appearance.ForeColor = System.Drawing.Color.Blue;
this.simpleButton_SetupEdit.Appearance.Options.UseForeColor = true;
this.simpleButton_SetupEdit.Location = new System.Drawing.Point(469, 352);
this.simpleButton_SetupEdit.Location = new System.Drawing.Point(469, 304);
this.simpleButton_SetupEdit.Name = "simpleButton_SetupEdit";
this.simpleButton_SetupEdit.Size = new System.Drawing.Size(97, 31);
this.simpleButton_SetupEdit.TabIndex = 2;
this.simpleButton_SetupEdit.Text = "수정";
this.simpleButton_SetupEdit.Click += new System.EventHandler(this.simpleButton_SetupEdit_Click);
//
// simpleButton1
// bt_AllClear
//
this.simpleButton1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton1.Appearance.ForeColor = System.Drawing.Color.IndianRed;
this.simpleButton1.Appearance.Options.UseForeColor = true;
this.simpleButton1.Location = new System.Drawing.Point(469, 41);
this.simpleButton1.Name = "simpleButton1";
this.simpleButton1.Size = new System.Drawing.Size(97, 31);
this.simpleButton1.TabIndex = 2;
this.simpleButton1.Text = "테스트";
this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
this.bt_AllClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.bt_AllClear.Appearance.ForeColor = System.Drawing.Color.Black;
this.bt_AllClear.Appearance.Options.UseForeColor = true;
this.bt_AllClear.Location = new System.Drawing.Point(340, 95);
this.bt_AllClear.Name = "bt_AllClear";
this.bt_AllClear.Size = new System.Drawing.Size(97, 31);
this.bt_AllClear.TabIndex = 2;
this.bt_AllClear.Text = "전체 초기화";
this.bt_AllClear.Click += new System.EventHandler(this.simpleButton1_Click);
//
// simpleButton_SetupRefresh
//
this.simpleButton_SetupRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton_SetupRefresh.Appearance.ForeColor = System.Drawing.Color.Teal;
this.simpleButton_SetupRefresh.Appearance.Options.UseForeColor = true;
this.simpleButton_SetupRefresh.Location = new System.Drawing.Point(801, 41);
this.simpleButton_SetupRefresh.Location = new System.Drawing.Point(237, 95);
this.simpleButton_SetupRefresh.Name = "simpleButton_SetupRefresh";
this.simpleButton_SetupRefresh.Size = new System.Drawing.Size(97, 31);
this.simpleButton_SetupRefresh.TabIndex = 2;
this.simpleButton_SetupRefresh.Text = "초기화";
this.simpleButton_SetupRefresh.Text = "조건 초기화";
this.simpleButton_SetupRefresh.Click += new System.EventHandler(this.simpleButton_SetupRefresh_Click);
//
// simpleButton_SetupDelete
@@ -190,7 +274,7 @@ namespace Million
this.simpleButton_SetupDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton_SetupDelete.Appearance.ForeColor = System.Drawing.Color.Red;
this.simpleButton_SetupDelete.Appearance.Options.UseForeColor = true;
this.simpleButton_SetupDelete.Location = new System.Drawing.Point(572, 352);
this.simpleButton_SetupDelete.Location = new System.Drawing.Point(572, 304);
this.simpleButton_SetupDelete.Name = "simpleButton_SetupDelete";
this.simpleButton_SetupDelete.Size = new System.Drawing.Size(97, 31);
this.simpleButton_SetupDelete.TabIndex = 2;
@@ -202,7 +286,7 @@ namespace Million
this.simpleButton_TobuyList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton_TobuyList.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
this.simpleButton_TobuyList.Appearance.Options.UseBackColor = true;
this.simpleButton_TobuyList.Location = new System.Drawing.Point(704, 352);
this.simpleButton_TobuyList.Location = new System.Drawing.Point(704, 304);
this.simpleButton_TobuyList.Name = "simpleButton_TobuyList";
this.simpleButton_TobuyList.Size = new System.Drawing.Size(97, 31);
this.simpleButton_TobuyList.TabIndex = 2;
@@ -217,7 +301,7 @@ namespace Million
this.panelControl_IndicatorSetup.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Flat;
this.panelControl_IndicatorSetup.Location = new System.Drawing.Point(19, 83);
this.panelControl_IndicatorSetup.Name = "panelControl_IndicatorSetup";
this.panelControl_IndicatorSetup.Size = new System.Drawing.Size(885, 263);
this.panelControl_IndicatorSetup.Size = new System.Drawing.Size(885, 215);
this.panelControl_IndicatorSetup.TabIndex = 1;
//
// groupBox5
@@ -279,7 +363,7 @@ namespace Million
this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox3.Location = new System.Drawing.Point(0, 0);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(482, 217);
this.groupBox3.Size = new System.Drawing.Size(482, 187);
this.groupBox3.TabIndex = 0;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "구매 조건 조합";
@@ -297,7 +381,7 @@ namespace Million
this.treeList_BuySetupList.OptionsBehavior.Editable = false;
this.treeList_BuySetupList.OptionsView.ShowIndicator = false;
this.treeList_BuySetupList.OptionsView.ShowRoot = false;
this.treeList_BuySetupList.Size = new System.Drawing.Size(476, 197);
this.treeList_BuySetupList.Size = new System.Drawing.Size(476, 167);
this.treeList_BuySetupList.TabIndex = 1;
this.treeList_BuySetupList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.treeList_BuySetupList_MouseDoubleClick);
//
@@ -336,7 +420,7 @@ namespace Million
this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox4.Location = new System.Drawing.Point(0, 0);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(426, 217);
this.groupBox4.Size = new System.Drawing.Size(426, 187);
this.groupBox4.TabIndex = 0;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "판매 조건 조합";
@@ -354,7 +438,7 @@ namespace Million
this.treeList_SellSetupList.OptionsBehavior.Editable = false;
this.treeList_SellSetupList.OptionsView.ShowIndicator = false;
this.treeList_SellSetupList.OptionsView.ShowRoot = false;
this.treeList_SellSetupList.Size = new System.Drawing.Size(420, 197);
this.treeList_SellSetupList.Size = new System.Drawing.Size(420, 167);
this.treeList_SellSetupList.TabIndex = 2;
this.treeList_SellSetupList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.treeList_BuySetupList_MouseDoubleClick);
//
@@ -391,18 +475,42 @@ namespace Million
//
this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox6.Controls.Add(this.rd_RealtimeHunter);
this.groupBox6.Controls.Add(this.rd_Hunter);
this.groupBox6.Controls.Add(this.label1);
this.groupBox6.Controls.Add(this.tb_BuyerIndicatorName);
this.groupBox6.Controls.Add(this.bt_InsertBuyerIndicator);
this.groupBox6.Controls.Add(this.simpleButton_SaveTest);
this.groupBox6.Controls.Add(this.simpleButton_CalcurateData);
this.groupBox6.Controls.Add(this.simpleButton_ViewResultData);
this.groupBox6.Location = new System.Drawing.Point(12, 765);
this.groupBox6.Location = new System.Drawing.Point(12, 735);
this.groupBox6.Name = "groupBox6";
this.groupBox6.Size = new System.Drawing.Size(913, 62);
this.groupBox6.TabIndex = 0;
this.groupBox6.TabStop = false;
this.groupBox6.Text = "결과 보기";
this.groupBox6.Text = "ETC";
//
// rd_RealtimeHunter
//
this.rd_RealtimeHunter.AutoSize = true;
this.rd_RealtimeHunter.Checked = true;
this.rd_RealtimeHunter.Location = new System.Drawing.Point(84, 28);
this.rd_RealtimeHunter.Name = "rd_RealtimeHunter";
this.rd_RealtimeHunter.Size = new System.Drawing.Size(112, 16);
this.rd_RealtimeHunter.TabIndex = 12;
this.rd_RealtimeHunter.TabStop = true;
this.rd_RealtimeHunter.Text = "Realtime Hunter";
this.rd_RealtimeHunter.UseVisualStyleBackColor = true;
//
// rd_Hunter
//
this.rd_Hunter.AutoSize = true;
this.rd_Hunter.Location = new System.Drawing.Point(19, 28);
this.rd_Hunter.Name = "rd_Hunter";
this.rd_Hunter.Size = new System.Drawing.Size(59, 16);
this.rd_Hunter.TabIndex = 11;
this.rd_Hunter.Text = "Hunter";
this.rd_Hunter.UseVisualStyleBackColor = true;
//
// label1
//
@@ -464,7 +572,7 @@ namespace Million
//
this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.groupBox7.Controls.Add(this.simpleButton_SavedResultViewer);
this.groupBox7.Location = new System.Drawing.Point(741, 23);
this.groupBox7.Location = new System.Drawing.Point(12, 81);
this.groupBox7.Name = "groupBox7";
this.groupBox7.Size = new System.Drawing.Size(181, 52);
this.groupBox7.TabIndex = 0;
@@ -496,16 +604,16 @@ namespace Million
// splitContainer_SetupPanel.Panel2
//
this.splitContainer_SetupPanel.Panel2.Controls.Add(this.groupBox4);
this.splitContainer_SetupPanel.Size = new System.Drawing.Size(912, 217);
this.splitContainer_SetupPanel.Size = new System.Drawing.Size(912, 187);
this.splitContainer_SetupPanel.SplitterDistance = 482;
this.splitContainer_SetupPanel.TabIndex = 1;
//
// textEdit_SellRegularExpression
//
this.textEdit_SellRegularExpression.Dock = System.Windows.Forms.DockStyle.Fill;
this.textEdit_SellRegularExpression.Location = new System.Drawing.Point(3, 17);
this.textEdit_SellRegularExpression.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.textEdit_SellRegularExpression.Location = new System.Drawing.Point(54, 17);
this.textEdit_SellRegularExpression.Name = "textEdit_SellRegularExpression";
this.textEdit_SellRegularExpression.Size = new System.Drawing.Size(420, 20);
this.textEdit_SellRegularExpression.Size = new System.Drawing.Size(137, 20);
this.textEdit_SellRegularExpression.TabIndex = 0;
//
// textEdit_BuyRegularExpression
@@ -520,7 +628,7 @@ namespace Million
//
this.splitContainer_RegularExpression.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.splitContainer_RegularExpression.Location = new System.Drawing.Point(10, 714);
this.splitContainer_RegularExpression.Location = new System.Drawing.Point(10, 684);
this.splitContainer_RegularExpression.Name = "splitContainer_RegularExpression";
//
// splitContainer_RegularExpression.Panel1
@@ -547,6 +655,9 @@ namespace Million
//
// groupBox9
//
this.groupBox9.Controls.Add(this.label3);
this.groupBox9.Controls.Add(this.label2);
this.groupBox9.Controls.Add(this.textEdit_SellExceptionRegularExpression);
this.groupBox9.Controls.Add(this.textEdit_SellRegularExpression);
this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox9.Location = new System.Drawing.Point(0, 0);
@@ -556,27 +667,171 @@ namespace Million
this.groupBox9.TabStop = false;
this.groupBox9.Text = "판매 조건 조합";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(215, 22);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(57, 12);
this.label3.TabIndex = 3;
this.label3.Text = "손절 조건";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(19, 20);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(29, 12);
this.label2.TabIndex = 2;
this.label2.Text = "메인";
//
// textEdit_SellExceptionRegularExpression
//
this.textEdit_SellExceptionRegularExpression.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.textEdit_SellExceptionRegularExpression.Location = new System.Drawing.Point(278, 17);
this.textEdit_SellExceptionRegularExpression.Name = "textEdit_SellExceptionRegularExpression";
this.textEdit_SellExceptionRegularExpression.Size = new System.Drawing.Size(137, 20);
this.textEdit_SellExceptionRegularExpression.TabIndex = 1;
//
// groupBox10
//
this.groupBox10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.groupBox10.Controls.Add(this.tb_MoneyVolCnt);
this.groupBox10.Controls.Add(this.cb_StarValueLowOverlapUp);
this.groupBox10.Controls.Add(this.cb_DownBeforeValueFlag);
this.groupBox10.Controls.Add(this.cb_IncludeClearIndicator);
this.groupBox10.Controls.Add(this.cb_UpperMainIndi);
this.groupBox10.Location = new System.Drawing.Point(466, 13);
this.groupBox10.Name = "groupBox10";
this.groupBox10.Size = new System.Drawing.Size(215, 113);
this.groupBox10.TabIndex = 4;
this.groupBox10.TabStop = false;
this.groupBox10.Text = "Data Setting";
//
// cb_StarValueLowOverlapUp
//
this.cb_StarValueLowOverlapUp.AutoSize = true;
this.cb_StarValueLowOverlapUp.Location = new System.Drawing.Point(6, 84);
this.cb_StarValueLowOverlapUp.Name = "cb_StarValueLowOverlapUp";
this.cb_StarValueLowOverlapUp.Size = new System.Drawing.Size(164, 16);
this.cb_StarValueLowOverlapUp.TabIndex = 14;
this.cb_StarValueLowOverlapUp.Text = "사는시점 전 고가<현 시가";
this.cb_StarValueLowOverlapUp.UseVisualStyleBackColor = true;
//
// cb_DownBeforeValueFlag
//
this.cb_DownBeforeValueFlag.AutoSize = true;
this.cb_DownBeforeValueFlag.Location = new System.Drawing.Point(6, 62);
this.cb_DownBeforeValueFlag.Name = "cb_DownBeforeValueFlag";
this.cb_DownBeforeValueFlag.Size = new System.Drawing.Size(196, 16);
this.cb_DownBeforeValueFlag.TabIndex = 13;
this.cb_DownBeforeValueFlag.Text = "최초돌파 시 메인조건>사전조건";
this.cb_DownBeforeValueFlag.UseVisualStyleBackColor = true;
//
// cb_IncludeClearIndicator
//
this.cb_IncludeClearIndicator.AutoSize = true;
this.cb_IncludeClearIndicator.Checked = true;
this.cb_IncludeClearIndicator.CheckState = System.Windows.Forms.CheckState.Checked;
this.cb_IncludeClearIndicator.Location = new System.Drawing.Point(6, 40);
this.cb_IncludeClearIndicator.Name = "cb_IncludeClearIndicator";
this.cb_IncludeClearIndicator.Size = new System.Drawing.Size(170, 16);
this.cb_IncludeClearIndicator.TabIndex = 12;
this.cb_IncludeClearIndicator.Text = "판매 완료 조건으로 Setting";
this.cb_IncludeClearIndicator.UseVisualStyleBackColor = true;
//
// cb_UpperMainIndi
//
this.cb_UpperMainIndi.AutoSize = true;
this.cb_UpperMainIndi.Checked = true;
this.cb_UpperMainIndi.CheckState = System.Windows.Forms.CheckState.Checked;
this.cb_UpperMainIndi.Location = new System.Drawing.Point(481, 46);
this.cb_UpperMainIndi.Location = new System.Drawing.Point(6, 20);
this.cb_UpperMainIndi.Name = "cb_UpperMainIndi";
this.cb_UpperMainIndi.Size = new System.Drawing.Size(212, 16);
this.cb_UpperMainIndi.TabIndex = 10;
this.cb_UpperMainIndi.Text = "메인조건이 사전조건보다 높아야함";
this.cb_UpperMainIndi.Size = new System.Drawing.Size(128, 16);
this.cb_UpperMainIndi.TabIndex = 11;
this.cb_UpperMainIndi.Text = "메인조건>사전조건";
this.cb_UpperMainIndi.UseVisualStyleBackColor = true;
//
// tb_MoneyVolCnt
//
this.tb_MoneyVolCnt.Location = new System.Drawing.Point(308, 80);
this.tb_MoneyVolCnt.Name = "tb_MoneyVolCnt";
this.tb_MoneyVolCnt.Size = new System.Drawing.Size(105, 21);
this.tb_MoneyVolCnt.TabIndex = 8;
//
// groupBox12
//
this.groupBox12.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.groupBox12.Controls.Add(this.tb_BigMoneyVolCnt);
this.groupBox12.Controls.Add(this.cb_BuyBigthanHighType);
this.groupBox12.Controls.Add(this.cb_BigMoneyVolType);
this.groupBox12.Controls.Add(this.ck_BigMoneyVol);
this.groupBox12.Controls.Add(this.ck_BuyBigthanHighVal);
this.groupBox12.Location = new System.Drawing.Point(687, 14);
this.groupBox12.Name = "groupBox12";
this.groupBox12.Size = new System.Drawing.Size(238, 113);
this.groupBox12.TabIndex = 19;
this.groupBox12.TabStop = false;
this.groupBox12.Text = "Filter Setting";
//
// tb_BigMoneyVolCnt
//
this.tb_BigMoneyVolCnt.Location = new System.Drawing.Point(97, 81);
this.tb_BigMoneyVolCnt.Name = "tb_BigMoneyVolCnt";
this.tb_BigMoneyVolCnt.Size = new System.Drawing.Size(105, 21);
this.tb_BigMoneyVolCnt.TabIndex = 8;
this.tb_BigMoneyVolCnt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tb_BigMoneyVolCnt_KeyPress);
//
// cb_BuyBigthanHighType
//
this.cb_BuyBigthanHighType.Location = new System.Drawing.Point(6, 36);
this.cb_BuyBigthanHighType.Name = "cb_BuyBigthanHighType";
this.cb_BuyBigthanHighType.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
this.cb_BuyBigthanHighType.Size = new System.Drawing.Size(85, 20);
this.cb_BuyBigthanHighType.TabIndex = 17;
//
// cb_BigMoneyVolType
//
this.cb_BigMoneyVolType.Location = new System.Drawing.Point(6, 80);
this.cb_BigMoneyVolType.Name = "cb_BigMoneyVolType";
this.cb_BigMoneyVolType.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
this.cb_BigMoneyVolType.Size = new System.Drawing.Size(85, 20);
this.cb_BigMoneyVolType.TabIndex = 1;
//
// ck_BigMoneyVol
//
this.ck_BigMoneyVol.AutoSize = true;
this.ck_BigMoneyVol.Location = new System.Drawing.Point(6, 61);
this.ck_BigMoneyVol.Name = "ck_BigMoneyVol";
this.ck_BigMoneyVol.Size = new System.Drawing.Size(132, 16);
this.ck_BigMoneyVol.TabIndex = 16;
this.ck_BigMoneyVol.Text = "거래량 가장 많을 떄";
this.ck_BigMoneyVol.UseVisualStyleBackColor = true;
//
// ck_BuyBigthanHighVal
//
this.ck_BuyBigthanHighVal.AutoSize = true;
this.ck_BuyBigthanHighVal.Location = new System.Drawing.Point(6, 19);
this.ck_BuyBigthanHighVal.Name = "ck_BuyBigthanHighVal";
this.ck_BuyBigthanHighVal.Size = new System.Drawing.Size(102, 16);
this.ck_BuyBigthanHighVal.TabIndex = 15;
this.ck_BuyBigthanHighVal.Text = "Buy가격>고가";
this.ck_BuyBigthanHighVal.UseVisualStyleBackColor = true;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(937, 832);
this.Controls.Add(this.cb_UpperMainIndi);
this.ClientSize = new System.Drawing.Size(937, 802);
this.Controls.Add(this.groupBox12);
this.Controls.Add(this.groupBox10);
this.Controls.Add(this.splitContainer_RegularExpression);
this.Controls.Add(this.splitContainer_SetupPanel);
this.Controls.Add(this.bt_AllClear);
this.Controls.Add(this.groupBox6);
this.Controls.Add(this.simpleButton_SetupRefresh);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox7);
this.Controls.Add(this.groupBox5);
@@ -585,6 +840,8 @@ namespace Million
this.groupBox1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_IndicatorSelection.Properties)).EndInit();
this.groupBox2.ResumeLayout(false);
this.groupBox11.ResumeLayout(false);
this.groupBox11.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorSetup)).EndInit();
this.groupBox5.ResumeLayout(false);
this.groupBox5.PerformLayout();
@@ -611,8 +868,15 @@ namespace Million
this.splitContainer_RegularExpression.ResumeLayout(false);
this.groupBox8.ResumeLayout(false);
this.groupBox9.ResumeLayout(false);
this.groupBox9.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.textEdit_SellExceptionRegularExpression.Properties)).EndInit();
this.groupBox10.ResumeLayout(false);
this.groupBox10.PerformLayout();
this.groupBox12.ResumeLayout(false);
this.groupBox12.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.cb_BuyBigthanHighType.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.cb_BigMoneyVolType.Properties)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -643,7 +907,7 @@ namespace Million
private DevExpress.XtraEditors.SimpleButton simpleButton_SetupRefresh;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_IndexString;
private DevExpress.XtraEditors.TextEdit textEdit_BuyRegularExpression;
private DevExpress.XtraEditors.SimpleButton simpleButton1;
private DevExpress.XtraEditors.SimpleButton bt_AllClear;
private DevExpress.XtraTreeList.TreeList treeList_SellSetupList;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn1;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn2;
@@ -657,7 +921,29 @@ namespace Million
private DevExpress.XtraEditors.SimpleButton bt_InsertBuyerIndicator;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tb_BuyerIndicatorName;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private DevExpress.XtraEditors.TextEdit textEdit_SellExceptionRegularExpression;
private System.Windows.Forms.RadioButton rd_RealtimeHunter;
private System.Windows.Forms.RadioButton rd_Hunter;
private System.Windows.Forms.GroupBox groupBox10;
private System.Windows.Forms.CheckBox cb_UpperMainIndi;
private System.Windows.Forms.CheckBox cb_DownBeforeValueFlag;
private System.Windows.Forms.CheckBox cb_IncludeClearIndicator;
private DevExpress.XtraEditors.SimpleButton bt_CalculateList;
private DevExpress.XtraEditors.SimpleButton bt_CheckedList;
private DevExpress.XtraEditors.SimpleButton bt_InsertList;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox tb_SearchResultDataName;
private System.Windows.Forms.GroupBox groupBox11;
private System.Windows.Forms.CheckBox cb_StarValueLowOverlapUp;
private System.Windows.Forms.TextBox tb_MoneyVolCnt;
private System.Windows.Forms.GroupBox groupBox12;
private System.Windows.Forms.TextBox tb_BigMoneyVolCnt;
private DevExpress.XtraEditors.ComboBoxEdit cb_BuyBigthanHighType;
private DevExpress.XtraEditors.ComboBoxEdit cb_BigMoneyVolType;
private System.Windows.Forms.CheckBox ck_BigMoneyVol;
private System.Windows.Forms.CheckBox ck_BuyBigthanHighVal;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -36,7 +36,7 @@ namespace Million.HunterSubForm
var list = new List<int>();
list.Add(_resultViewerForm._savedResultData.Id);
treeList_ResultData.DataSource = DBConnection.QueryGetExcuter_SavedAnalysisData(list);
treeList_ResultData.DataSource = DBConnection.QueryGetExecuter_SavedAnalysisData(list);
}
private void treeList_ResultData_MouseDoubleClick(object sender, MouseEventArgs e)

View File

@@ -0,0 +1,102 @@
namespace Million_Hunter.HunterSubForm
{
partial class LoadCalculateDataList
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.bt_Delete = new System.Windows.Forms.Button();
this.bt_OK = new System.Windows.Forms.Button();
this.tl_SavedResultList = new DevExpress.XtraTreeList.TreeList();
this.NameData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
((System.ComponentModel.ISupportInitialize)(this.tl_SavedResultList)).BeginInit();
this.SuspendLayout();
//
// bt_Delete
//
this.bt_Delete.Location = new System.Drawing.Point(11, 243);
this.bt_Delete.Name = "bt_Delete";
this.bt_Delete.Size = new System.Drawing.Size(75, 23);
this.bt_Delete.TabIndex = 19;
this.bt_Delete.Text = "Delete";
this.bt_Delete.UseVisualStyleBackColor = true;
this.bt_Delete.Click += new System.EventHandler(this.bt_Delete_Click);
//
// bt_OK
//
this.bt_OK.Location = new System.Drawing.Point(244, 243);
this.bt_OK.Name = "bt_OK";
this.bt_OK.Size = new System.Drawing.Size(75, 23);
this.bt_OK.TabIndex = 18;
this.bt_OK.Text = "OK";
this.bt_OK.UseVisualStyleBackColor = true;
this.bt_OK.Click += new System.EventHandler(this.bt_OK_Click);
//
// tl_SavedResultList
//
this.tl_SavedResultList.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
this.NameData});
this.tl_SavedResultList.Cursor = System.Windows.Forms.Cursors.Default;
this.tl_SavedResultList.Location = new System.Drawing.Point(12, 12);
this.tl_SavedResultList.Name = "tl_SavedResultList";
this.tl_SavedResultList.OptionsBehavior.Editable = false;
this.tl_SavedResultList.OptionsView.ShowIndicator = false;
this.tl_SavedResultList.Size = new System.Drawing.Size(308, 225);
this.tl_SavedResultList.TabIndex = 16;
//
// NameData
//
this.NameData.Caption = "Name Data";
this.NameData.FieldName = "NameData";
this.NameData.Name = "NameData";
this.NameData.OptionsColumn.ReadOnly = true;
this.NameData.Visible = true;
this.NameData.VisibleIndex = 0;
//
// LoadCalculateDataList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(333, 273);
this.Controls.Add(this.bt_Delete);
this.Controls.Add(this.bt_OK);
this.Controls.Add(this.tl_SavedResultList);
this.Name = "LoadCalculateDataList";
this.Text = "LoadCalculateDataList";
((System.ComponentModel.ISupportInitialize)(this.tl_SavedResultList)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button bt_Delete;
private System.Windows.Forms.Button bt_OK;
private DevExpress.XtraTreeList.TreeList tl_SavedResultList;
private DevExpress.XtraTreeList.Columns.TreeListColumn NameData;
}
}

View File

@@ -0,0 +1,68 @@
using DevExpress.XtraTreeList.Nodes;
using Million.Data.SaveData;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Million_Hunter.HunterSubForm
{
public partial class LoadCalculateDataList : Form
{
public List<MultiSavedResultData> dataList;
public LoadCalculateDataList()
{
InitializeComponent();
}
public void Init(List<MultiSavedResultData> dataList)
{
this.dataList = dataList;
if (this.dataList.Count > 0)
{
tl_SavedResultList.BeginUnboundLoad();
foreach (var item in this.dataList)
{
tl_SavedResultList.AppendNode(new object[]
{
item.Name
}, null);
}
tl_SavedResultList.EndUnboundLoad();
}
}
private void bt_Delete_Click(object sender, EventArgs e)
{
var name = tl_SavedResultList.Selection.First()["NameData"].ToString();
TreeListNode data = null;
foreach (TreeListNode node in tl_SavedResultList.Nodes)
{
if (node.GetValue("NameData").ToString() == name)
{
data = node;
break;
}
}
var item = dataList.FirstOrDefault(t => t.Name == name);
dataList.Remove(item);
tl_SavedResultList.Nodes.Remove(data);
}
private void bt_OK_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -65,6 +65,8 @@ namespace Million.HunterSubForm
this.treeListColumn_ResultDataCount = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn_WinRate = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn_ProfitRate = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn_Name = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn_Id = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.splitContainer_RegularExpression = new System.Windows.Forms.SplitContainer();
this.groupBox8 = new System.Windows.Forms.GroupBox();
this.textEdit_BuyRegularExpression = new DevExpress.XtraEditors.TextEdit();
@@ -420,13 +422,20 @@ namespace Million.HunterSubForm
this.treeListColumn_SellRegularExpression,
this.treeListColumn_ResultDataCount,
this.treeListColumn_WinRate,
this.treeListColumn_ProfitRate});
this.treeListColumn_ProfitRate,
this.treeListColumn_Name,
this.treeListColumn_Id});
this.treeList_SavedResultData.Cursor = System.Windows.Forms.Cursors.Default;
this.treeList_SavedResultData.Location = new System.Drawing.Point(12, 383);
this.treeList_SavedResultData.Name = "treeList_SavedResultData";
this.treeList_SavedResultData.OptionsBehavior.Editable = false;
this.treeList_SavedResultData.OptionsSelection.MultiSelect = true;
this.treeList_SavedResultData.OptionsView.ShowIndicator = false;
this.treeList_SavedResultData.OptionsView.ShowRoot = false;
this.treeList_SavedResultData.OptionsView.ShowTreeLines = DevExpress.Utils.DefaultBoolean.False;
this.treeList_SavedResultData.Size = new System.Drawing.Size(1046, 386);
this.treeList_SavedResultData.TabIndex = 1;
this.treeList_SavedResultData.PopupMenuShowing += new DevExpress.XtraTreeList.PopupMenuShowingEventHandler(this.treeList_SavedResultData_PopupMenuShowing);
this.treeList_SavedResultData.MouseClick += new System.Windows.Forms.MouseEventHandler(this.treeList_SavedResultData_MouseClick);
this.treeList_SavedResultData.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.treeList_SavedResultData_MouseDoubleClick);
//
@@ -439,7 +448,7 @@ namespace Million.HunterSubForm
this.treeListColumn_StartDateTime.Name = "treeListColumn_StartDateTime";
this.treeListColumn_StartDateTime.OptionsColumn.FixedWidth = true;
this.treeListColumn_StartDateTime.Visible = true;
this.treeListColumn_StartDateTime.VisibleIndex = 0;
this.treeListColumn_StartDateTime.VisibleIndex = 1;
this.treeListColumn_StartDateTime.Width = 169;
//
// treeListColumn_EndDateTime
@@ -451,7 +460,7 @@ namespace Million.HunterSubForm
this.treeListColumn_EndDateTime.Name = "treeListColumn_EndDateTime";
this.treeListColumn_EndDateTime.OptionsColumn.FixedWidth = true;
this.treeListColumn_EndDateTime.Visible = true;
this.treeListColumn_EndDateTime.VisibleIndex = 1;
this.treeListColumn_EndDateTime.VisibleIndex = 2;
this.treeListColumn_EndDateTime.Width = 159;
//
// treeListColumn_SavedDateTime
@@ -464,7 +473,7 @@ namespace Million.HunterSubForm
this.treeListColumn_SavedDateTime.OptionsColumn.FixedWidth = true;
this.treeListColumn_SavedDateTime.SortOrder = System.Windows.Forms.SortOrder.Descending;
this.treeListColumn_SavedDateTime.Visible = true;
this.treeListColumn_SavedDateTime.VisibleIndex = 2;
this.treeListColumn_SavedDateTime.VisibleIndex = 3;
this.treeListColumn_SavedDateTime.Width = 157;
//
// treeListColumn_BuyRegularExpression
@@ -473,8 +482,8 @@ namespace Million.HunterSubForm
this.treeListColumn_BuyRegularExpression.FieldName = "BuyRegularExpression";
this.treeListColumn_BuyRegularExpression.Name = "treeListColumn_BuyRegularExpression";
this.treeListColumn_BuyRegularExpression.Visible = true;
this.treeListColumn_BuyRegularExpression.VisibleIndex = 3;
this.treeListColumn_BuyRegularExpression.Width = 198;
this.treeListColumn_BuyRegularExpression.VisibleIndex = 4;
this.treeListColumn_BuyRegularExpression.Width = 181;
//
// treeListColumn_SellRegularExpression
//
@@ -482,8 +491,8 @@ namespace Million.HunterSubForm
this.treeListColumn_SellRegularExpression.FieldName = "SellRegularExpression";
this.treeListColumn_SellRegularExpression.Name = "treeListColumn_SellRegularExpression";
this.treeListColumn_SellRegularExpression.Visible = true;
this.treeListColumn_SellRegularExpression.VisibleIndex = 4;
this.treeListColumn_SellRegularExpression.Width = 159;
this.treeListColumn_SellRegularExpression.VisibleIndex = 5;
this.treeListColumn_SellRegularExpression.Width = 109;
//
// treeListColumn_ResultDataCount
//
@@ -491,8 +500,8 @@ namespace Million.HunterSubForm
this.treeListColumn_ResultDataCount.FieldName = "ResultDataCount";
this.treeListColumn_ResultDataCount.Name = "treeListColumn_ResultDataCount";
this.treeListColumn_ResultDataCount.Visible = true;
this.treeListColumn_ResultDataCount.VisibleIndex = 5;
this.treeListColumn_ResultDataCount.Width = 49;
this.treeListColumn_ResultDataCount.VisibleIndex = 6;
this.treeListColumn_ResultDataCount.Width = 45;
//
// treeListColumn_WinRate
//
@@ -502,8 +511,8 @@ namespace Million.HunterSubForm
this.treeListColumn_WinRate.Format.FormatType = DevExpress.Utils.FormatType.Numeric;
this.treeListColumn_WinRate.Name = "treeListColumn_WinRate";
this.treeListColumn_WinRate.Visible = true;
this.treeListColumn_WinRate.VisibleIndex = 6;
this.treeListColumn_WinRate.Width = 67;
this.treeListColumn_WinRate.VisibleIndex = 7;
this.treeListColumn_WinRate.Width = 63;
//
// treeListColumn_ProfitRate
//
@@ -513,8 +522,23 @@ namespace Million.HunterSubForm
this.treeListColumn_ProfitRate.Format.FormatType = DevExpress.Utils.FormatType.Numeric;
this.treeListColumn_ProfitRate.Name = "treeListColumn_ProfitRate";
this.treeListColumn_ProfitRate.Visible = true;
this.treeListColumn_ProfitRate.VisibleIndex = 7;
this.treeListColumn_ProfitRate.Width = 70;
this.treeListColumn_ProfitRate.VisibleIndex = 8;
this.treeListColumn_ProfitRate.Width = 66;
//
// treeListColumn_Name
//
this.treeListColumn_Name.Caption = "정보";
this.treeListColumn_Name.FieldName = "Name";
this.treeListColumn_Name.Name = "treeListColumn_Name";
this.treeListColumn_Name.Visible = true;
this.treeListColumn_Name.VisibleIndex = 0;
this.treeListColumn_Name.Width = 79;
//
// treeListColumn_Id
//
this.treeListColumn_Id.Caption = "Id";
this.treeListColumn_Id.FieldName = "Id";
this.treeListColumn_Id.Name = "treeListColumn_Id";
//
// splitContainer_RegularExpression
//
@@ -654,5 +678,7 @@ namespace Million.HunterSubForm
private System.Windows.Forms.GroupBox groupBox_analysisInfo;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn6;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_ResultDataCount;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_Name;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_Id;
}
}

View File

@@ -51,7 +51,7 @@ namespace Million.HunterSubForm
}
// 결과 데이터 정보 가져오기
savedResultDatas = DBConnection.QueryGetExcuter_SavedResultData();
savedResultDatas = DBConnection.QueryGetExecuter_SavedResultData();
//foreach (var filePath in Directory.GetFiles(CommonProperty.SaveProgramDirecotryPath).ToList()
@@ -109,7 +109,7 @@ namespace Million.HunterSubForm
treeList_AnalysisResultData.DataSource = null;
var data = new List<int>();
data.Add(selectedResultData.Id);
treeList_AnalysisResultData.DataSource = DBConnection.QueryGetExcuter_SavedAnalysisData(data);
treeList_AnalysisResultData.DataSource = DBConnection.QueryGetExecuter_SavedAnalysisData(data);
// 분석 데이터 정보 파일 항목 불러오기(.data)
// 폴더 검사
@@ -145,6 +145,8 @@ namespace Million.HunterSubForm
var selectedResultData = (SavedResultData)treeList.GetDataRecordByNode(hitInfo.Node);
selectedResultData = DBConnection.QueryGetExecuter_SearchResultData(selectedResultData);
//Main 폼의 SaveResultData 초기화
_mainForm._saveResultData = null;
//Main 폼의 SaveResultData 초기화 (클론 복사 해야할 수 있음)
@@ -162,5 +164,9 @@ namespace Million.HunterSubForm
this.Close();
}
private void treeList_SavedResultData_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
{
}
}
}

View File

@@ -35,9 +35,9 @@ namespace Million.HunterSubForm
this.dateEdit_SavedDateTime = new DevExpress.XtraEditors.DateEdit();
this.dateEdit_StartDateTime = new DevExpress.XtraEditors.DateEdit();
this.groupBox9 = new System.Windows.Forms.GroupBox();
this.textEdit_SellRegularExpression = new DevExpress.XtraEditors.TextEdit();
this.groupBox8 = new System.Windows.Forms.GroupBox();
this.textEdit_BuyRegularExpression = new DevExpress.XtraEditors.TextEdit();
this.groupBox8 = new System.Windows.Forms.GroupBox();
this.textEdit_SellRegularExpression = new DevExpress.XtraEditors.TextEdit();
this.splitContainer_SetupPanel = new System.Windows.Forms.SplitContainer();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.treeList_BuySetupList = new DevExpress.XtraTreeList.TreeList();
@@ -68,6 +68,7 @@ namespace Million.HunterSubForm
this.treeListColumn_AnalysisDescrption = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.treeListColumn_OriginalData = new DevExpress.XtraTreeList.Columns.TreeListColumn();
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
this.simpleButton_TestBoard = new DevExpress.XtraEditors.SimpleButton();
this.labelControl_WinRateProfitRate = new DevExpress.XtraEditors.LabelControl();
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
this.textEdit_Description = new DevExpress.XtraEditors.TextEdit();
@@ -75,6 +76,7 @@ namespace Million.HunterSubForm
this.simpleButton_resetData = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_LoadAnalysisResultData = new DevExpress.XtraEditors.SimpleButton();
this.simpleButton_SavaAnalysisData = new DevExpress.XtraEditors.SimpleButton();
this.treeListColumn_PurchasedCount = new DevExpress.XtraTreeList.Columns.TreeListColumn();
((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorCondition)).BeginInit();
this.panelControl_IndicatorCondition.SuspendLayout();
this.groupBox_.SuspendLayout();
@@ -85,9 +87,9 @@ namespace Million.HunterSubForm
((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties.CalendarTimeProperties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties)).BeginInit();
this.groupBox9.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.textEdit_SellRegularExpression.Properties)).BeginInit();
this.groupBox8.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.textEdit_BuyRegularExpression.Properties)).BeginInit();
this.groupBox8.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.textEdit_SellRegularExpression.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.splitContainer_SetupPanel)).BeginInit();
this.splitContainer_SetupPanel.Panel1.SuspendLayout();
this.splitContainer_SetupPanel.Panel2.SuspendLayout();
@@ -181,34 +183,13 @@ namespace Million.HunterSubForm
//
// groupBox9
//
this.groupBox9.Controls.Add(this.textEdit_SellRegularExpression);
this.groupBox9.Controls.Add(this.textEdit_BuyRegularExpression);
this.groupBox9.Location = new System.Drawing.Point(6, 168);
this.groupBox9.Name = "groupBox9";
this.groupBox9.Size = new System.Drawing.Size(641, 45);
this.groupBox9.TabIndex = 8;
this.groupBox9.TabStop = false;
this.groupBox9.Text = "판매 조건 조합";
//
// textEdit_SellRegularExpression
//
this.textEdit_SellRegularExpression.Dock = System.Windows.Forms.DockStyle.Fill;
this.textEdit_SellRegularExpression.Location = new System.Drawing.Point(3, 18);
this.textEdit_SellRegularExpression.Name = "textEdit_SellRegularExpression";
this.textEdit_SellRegularExpression.Properties.ReadOnly = true;
this.textEdit_SellRegularExpression.Size = new System.Drawing.Size(635, 20);
this.textEdit_SellRegularExpression.TabIndex = 0;
//
// groupBox8
//
this.groupBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox8.Controls.Add(this.textEdit_BuyRegularExpression);
this.groupBox8.Location = new System.Drawing.Point(652, 168);
this.groupBox8.Name = "groupBox8";
this.groupBox8.Size = new System.Drawing.Size(609, 45);
this.groupBox8.TabIndex = 9;
this.groupBox8.TabStop = false;
this.groupBox8.Text = "구매 조건 조합";
this.groupBox9.Text = "구매 조건 조합";
//
// textEdit_BuyRegularExpression
//
@@ -216,9 +197,30 @@ namespace Million.HunterSubForm
this.textEdit_BuyRegularExpression.Location = new System.Drawing.Point(3, 18);
this.textEdit_BuyRegularExpression.Name = "textEdit_BuyRegularExpression";
this.textEdit_BuyRegularExpression.Properties.ReadOnly = true;
this.textEdit_BuyRegularExpression.Size = new System.Drawing.Size(603, 20);
this.textEdit_BuyRegularExpression.Size = new System.Drawing.Size(635, 20);
this.textEdit_BuyRegularExpression.TabIndex = 0;
//
// groupBox8
//
this.groupBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox8.Controls.Add(this.textEdit_SellRegularExpression);
this.groupBox8.Location = new System.Drawing.Point(652, 168);
this.groupBox8.Name = "groupBox8";
this.groupBox8.Size = new System.Drawing.Size(609, 45);
this.groupBox8.TabIndex = 9;
this.groupBox8.TabStop = false;
this.groupBox8.Text = "판매 조건 조합";
//
// textEdit_SellRegularExpression
//
this.textEdit_SellRegularExpression.Dock = System.Windows.Forms.DockStyle.Fill;
this.textEdit_SellRegularExpression.Location = new System.Drawing.Point(3, 18);
this.textEdit_SellRegularExpression.Name = "textEdit_SellRegularExpression";
this.textEdit_SellRegularExpression.Properties.ReadOnly = true;
this.textEdit_SellRegularExpression.Size = new System.Drawing.Size(603, 20);
this.textEdit_SellRegularExpression.TabIndex = 0;
//
// splitContainer_SetupPanel
//
this.splitContainer_SetupPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@@ -387,18 +389,20 @@ namespace Million.HunterSubForm
this.treeListColumn_SellValue,
this.treeListColumn_WinFlag,
this.treeListColumn_EarningRate,
this.treeListColumn_PurchasedCount,
this.treeListColumn_AnalysisDescrption,
this.treeListColumn_OriginalData});
this.treeList_ResultData.Cursor = System.Windows.Forms.Cursors.Default;
this.treeList_ResultData.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeList_ResultData.Location = new System.Drawing.Point(0, 275);
this.treeList_ResultData.Location = new System.Drawing.Point(0, 301);
this.treeList_ResultData.Name = "treeList_ResultData";
this.treeList_ResultData.OptionsFilter.ShowAllValuesInFilterPopup = true;
this.treeList_ResultData.OptionsSelection.MultiSelect = true;
this.treeList_ResultData.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
this.repositoryItemCheckEdit_Inclustion});
this.treeList_ResultData.Size = new System.Drawing.Size(1271, 636);
this.treeList_ResultData.Size = new System.Drawing.Size(1271, 610);
this.treeList_ResultData.TabIndex = 5;
this.treeList_ResultData.SelectionChanged += new System.EventHandler(this.treeList_ResultData_SelectionChanged);
this.treeList_ResultData.KeyUp += new System.Windows.Forms.KeyEventHandler(this.treeList_ResultData_KeyUp);
this.treeList_ResultData.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.treeList_ResultData_MouseDoubleClick);
//
// treeListColumn_Inclusion
@@ -567,7 +571,7 @@ namespace Million.HunterSubForm
this.treeListColumn_WinFlag.Name = "treeListColumn_WinFlag";
this.treeListColumn_WinFlag.OptionsColumn.AllowEdit = false;
this.treeListColumn_WinFlag.Visible = true;
this.treeListColumn_WinFlag.VisibleIndex = 10;
this.treeListColumn_WinFlag.VisibleIndex = 9;
this.treeListColumn_WinFlag.Width = 43;
//
// treeListColumn_EarningRate
@@ -583,7 +587,7 @@ namespace Million.HunterSubForm
this.treeListColumn_EarningRate.Name = "treeListColumn_EarningRate";
this.treeListColumn_EarningRate.OptionsColumn.AllowEdit = false;
this.treeListColumn_EarningRate.Visible = true;
this.treeListColumn_EarningRate.VisibleIndex = 11;
this.treeListColumn_EarningRate.VisibleIndex = 10;
this.treeListColumn_EarningRate.Width = 51;
//
// treeListColumn_AnalysisDescrption
@@ -609,6 +613,7 @@ namespace Million.HunterSubForm
//
// panelControl1
//
this.panelControl1.Controls.Add(this.simpleButton_TestBoard);
this.panelControl1.Controls.Add(this.labelControl_WinRateProfitRate);
this.panelControl1.Controls.Add(this.labelControl1);
this.panelControl1.Controls.Add(this.textEdit_Description);
@@ -619,13 +624,24 @@ namespace Million.HunterSubForm
this.panelControl1.Dock = System.Windows.Forms.DockStyle.Top;
this.panelControl1.Location = new System.Drawing.Point(0, 231);
this.panelControl1.Name = "panelControl1";
this.panelControl1.Size = new System.Drawing.Size(1271, 44);
this.panelControl1.Size = new System.Drawing.Size(1271, 70);
this.panelControl1.TabIndex = 4;
//
// simpleButton_TestBoard
//
this.simpleButton_TestBoard.Appearance.ForeColor = System.Drawing.Color.Teal;
this.simpleButton_TestBoard.Appearance.Options.UseForeColor = true;
this.simpleButton_TestBoard.Location = new System.Drawing.Point(262, 6);
this.simpleButton_TestBoard.Name = "simpleButton_TestBoard";
this.simpleButton_TestBoard.Size = new System.Drawing.Size(101, 32);
this.simpleButton_TestBoard.TabIndex = 3;
this.simpleButton_TestBoard.Text = "테스트보드";
this.simpleButton_TestBoard.Click += new System.EventHandler(this.simpleButton_TestBoard_Click);
//
// labelControl_WinRateProfitRate
//
this.labelControl_WinRateProfitRate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.labelControl_WinRateProfitRate.Location = new System.Drawing.Point(361, 15);
this.labelControl_WinRateProfitRate.Location = new System.Drawing.Point(652, 50);
this.labelControl_WinRateProfitRate.Name = "labelControl_WinRateProfitRate";
this.labelControl_WinRateProfitRate.Size = new System.Drawing.Size(19, 14);
this.labelControl_WinRateProfitRate.TabIndex = 2;
@@ -691,6 +707,14 @@ namespace Million.HunterSubForm
this.simpleButton_SavaAnalysisData.Text = "결과 저장";
this.simpleButton_SavaAnalysisData.Click += new System.EventHandler(this.simpleButton_SavaAnalysisData_Click);
//
// treeListColumn_PurchasedCount
//
this.treeListColumn_PurchasedCount.Caption = "구종목 보유 수";
this.treeListColumn_PurchasedCount.FieldName = "PurchasedCount";
this.treeListColumn_PurchasedCount.Name = "treeListColumn_PurchasedCount";
this.treeListColumn_PurchasedCount.Visible = true;
this.treeListColumn_PurchasedCount.VisibleIndex = 11;
//
// ResultViewerForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
@@ -700,7 +724,7 @@ namespace Million.HunterSubForm
this.Controls.Add(this.panelControl1);
this.Controls.Add(this.panelControl_IndicatorCondition);
this.Name = "ResultViewerForm";
this.Text = "결과 뷰";
this.Text = " ";
((System.ComponentModel.ISupportInitialize)(this.panelControl_IndicatorCondition)).EndInit();
this.panelControl_IndicatorCondition.ResumeLayout(false);
this.groupBox_.ResumeLayout(false);
@@ -712,9 +736,9 @@ namespace Million.HunterSubForm
((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties.CalendarTimeProperties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dateEdit_StartDateTime.Properties)).EndInit();
this.groupBox9.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.textEdit_SellRegularExpression.Properties)).EndInit();
this.groupBox8.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.textEdit_BuyRegularExpression.Properties)).EndInit();
this.groupBox8.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.textEdit_SellRegularExpression.Properties)).EndInit();
this.splitContainer_SetupPanel.Panel1.ResumeLayout(false);
this.splitContainer_SetupPanel.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer_SetupPanel)).EndInit();
@@ -736,7 +760,6 @@ namespace Million.HunterSubForm
#endregion
private DevExpress.XtraEditors.PanelControl panelControl_IndicatorCondition;
private DevExpress.XtraTreeList.TreeList treeList_ResultData;
private System.Windows.Forms.GroupBox groupBox_;
private System.Windows.Forms.SplitContainer splitContainer_SetupPanel;
private System.Windows.Forms.GroupBox groupBox3;
@@ -753,9 +776,9 @@ namespace Million.HunterSubForm
private DevExpress.XtraEditors.LabelControl labelControl4;
private DevExpress.XtraEditors.LabelControl labelControl3;
private System.Windows.Forms.GroupBox groupBox9;
private DevExpress.XtraEditors.TextEdit textEdit_SellRegularExpression;
private System.Windows.Forms.GroupBox groupBox8;
private DevExpress.XtraEditors.TextEdit textEdit_BuyRegularExpression;
private System.Windows.Forms.GroupBox groupBox8;
private DevExpress.XtraEditors.TextEdit textEdit_SellRegularExpression;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_Inclusion;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_ExchangePlace;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_CoinFullName;
@@ -781,5 +804,8 @@ namespace Million.HunterSubForm
private DevExpress.XtraEditors.SimpleButton simpleButton_resetData;
private DevExpress.XtraEditors.LabelControl labelControl_WinRateProfitRate;
private DevExpress.XtraEditors.SimpleButton simpleButton_WinRateProfitRate;
public DevExpress.XtraEditors.SimpleButton simpleButton_TestBoard;
public DevExpress.XtraTreeList.TreeList treeList_ResultData;
private DevExpress.XtraTreeList.Columns.TreeListColumn treeListColumn_PurchasedCount;
}
}

View File

@@ -13,6 +13,9 @@ using Million.FileDBManagement;
using Million.Data;
using DevExpress.XtraTreeList;
using Million.DbManagement;
using Million.IndicatorConditionSetup;
using Million.Manager;
using Million_Hunter.HunterSubForm;
namespace Million.HunterSubForm
{
@@ -26,6 +29,8 @@ namespace Million.HunterSubForm
// Analysis Data 를 Load 하는 경우 저장 변수
public SavedAnalysisData _savedAnalysisData;
public List<IndicatorCoditionSetup> _totalIndicator;
public ResultViewerForm(SavedResultData savedResultData)
{
InitializeComponent();
@@ -43,14 +48,21 @@ namespace Million.HunterSubForm
dateEdit_StartDateTime.DateTime = _savedResultData.StartDateTime.Date;
dateEdit_EndDateTime.DateTime = _savedResultData.EndDateTime.Date;
dateEdit_SavedDateTime.DateTime = _savedResultData.SavedDateTime.Date;
textEdit_BuyRegularExpression.Text = _savedResultData.BuyRegularExpression;
textEdit_SellRegularExpression.Text = _savedResultData.SellRegularExpression;
textEdit_SellRegularExpression.Text = _savedResultData.BuyRegularExpression;
textEdit_BuyRegularExpression.Text = _savedResultData.SellRegularExpression;
// Buy/Sell 리스트에 데이터 추가
treeList_BuySetupList.DataSource = _savedResultData.BuySetupList;
treeList_SellSetupList.DataSource = _savedResultData.SellSetupList;
treeList_BuySetupList.RefreshDataSource();
var buyIndicatorList = IndicatorSetupManager.InitDataSetup(_savedResultData.BuySetupList);
var sellIndicatorList = IndicatorSetupManager.InitDataSetup(_savedResultData.SellSetupList);
_totalIndicator = new List<IndicatorCoditionSetup>();
_totalIndicator.AddRange(buyIndicatorList);
_totalIndicator.AddRange(sellIndicatorList);
if (_analysisDatas != null)
{
// 메모리 헤제
@@ -80,10 +92,33 @@ namespace Million.HunterSubForm
_analysisDatas.Add(analysisData);
}
var evaeragePurchasedCount = 0;
// 보유한 종목 수 계산
foreach (var item in _analysisDatas)
{
/**
* 사는 시점에 갖고 있는 Count 수로 정정
*/
var count = _analysisDatas.Count(t => t.StartDate <= item.StartDate && t.EndDate >= item.StartDate && t != item);
// Ts <= Os <= Te
// Ts <= Oe <= Te
//var count = _analysisDatas.Count(target => (target.StartDate <= item.StartDate && target.EndDate >= item.StartDate) ||
//(target.StartDate <= item.EndDate && target.EndDate >= item.EndDate)
//);
item.PurchasedCount = count;
evaeragePurchasedCount += count;
}
evaeragePurchasedCount /= _analysisDatas.Count();
winRate = winRate * 100 / _analysisDatas.Count();
labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}",
double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), _analysisDatas.Count());
labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2} 평균 보유 수 : {3}" ,
double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), _analysisDatas.Count(), evaeragePurchasedCount);
treeList_ResultData.DataSource = _analysisDatas;
treeList_ResultData.RefreshDataSource();
@@ -93,7 +128,8 @@ namespace Million.HunterSubForm
private void simpleButton_SavaAnalysisData_Click(object sender, EventArgs e)
{
// 결과 반영 체크 && Filter 된 노드만 리스트로 모음
var nodeList = treeList_ResultData.FindNodes(item => item.Visible == true && Convert.ToBoolean(item["Inclusion"]) == true);
//var nodeList = treeList_ResultData.FindNodes(item => item.Visible == true && Convert.ToBoolean(item["Inclusion"]) == true);
var nodeList = treeList_ResultData.FindNodes(item => item.Visible == true);
// 저장할 데이터 리스트
var saveDataList = new List<AnalysisData>();
@@ -118,6 +154,9 @@ namespace Million.HunterSubForm
profitRate += data.EarningRate;
saveDataList.Add(data);
// 비고 저장
//data.Description =
}
winRate = winRate * 100 / nodeList.Count();
@@ -138,7 +177,7 @@ namespace Million.HunterSubForm
// 저장 하기
if (DBConnection.QueryInsertExcuter_SavedAnalysisData(savedAnalysisData, _savedResultData))
if (DBConnection.QueryInsertExecuter_SavedAnalysisData(savedAnalysisData, _savedResultData))
{
MessageBox.Show("데이터 저장 성공");
textEdit_Description.Text = "";
@@ -158,9 +197,11 @@ namespace Million.HunterSubForm
// 정상으로 데이터를 로드 하면
if(_savedAnalysisData != null)
{
treeList_ResultData.Nodes.Clear();
treeList_ResultData.DataSource = _savedAnalysisData.AnalysisDataList;
treeList_ResultData.RefreshDataSource();
labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}",
double.Parse(_savedAnalysisData.FirstWinRate.ToString()), double.Parse(_savedAnalysisData.FirstProfitRate.ToString()),
_savedAnalysisData.AnalysisDataList.Count);
@@ -185,9 +226,10 @@ namespace Million.HunterSubForm
if (hitInfo.HitInfoType != HitInfoType.Cell) return;
var selectedResultData = (AnalysisData)treeList.GetDataRecordByNode(hitInfo.Node);
var selectedAnalysisData = (AnalysisData)treeList.GetDataRecordByNode(hitInfo.Node);
Million.SubForm.ChartViewerForm chartViewerForm = new Million.SubForm.ChartViewerForm();
Million.SubForm.ChartViewerForm chartViewerForm = new Million.SubForm.ChartViewerForm(selectedAnalysisData,
_totalIndicator);
chartViewerForm.Visible = true;
}
@@ -200,7 +242,7 @@ namespace Million.HunterSubForm
/// <summary>
/// 승률 및 수익률 계산 함수
/// </summary>
private void CalcurateProfitAndWinRate()
public void CalcurateProfitAndWinRate()
{
// 승률 수익률 계산하기
// 결과 반영 체크 && Filter 된 노드만 리스트로 모음
@@ -209,6 +251,8 @@ namespace Million.HunterSubForm
double winRate = 0;
// 평균 수익률 계산하기
double profitRate = 0;
// 종목 보유 수
var evaeragePurchasedCount = 0;
// 값이 있으면 저장
if (nodeList != null && nodeList.Count() > 0)
@@ -223,18 +267,51 @@ namespace Million.HunterSubForm
// 수익률 계산하기
profitRate += data.EarningRate;
// 종목 보유 수 계산하기
// Ts <= Os <= Te
// Ts <= Oe <= Te
var count = nodeList.Count(target => (Convert.ToDateTime(target["StartDate"]) <= data.StartDate && Convert.ToDateTime(target["EndDate"]) >= data.StartDate) ||
(Convert.ToDateTime(target["StartDate"]) <= data.EndDate && Convert.ToDateTime(target["EndDate"]) >= data.EndDate)
);
evaeragePurchasedCount += count;
data.PurchasedCount = count;
}
winRate = winRate * 100 / nodeList.Count();
evaeragePurchasedCount /= nodeList.Count();
}
labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}",
double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), _analysisDatas.Count());
labelControl_WinRateProfitRate.Text = string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2} 평균 보유 수 : {3}",
double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), nodeList.Count(), evaeragePurchasedCount);
}
private void treeList_ResultData_SelectionChanged(object sender, EventArgs e)
private void treeList_ResultData_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Space:
var selections = treeList_ResultData.Selection;
foreach (var item in selections)
{
item["Inclusion"] = !Convert.ToBoolean(item["Inclusion"]);
}
break;
}
}
/// <summary>
/// 테스트보드 창 열기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_TestBoard_Click(object sender, EventArgs e)
{
// 테스트 보드 창 만들기
TestBoardForm testBoard = new TestBoardForm(this);
testBoard.Show();
}
}
}

View File

@@ -0,0 +1,557 @@
namespace Million_Hunter.HunterSubForm
{
partial class TestBoardForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.simpleButton_FullInsertCandle = new DevExpress.XtraEditors.SimpleButton();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.checkEdit_4시간_8시간구름떼위_양봉 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_4시간_8시간구름떼위 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_시가가볼린저401보다작음 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_시가구름떼위에서시작 = new DevExpress.XtraEditors.CheckEdit();
this.textEdit_종가시간판매 = new DevExpress.XtraEditors.TextEdit();
this.checkEdit_종가시간판매 = new DevExpress.XtraEditors.CheckEdit();
this.textEdit1 = new DevExpress.XtraEditors.TextEdit();
this.textEdit_종목보유수별수익률계산 = new DevExpress.XtraEditors.TextEdit();
this.checkEdit1 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_종목보유수별수익률계산 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_구름떼상한선하락시판매 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_구매이전봉볼린저40_1이하 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_이전봉40_2볼린저이하 = new DevExpress.XtraEditors.CheckEdit();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.simpleButton_Reset = new DevExpress.XtraEditors.SimpleButton();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.simpleButton_찬 = new DevExpress.XtraEditors.SimpleButton();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.checkEdit_1H = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_4H = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_8H = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_12H = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_1D = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_15M = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_10M = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_5M = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_1M = new DevExpress.XtraEditors.CheckEdit();
this.comboBoxEdit_defaultTime = new DevExpress.XtraEditors.ComboBoxEdit();
this.checkEdit_구름떼돌파몇봉이내 = new DevExpress.XtraEditors.CheckEdit();
this.textEdit_구름떼돌파몇봉이내 = new DevExpress.XtraEditors.TextEdit();
this.checkEdit_시가볼린저40_1아래 = new DevExpress.XtraEditors.CheckEdit();
this.checkEdit_시가구름떼위 = new DevExpress.XtraEditors.CheckEdit();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_4시간_8시간구름떼위_양봉.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_4시간_8시간구름떼위.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가가볼린저401보다작음.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가구름떼위에서시작.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit_종가시간판매.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_종가시간판매.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit_종목보유수별수익률계산.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_종목보유수별수익률계산.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼상한선하락시판매.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매이전봉볼린저40_1이하.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_이전봉40_2볼린저이하.Properties)).BeginInit();
this.groupBox3.SuspendLayout();
this.groupBox4.SuspendLayout();
this.groupBox5.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_1H.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_4H.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_8H.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_12H.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_1D.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_15M.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_10M.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_5M.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_1M.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_defaultTime.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼돌파몇봉이내.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit_구름떼돌파몇봉이내.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가볼린저40_1아래.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가구름떼위.Properties)).BeginInit();
this.SuspendLayout();
//
// simpleButton_FullInsertCandle
//
this.simpleButton_FullInsertCandle.Appearance.ForeColor = System.Drawing.Color.Teal;
this.simpleButton_FullInsertCandle.Appearance.Options.UseForeColor = true;
this.simpleButton_FullInsertCandle.Location = new System.Drawing.Point(6, 21);
this.simpleButton_FullInsertCandle.Name = "simpleButton_FullInsertCandle";
this.simpleButton_FullInsertCandle.Size = new System.Drawing.Size(121, 32);
this.simpleButton_FullInsertCandle.TabIndex = 1;
this.simpleButton_FullInsertCandle.Text = "시간봉 다 채우기";
this.simpleButton_FullInsertCandle.Click += new System.EventHandler(this.simpleButton_FullInsertCandle_Click);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.comboBoxEdit_defaultTime);
this.groupBox1.Controls.Add(this.checkEdit_15M);
this.groupBox1.Controls.Add(this.checkEdit_10M);
this.groupBox1.Controls.Add(this.checkEdit_5M);
this.groupBox1.Controls.Add(this.checkEdit_1M);
this.groupBox1.Controls.Add(this.simpleButton_FullInsertCandle);
this.groupBox1.Controls.Add(this.checkEdit_1D);
this.groupBox1.Controls.Add(this.checkEdit_12H);
this.groupBox1.Controls.Add(this.checkEdit_8H);
this.groupBox1.Controls.Add(this.checkEdit_4H);
this.groupBox1.Controls.Add(this.checkEdit_1H);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(255, 126);
this.groupBox1.TabIndex = 2;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "데이터 채우기";
//
// groupBox2
//
this.groupBox2.Controls.Add(this.checkEdit_시가구름떼위);
this.groupBox2.Controls.Add(this.checkEdit_시가볼린저40_1아래);
this.groupBox2.Controls.Add(this.textEdit_구름떼돌파몇봉이내);
this.groupBox2.Controls.Add(this.checkEdit_구름떼돌파몇봉이내);
this.groupBox2.Controls.Add(this.groupBox5);
this.groupBox2.Controls.Add(this.groupBox4);
this.groupBox2.Controls.Add(this.checkEdit_시가가볼린저401보다작음);
this.groupBox2.Controls.Add(this.checkEdit_시가구름떼위에서시작);
this.groupBox2.Controls.Add(this.textEdit1);
this.groupBox2.Controls.Add(this.textEdit_종목보유수별수익률계산);
this.groupBox2.Controls.Add(this.checkEdit1);
this.groupBox2.Controls.Add(this.checkEdit_종목보유수별수익률계산);
this.groupBox2.Controls.Add(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매);
this.groupBox2.Controls.Add(this.checkEdit_구름떼상한선하락시판매);
this.groupBox2.Controls.Add(this.checkEdit_구매이전봉볼린저40_1이하);
this.groupBox2.Controls.Add(this.checkEdit_이전봉40_2볼린저이하);
this.groupBox2.Location = new System.Drawing.Point(12, 162);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(1006, 230);
this.groupBox2.TabIndex = 3;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "지표";
//
// checkEdit_4시간_8시간구름떼위_양봉
//
this.checkEdit_4시간_8시간구름떼위_양봉.Location = new System.Drawing.Point(6, 46);
this.checkEdit_4시간_8시간구름떼위_양봉.Name = "checkEdit_4시간_8시간구름떼위_양봉";
this.checkEdit_4시간_8시간구름떼위_양봉.Properties.Caption = "4시간, 8시간 구름떼위 양봉 (1시간 기준)";
this.checkEdit_4시간_8시간구름떼위_양봉.Size = new System.Drawing.Size(221, 19);
this.checkEdit_4시간_8시간구름떼위_양봉.TabIndex = 9;
this.checkEdit_4시간_8시간구름떼위_양봉.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_4시간_8시간구름떼위
//
this.checkEdit_4시간_8시간구름떼위.Location = new System.Drawing.Point(6, 21);
this.checkEdit_4시간_8시간구름떼위.Name = "checkEdit_4시간_8시간구름떼위";
this.checkEdit_4시간_8시간구름떼위.Properties.Caption = "4시간, 8시간구름떼위 (1시간 기준)";
this.checkEdit_4시간_8시간구름떼위.Size = new System.Drawing.Size(195, 19);
this.checkEdit_4시간_8시간구름떼위.TabIndex = 9;
this.checkEdit_4시간_8시간구름떼위.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_시가가볼린저401보다작음
//
this.checkEdit_시가가볼린저401보다작음.Location = new System.Drawing.Point(164, 97);
this.checkEdit_시가가볼린저401보다작음.Name = "checkEdit_시가가볼린저401보다작음";
this.checkEdit_시가가볼린저401보다작음.Properties.Caption = "시가가 볼린저 40 1 보다 작음";
this.checkEdit_시가가볼린저401보다작음.Size = new System.Drawing.Size(165, 19);
this.checkEdit_시가가볼린저401보다작음.TabIndex = 8;
this.checkEdit_시가가볼린저401보다작음.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_시가구름떼위에서시작
//
this.checkEdit_시가구름떼위에서시작.Location = new System.Drawing.Point(19, 97);
this.checkEdit_시가구름떼위에서시작.Name = "checkEdit_시가구름떼위에서시작";
this.checkEdit_시가구름떼위에서시작.Properties.Caption = "시가 구름떼 위에서 시작";
this.checkEdit_시가구름떼위에서시작.Size = new System.Drawing.Size(150, 19);
this.checkEdit_시가구름떼위에서시작.TabIndex = 7;
this.checkEdit_시가구름떼위에서시작.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// textEdit_종가시간판매
//
this.textEdit_종가시간판매.EditValue = "0";
this.textEdit_종가시간판매.Location = new System.Drawing.Point(108, 21);
this.textEdit_종가시간판매.Name = "textEdit_종가시간판매";
this.textEdit_종가시간판매.Properties.Mask.EditMask = "d";
this.textEdit_종가시간판매.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
this.textEdit_종가시간판매.Size = new System.Drawing.Size(42, 20);
this.textEdit_종가시간판매.TabIndex = 6;
//
// checkEdit_종가시간판매
//
this.checkEdit_종가시간판매.Location = new System.Drawing.Point(6, 21);
this.checkEdit_종가시간판매.Name = "checkEdit_종가시간판매";
this.checkEdit_종가시간판매.Properties.Caption = "종가(시간)판매";
this.checkEdit_종가시간판매.Size = new System.Drawing.Size(102, 19);
this.checkEdit_종가시간판매.TabIndex = 5;
this.checkEdit_종가시간판매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// textEdit1
//
this.textEdit1.EditValue = "1";
this.textEdit1.Location = new System.Drawing.Point(298, 72);
this.textEdit1.Name = "textEdit1";
this.textEdit1.Size = new System.Drawing.Size(42, 20);
this.textEdit1.TabIndex = 4;
//
// textEdit_종목보유수별수익률계산
//
this.textEdit_종목보유수별수익률계산.EditValue = "1";
this.textEdit_종목보유수별수익률계산.Location = new System.Drawing.Point(175, 72);
this.textEdit_종목보유수별수익률계산.Name = "textEdit_종목보유수별수익률계산";
this.textEdit_종목보유수별수익률계산.Size = new System.Drawing.Size(42, 20);
this.textEdit_종목보유수별수익률계산.TabIndex = 4;
//
// checkEdit1
//
this.checkEdit1.Location = new System.Drawing.Point(233, 73);
this.checkEdit1.Name = "checkEdit1";
this.checkEdit1.Properties.Caption = "거래대금";
this.checkEdit1.Size = new System.Drawing.Size(150, 19);
this.checkEdit1.TabIndex = 3;
this.checkEdit1.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_종목보유수별수익률계산
//
this.checkEdit_종목보유수별수익률계산.Location = new System.Drawing.Point(19, 72);
this.checkEdit_종목보유수별수익률계산.Name = "checkEdit_종목보유수별수익률계산";
this.checkEdit_종목보유수별수익률계산.Properties.Caption = "종목 보유수 별 수익률 계산";
this.checkEdit_종목보유수별수익률계산.Size = new System.Drawing.Size(150, 19);
this.checkEdit_종목보유수별수익률계산.TabIndex = 3;
this.checkEdit_종목보유수별수익률계산.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매
//
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Location = new System.Drawing.Point(19, 47);
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Name = "checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매";
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties.Caption = "구매 전봉 기준 가중이동평균 5봉이 40봉 크로스 이후 구매";
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Size = new System.Drawing.Size(310, 19);
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.TabIndex = 3;
this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_구름떼상한선하락시판매
//
this.checkEdit_구름떼상한선하락시판매.Location = new System.Drawing.Point(379, 22);
this.checkEdit_구름떼상한선하락시판매.Name = "checkEdit_구름떼상한선하락시판매";
this.checkEdit_구름떼상한선하락시판매.Properties.Caption = "구름떼 상한선 하락시 판매 (1%)";
this.checkEdit_구름떼상한선하락시판매.Size = new System.Drawing.Size(179, 19);
this.checkEdit_구름떼상한선하락시판매.TabIndex = 2;
this.checkEdit_구름떼상한선하락시판매.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_구매이전봉볼린저40_1이하
//
this.checkEdit_구매이전봉볼린저40_1이하.Location = new System.Drawing.Point(204, 22);
this.checkEdit_구매이전봉볼린저40_1이하.Name = "checkEdit_구매이전봉볼린저40_1이하";
this.checkEdit_구매이전봉볼린저40_1이하.Properties.Caption = "구매 이전 봉 볼린저 40_1 이하";
this.checkEdit_구매이전봉볼린저40_1이하.Size = new System.Drawing.Size(179, 19);
this.checkEdit_구매이전봉볼린저40_1이하.TabIndex = 1;
this.checkEdit_구매이전봉볼린저40_1이하.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_이전봉40_2볼린저이하
//
this.checkEdit_이전봉40_2볼린저이하.Location = new System.Drawing.Point(19, 22);
this.checkEdit_이전봉40_2볼린저이하.Name = "checkEdit_이전봉40_2볼린저이하";
this.checkEdit_이전봉40_2볼린저이하.Properties.Caption = "구매 이전 봉 40_2 볼린저 이하";
this.checkEdit_이전봉40_2볼린저이하.Size = new System.Drawing.Size(179, 19);
this.checkEdit_이전봉40_2볼린저이하.TabIndex = 0;
this.checkEdit_이전봉40_2볼린저이하.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// groupBox3
//
this.groupBox3.Controls.Add(this.simpleButton_Reset);
this.groupBox3.Location = new System.Drawing.Point(373, 12);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(154, 63);
this.groupBox3.TabIndex = 4;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "관리";
//
// simpleButton_Reset
//
this.simpleButton_Reset.Location = new System.Drawing.Point(6, 21);
this.simpleButton_Reset.Name = "simpleButton_Reset";
this.simpleButton_Reset.Size = new System.Drawing.Size(109, 32);
this.simpleButton_Reset.TabIndex = 0;
this.simpleButton_Reset.Text = "Reset";
this.simpleButton_Reset.Click += new System.EventHandler(this.simpleButton_Reset_Click);
//
// progressBar1
//
this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.progressBar1.Location = new System.Drawing.Point(0, 395);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(1030, 23);
this.progressBar1.TabIndex = 5;
//
// simpleButton_찬
//
this.simpleButton_찬.Location = new System.Drawing.Point(914, 23);
this.simpleButton_찬.Name = "simpleButton_찬";
this.simpleButton_찬.Size = new System.Drawing.Size(104, 32);
this.simpleButton_찬.TabIndex = 4;
this.simpleButton_찬.Text = "찬테스트";
this.simpleButton_찬.Click += new System.EventHandler(this.simpleButton_찬_Click);
//
// groupBox4
//
this.groupBox4.Controls.Add(this.checkEdit_4시간_8시간구름떼위);
this.groupBox4.Controls.Add(this.checkEdit_4시간_8시간구름떼위_양봉);
this.groupBox4.Location = new System.Drawing.Point(379, 49);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(444, 83);
this.groupBox4.TabIndex = 10;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "상위 시간 구름떼 / 볼린저 (시가 기준)";
//
// groupBox5
//
this.groupBox5.Controls.Add(this.checkEdit_종가시간판매);
this.groupBox5.Controls.Add(this.textEdit_종가시간판매);
this.groupBox5.Location = new System.Drawing.Point(19, 123);
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size(335, 100);
this.groupBox5.TabIndex = 11;
this.groupBox5.TabStop = false;
this.groupBox5.Text = "데이터 변경 (봉 채우기 재필요)";
//
// checkEdit_1H
//
this.checkEdit_1H.Location = new System.Drawing.Point(6, 76);
this.checkEdit_1H.Name = "checkEdit_1H";
this.checkEdit_1H.Properties.Caption = "1H";
this.checkEdit_1H.Size = new System.Drawing.Size(43, 19);
this.checkEdit_1H.TabIndex = 9;
this.checkEdit_1H.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_4H
//
this.checkEdit_4H.Location = new System.Drawing.Point(55, 76);
this.checkEdit_4H.Name = "checkEdit_4H";
this.checkEdit_4H.Properties.Caption = "4H";
this.checkEdit_4H.Size = new System.Drawing.Size(43, 19);
this.checkEdit_4H.TabIndex = 9;
this.checkEdit_4H.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_8H
//
this.checkEdit_8H.Location = new System.Drawing.Point(104, 76);
this.checkEdit_8H.Name = "checkEdit_8H";
this.checkEdit_8H.Properties.Caption = "8H";
this.checkEdit_8H.Size = new System.Drawing.Size(43, 19);
this.checkEdit_8H.TabIndex = 9;
this.checkEdit_8H.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_12H
//
this.checkEdit_12H.Location = new System.Drawing.Point(155, 76);
this.checkEdit_12H.Name = "checkEdit_12H";
this.checkEdit_12H.Properties.Caption = "12H";
this.checkEdit_12H.Size = new System.Drawing.Size(43, 19);
this.checkEdit_12H.TabIndex = 9;
this.checkEdit_12H.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_1D
//
this.checkEdit_1D.Location = new System.Drawing.Point(6, 99);
this.checkEdit_1D.Name = "checkEdit_1D";
this.checkEdit_1D.Properties.Caption = "1D";
this.checkEdit_1D.Size = new System.Drawing.Size(43, 19);
this.checkEdit_1D.TabIndex = 9;
this.checkEdit_1D.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_15M
//
this.checkEdit_15M.Location = new System.Drawing.Point(155, 54);
this.checkEdit_15M.Name = "checkEdit_15M";
this.checkEdit_15M.Properties.Caption = "15M";
this.checkEdit_15M.Size = new System.Drawing.Size(43, 19);
this.checkEdit_15M.TabIndex = 11;
//
// checkEdit_10M
//
this.checkEdit_10M.Location = new System.Drawing.Point(104, 54);
this.checkEdit_10M.Name = "checkEdit_10M";
this.checkEdit_10M.Properties.Caption = "10M";
this.checkEdit_10M.Size = new System.Drawing.Size(43, 19);
this.checkEdit_10M.TabIndex = 12;
//
// checkEdit_5M
//
this.checkEdit_5M.Location = new System.Drawing.Point(55, 54);
this.checkEdit_5M.Name = "checkEdit_5M";
this.checkEdit_5M.Properties.Caption = "5M";
this.checkEdit_5M.Size = new System.Drawing.Size(43, 19);
this.checkEdit_5M.TabIndex = 13;
//
// checkEdit_1M
//
this.checkEdit_1M.Location = new System.Drawing.Point(6, 54);
this.checkEdit_1M.Name = "checkEdit_1M";
this.checkEdit_1M.Properties.Caption = "1M";
this.checkEdit_1M.Size = new System.Drawing.Size(43, 19);
this.checkEdit_1M.TabIndex = 14;
//
// comboBoxEdit_defaultTime
//
this.comboBoxEdit_defaultTime.Location = new System.Drawing.Point(133, 28);
this.comboBoxEdit_defaultTime.Name = "comboBoxEdit_defaultTime";
this.comboBoxEdit_defaultTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
this.comboBoxEdit_defaultTime.Size = new System.Drawing.Size(100, 20);
this.comboBoxEdit_defaultTime.TabIndex = 15;
this.comboBoxEdit_defaultTime.SelectedIndexChanged += new System.EventHandler(this.comboBoxEdit_defaultTime_SelectedIndexChanged);
//
// checkEdit_구름떼돌파몇봉이내
//
this.checkEdit_구름떼돌파몇봉이내.Location = new System.Drawing.Point(385, 138);
this.checkEdit_구름떼돌파몇봉이내.Name = "checkEdit_구름떼돌파몇봉이내";
this.checkEdit_구름떼돌파몇봉이내.Properties.Caption = "구름떼 돌파 후 몇봉 이내";
this.checkEdit_구름떼돌파몇봉이내.Size = new System.Drawing.Size(141, 19);
this.checkEdit_구름떼돌파몇봉이내.TabIndex = 12;
this.checkEdit_구름떼돌파몇봉이내.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// textEdit_구름떼돌파몇봉이내
//
this.textEdit_구름떼돌파몇봉이내.EditValue = "0";
this.textEdit_구름떼돌파몇봉이내.Location = new System.Drawing.Point(532, 137);
this.textEdit_구름떼돌파몇봉이내.Name = "textEdit_구름떼돌파몇봉이내";
this.textEdit_구름떼돌파몇봉이내.Properties.Mask.EditMask = "d";
this.textEdit_구름떼돌파몇봉이내.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
this.textEdit_구름떼돌파몇봉이내.Size = new System.Drawing.Size(42, 20);
this.textEdit_구름떼돌파몇봉이내.TabIndex = 13;
//
// checkEdit_시가볼린저40_1아래
//
this.checkEdit_시가볼린저40_1아래.Location = new System.Drawing.Point(385, 163);
this.checkEdit_시가볼린저40_1아래.Name = "checkEdit_시가볼린저40_1아래";
this.checkEdit_시가볼린저40_1아래.Properties.Caption = "시가 볼린저40 1 아래";
this.checkEdit_시가볼린저40_1아래.Size = new System.Drawing.Size(141, 19);
this.checkEdit_시가볼린저40_1아래.TabIndex = 14;
this.checkEdit_시가볼린저40_1아래.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// checkEdit_시가구름떼위
//
this.checkEdit_시가구름떼위.Location = new System.Drawing.Point(385, 188);
this.checkEdit_시가구름떼위.Name = "checkEdit_시가구름떼위";
this.checkEdit_시가구름떼위.Properties.Caption = "시가 구름 떼 위";
this.checkEdit_시가구름떼위.Size = new System.Drawing.Size(141, 19);
this.checkEdit_시가구름떼위.TabIndex = 14;
this.checkEdit_시가구름떼위.CheckedChanged += new System.EventHandler(this.checkEdit_common_CheckedChanged);
//
// TestBoardForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1030, 418);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.simpleButton_찬);
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "TestBoardForm";
this.Text = "TestBoard";
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.checkEdit_4시간_8시간구름떼위_양봉.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_4시간_8시간구름떼위.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가가볼린저401보다작음.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가구름떼위에서시작.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit_종가시간판매.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_종가시간판매.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit_종목보유수별수익률계산.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_종목보유수별수익률계산.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼상한선하락시판매.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구매이전봉볼린저40_1이하.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_이전봉40_2볼린저이하.Properties)).EndInit();
this.groupBox3.ResumeLayout(false);
this.groupBox4.ResumeLayout(false);
this.groupBox5.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.checkEdit_1H.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_4H.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_8H.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_12H.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_1D.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_15M.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_10M.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_5M.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_1M.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit_defaultTime.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_구름떼돌파몇봉이내.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.textEdit_구름떼돌파몇봉이내.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가볼린저40_1아래.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.checkEdit_시가구름떼위.Properties)).EndInit();
this.ResumeLayout(false);
}
#endregion
private DevExpress.XtraEditors.SimpleButton simpleButton_FullInsertCandle;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.CheckedListBox checkedListBox_Indicator;
private DevExpress.XtraEditors.SimpleButton simpleButton_찬;
private System.Windows.Forms.ProgressBar progressBar1;
private DevExpress.XtraEditors.CheckEdit checkEdit_이전봉40_2볼린저이하;
private System.Windows.Forms.GroupBox groupBox3;
private DevExpress.XtraEditors.SimpleButton simpleButton_Reset;
private DevExpress.XtraEditors.CheckEdit checkEdit_구매이전봉볼린저40_1이하;
private DevExpress.XtraEditors.CheckEdit checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매;
private DevExpress.XtraEditors.CheckEdit checkEdit_구름떼상한선하락시판매;
private DevExpress.XtraEditors.TextEdit textEdit_종목보유수별수익률계산;
private DevExpress.XtraEditors.CheckEdit checkEdit_종목보유수별수익률계산;
private DevExpress.XtraEditors.TextEdit textEdit_종가시간판매;
private DevExpress.XtraEditors.CheckEdit checkEdit_종가시간판매;
private DevExpress.XtraEditors.TextEdit textEdit1;
private DevExpress.XtraEditors.CheckEdit checkEdit1;
private DevExpress.XtraEditors.CheckEdit checkEdit_시가구름떼위에서시작;
private DevExpress.XtraEditors.CheckEdit checkEdit_시가가볼린저401보다작음;
private DevExpress.XtraEditors.CheckEdit checkEdit_4시간_8시간구름떼위_양봉;
private DevExpress.XtraEditors.CheckEdit checkEdit_4시간_8시간구름떼위;
private System.Windows.Forms.GroupBox groupBox5;
private System.Windows.Forms.GroupBox groupBox4;
private DevExpress.XtraEditors.CheckEdit checkEdit_15M;
private DevExpress.XtraEditors.CheckEdit checkEdit_10M;
private DevExpress.XtraEditors.CheckEdit checkEdit_5M;
private DevExpress.XtraEditors.CheckEdit checkEdit_1M;
private DevExpress.XtraEditors.CheckEdit checkEdit_1D;
private DevExpress.XtraEditors.CheckEdit checkEdit_12H;
private DevExpress.XtraEditors.CheckEdit checkEdit_8H;
private DevExpress.XtraEditors.CheckEdit checkEdit_4H;
private DevExpress.XtraEditors.CheckEdit checkEdit_1H;
private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit_defaultTime;
private DevExpress.XtraEditors.CheckEdit checkEdit_구름떼돌파몇봉이내;
private DevExpress.XtraEditors.TextEdit textEdit_구름떼돌파몇봉이내;
private DevExpress.XtraEditors.CheckEdit checkEdit_시가구름떼위;
private DevExpress.XtraEditors.CheckEdit checkEdit_시가볼린저40_1아래;
}
}

View File

@@ -0,0 +1,867 @@
using DevExpress.XtraEditors;
using Million;
using Million.Data;
using Million.DbManagement;
using Million.HunterSubForm;
using Million.IndicatorConditionSetup;
using Million.Manager;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Million_Hunter.HunterSubForm
{
public partial class TestBoardForm : DevExpress.XtraEditors.XtraForm
{
ResultViewerForm parentForm = null;
List<AnalysisData> analysisDatas = null;
CommonProperty.MCandleTimeType MCandleTimeType;
bool ignoreChangedfilter = false;
public TestBoardForm(ResultViewerForm resultViewerForm)
{
InitializeComponent();
parentForm = resultViewerForm;
analysisDatas = parentForm._analysisDatas;
// 시간 단위 가져오기
var candleTimeTypeList = Enum.GetNames(enumType: typeof(CommonProperty.MCandleTimeType));
comboBoxEdit_defaultTime.Properties.Items.AddRange(candleTimeTypeList);
comboBoxEdit_defaultTime.SelectedText = "H1";
}
/// <summary>
/// 한시간 봉 채우기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_FullInsertCandle_Click(object sender, EventArgs e)
{
// 시간 단위 설정 (AnalysisData에 추가하기)
// 조건식에 포함되는 시간 단위 가져오기 (IndicatorConditionSetup 을 여기에서 밖에 쓸 때가 없음)
var candleTypes = parentForm._totalIndicator.Select(t => t.MCandleTimeType).Distinct().ToList();
#region 기본 Indicator 데이터 생성하기
// Bol(40,1), Bol(40,2), Ichimoku(기본)
var _chartIndicatorCoditionSetups = new List<IndicatorCoditionSetup>();
_chartIndicatorCoditionSetups.Add(new BolingerConditionSetup()
{
IndicatorType = CommonProperty.IndicatorType.볼린저밴드,
Period = 40,
Squared = 1,
Description = "bol40_1",
MCandleTimeType = candleTypes.First()
}); ;
_chartIndicatorCoditionSetups.Add(new BolingerConditionSetup()
{
IndicatorType = CommonProperty.IndicatorType.볼린저밴드,
Period = 40,
Squared = 2,
Description = "bol40_2",
MCandleTimeType = candleTypes.First()
});
_chartIndicatorCoditionSetups.Add(new IchimokuConditionSetup()
{
IndicatorType = CommonProperty.IndicatorType.일목균형표,
ConversionPeriod = 9,
BaselinePeriod = 26,
LaggingSpan2Period = 52,
Displacement = 26,
Description = "ich",
MCandleTimeType = candleTypes.First()
});
#endregion
/*
Enum.TryParse(comboBoxEdit_defaultTime.SelectedItem.ToString(),
out CommonProperty.MCandleTimeType mCandleTimeType);
*/
MCandleTimeType = CommonProperty.MCandleTimeType.H1;
//차트 Date Time 설정하기
var StartDateInterval = 80 * 30;
var EndDateInterval = 100;
foreach(var analysisData in parentForm._analysisDatas)
{
var startDate = analysisData.StartDate;
var endDate = analysisData.EndDate;
var chartStartDate = startDate;
var chartEndDate = endDate;
// Default : 1 시간
// 추가 : 4, 8,
switch (candleTypes.First())
{
case CommonProperty.MCandleTimeType.H1:
chartStartDate = startDate - new TimeSpan(0, StartDateInterval, 0, 0);
chartEndDate = startDate + new TimeSpan(0, EndDateInterval, 0, 0);
// annotation 추가 시 Datetime 비교를 위해 00분으로 변환
startDate = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd HH:00"));
endDate = Convert.ToDateTime(endDate.ToString("yyyy-MM-dd HH:00"));
break;
case CommonProperty.MCandleTimeType.H4:
chartStartDate = startDate - new TimeSpan(0, StartDateInterval * 4, 0, 0);
chartEndDate = startDate + new TimeSpan(0, EndDateInterval * 4, 0, 0);
startDate = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd HH:00"));
endDate = Convert.ToDateTime(endDate.ToString("yyyy-MM-dd HH:00"));
break;
case CommonProperty.MCandleTimeType.M1:
chartStartDate = startDate - new TimeSpan(0, 0, StartDateInterval, 0);
chartEndDate = startDate + new TimeSpan(0, 0, EndDateInterval, 0);
break;
case CommonProperty.MCandleTimeType.M10:
case CommonProperty.MCandleTimeType.M5:
case CommonProperty.MCandleTimeType.M3:
case CommonProperty.MCandleTimeType.M30:
case CommonProperty.MCandleTimeType.M15:
break;
case CommonProperty.MCandleTimeType.D1:
chartStartDate = startDate - new TimeSpan(StartDateInterval, 0, 0, 0);
chartEndDate = startDate + new TimeSpan(EndDateInterval, 0, 0, 0);
startDate = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd"));
endDate = Convert.ToDateTime(endDate.ToString("yyyy-MM-dd"));
break;
}
var dic = DataManager.GetStandardData(_chartIndicatorCoditionSetups, chartStartDate, chartEndDate, analysisData.OriginalSearchResult.MarketData
, _chartIndicatorCoditionSetups, true, candleTypes);
var dic_4 = DataManager.GetConvertCandleDataList(dic[CommonProperty.MCandleTimeType.H1], CommonProperty.MCandleTimeType.H4);
foreach (var setup in _chartIndicatorCoditionSetups)
{
setup.excute(dic_4);
}
var dic_8 = DataManager.GetConvertCandleDataList(dic[CommonProperty.MCandleTimeType.H1], CommonProperty.MCandleTimeType.H8);
foreach (var setup in _chartIndicatorCoditionSetups)
{
setup.excute(dic_8);
}
var dic_12 = DataManager.GetConvertCandleDataList(dic[CommonProperty.MCandleTimeType.H1], CommonProperty.MCandleTimeType.H12);
foreach (var setup in _chartIndicatorCoditionSetups)
{
setup.excute(dic_12);
}
var dic_1d = DataManager.GetConvertCandleDataList(dic[CommonProperty.MCandleTimeType.H1], CommonProperty.MCandleTimeType.D1);
foreach (var setup in _chartIndicatorCoditionSetups)
{
setup.excute(dic_1d);
}
dic.Add(CommonProperty.MCandleTimeType.H4, dic_4);
dic.Add(CommonProperty.MCandleTimeType.H8, dic_8);
dic.Add(CommonProperty.MCandleTimeType.H12, dic_12);
dic.Add(CommonProperty.MCandleTimeType.D1, dic_1d);
if (analysisData.CandleDatas != null)
{
analysisData.CandleDatas.Clear();
analysisData.CandleDatas = null;
}
analysisData.CandleDatas = dic;
}
MessageBox.Show("캔들 데이터 불러오기 완료");
}
/// <summary>
/// 데이터 초기화
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void simpleButton_Reset_Click(object sender, EventArgs e)
{
resetFilter();
ignoreChangedfilter = true;
checkEdit_구매이전봉볼린저40_1이하.Checked = false;
checkEdit_이전봉40_2볼린저이하.Checked = false;
ignoreChangedfilter = false;
parentForm.treeList_ResultData.RefreshDataSource();
parentForm.CalcurateProfitAndWinRate();
}
public void resetFilter()
{
// 구매 시점 이전 봉 40 1 볼린저 값 이하
foreach (var analysisData in parentForm._analysisDatas)
{
analysisData.Inclusion = true;
analysisData.Description = "";
}
}
public void calcurateFilter()
{
// 필터 초기화
resetFilter();
// 이전봉40_2볼린저이하
if (checkEdit_이전봉40_2볼린저이하.Checked)
{
// 구매 시점 이전 봉 40 1 볼린저 값 이하
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = analysisData.StartDate;
var endDate = analysisData.EndDate;
if (checkEdit_이전봉40_2볼린저이하.Checked)
{
var 구매이전봉 = startDate;
//차트 Date Time 설정하기
var StartDateInterval = -1;
구매이전봉 = changeDatetimeFormat(구매이전봉, StartDateInterval);
var candleData = analysisData.CandleDatas[MCandleTimeType].Find(item => item.DateTime == 구매이전봉);
// 시간대 캔들이 없으면 결과에서 제외
if (candleData == null)
{
analysisData.Description = "[오류:캔들없음]" + analysisData.Description;
analysisData.Inclusion = false;
continue;
}
var highValue = candleData.HighValue;
var bol402 = candleData.IndicatorDic["Bol402"]?.value;
if (bol402 != null)
{
// 제외된 조건인 아닌 경우
if (analysisData.Inclusion)
{
if (highValue < bol402)
{
analysisData.Inclusion = true;
analysisData.Description = '[' + checkEdit_이전봉40_2볼린저이하.Text + ']' + analysisData.Description;
}
else
analysisData.Inclusion = false;
}
}
}
}
}
// 이전봉40_1볼린저이하
if (checkEdit_구매이전봉볼린저40_1이하.Checked)
{
// 구매 시점 이전 봉 40 1 볼린저 값 이하
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = analysisData.StartDate;
var endDate = analysisData.EndDate;
if (checkEdit_구매이전봉볼린저40_1이하.Checked)
{
var 구매이전봉 = startDate;
//차트 Date Time 설정하기
var StartDateInterval = -1;
구매이전봉 = changeDatetimeFormat(구매이전봉, StartDateInterval);
var candleData = analysisData.CandleDatas[MCandleTimeType].Find(item => item.DateTime == 구매이전봉);
// 시간대 캔들이 없으면 결과에서 제외
if (candleData == null)
{
analysisData.Description = "[오류:캔들없음]" + analysisData.Description;
analysisData.Inclusion = false;
continue;
}
var highValue = candleData.HighValue;
var bol401 = candleData.IndicatorDic["Bol401"]?.value;
if (bol401 != null)
{
// 제외된 조건인 아닌 경우
if (analysisData.Inclusion)
{
if (highValue < bol401)
{
analysisData.Inclusion = true;
analysisData.Description = '[' + checkEdit_이전봉40_2볼린저이하.Text + ']' + analysisData.Description;
}
else
analysisData.Inclusion = false;
}
}
else
{
}
}
}
}
if (checkEdit_구름떼상한선하락시판매.Checked)
{
// 평균 승률 계산하기
double winRate = 0;
// 평균 수익률 계산하기
double profitRate = 0;
var count__ = 0;
var count_2 = 0;
var count_3 = 0;
foreach (var analysisData in parentForm._analysisDatas)
{
if (!analysisData.Inclusion) continue;
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var endDate = changeDatetimeFormat(analysisData.EndDate, 0);
var candleData = analysisData.CandleDatas.First().Value.Find(item => item.DateTime > startDate && item.DateTime < endDate &&
item.IndicatorDic["Ich2695226"]?.value != null && ((IchimokData)item.IndicatorDic["Ich2695226"]).GetOverValue() > item.LowValue);
if (candleData != null)
{
var endResut = changeDatetimeFormat(candleData.DateTime, 0);
var ichValue = ((IchimokData)candleData.IndicatorDic["Ich2695226"]).GetOverValue();
if (ichValue > analysisData.BuyValue)
{
analysisData.WinFlag = true;
}
else
{
analysisData.WinFlag = false;
}
analysisData.EarningRate = analysisData.EarningRate = (-100 + (ichValue / analysisData.BuyValue) * 100);
if (analysisData.EarningRate < -4)
{
}
}
}
var allCount = parentForm._analysisDatas.Count(item => item.Inclusion == true);
winRate = winRate * 100 / allCount;
MessageBox.Show(string.Format("승률 : {0:0.00} % 수익률 : {1:0.00} % 개수 : {2}",
double.Parse(winRate.ToString()), double.Parse(profitRate.ToString()), allCount.ToString()) );
}
if (checkEdit_구매전봉기준가중이동평균5봉이40봉크로스이후구매.Checked)
{
var Interval_5 = 5;
var Interval_40 = 40;
// 분모 구하기
var 분모5일 = 0;
var 분모40일 = 0;
for (int i = 1; i <= Interval_5; i++) 분모5일 += i;
for (int i=1; i<=Interval_40; i++) 분모40일 += i;
var ttt = parentForm._totalIndicator.First().MCandleTimeType;
foreach (var analysisData in parentForm._analysisDatas)
{
// 현재 시간 데이터 포함
var 구매이전봉_5일전거래시간 = changeDatetimeFormat(analysisData.StartDate, -Interval_5);
var 구매이전봉_40일전거래시간 = changeDatetimeFormat(analysisData.StartDate, -Interval_40);
var 구매이전봉_거래시간 = changeDatetimeFormat(analysisData.StartDate, -1);
var 가중이동평균5일 = 0.0;
var 가중이동평균40일 = 0.0;
int count_40 = Interval_40;
int count_5 = Interval_5;
var curDateTime = 구매이전봉_거래시간;
while (curDateTime >= 구매이전봉_40일전거래시간)
{
var candleData = analysisData.CandleDatas[MCandleTimeType].Find(item => item.DateTime == curDateTime);
var 거래량 = 0.0;
// 데이터가 없으면 거래량 0으로 사용
if (candleData == null) 거래량 = 0;
else 거래량 = Convert.ToDouble(candleData.MoneyVolume);
// 5일치 누적 및 계산이 끝났으면 그만 계산
if (curDateTime >= 구매이전봉_5일전거래시간)
{
가중이동평균5일 += count_5 * 거래량;
}
// 5일 계산
if (curDateTime == 구매이전봉_5일전거래시간)
{
가중이동평균5일 /= 분모5일;
// 5일 계산
거래량 = 0.0;
}
// 40일 누적
가중이동평균40일 += count_40 * 거래량;
// 40일 계산
if (curDateTime == 구매이전봉_40일전거래시간)
{
가중이동평균40일 /= 분모40일;
}
curDateTime = changeDatetimeFormat(curDateTime, -1);
count_40--;
count_5--;
}
// 제외된 조건인 아닌 경우 (만족 조건 중에서만 검색)
if (analysisData.Inclusion)
{
var result = false;
if (가중이동평균5일 > 가중이동평균40일)
{
result = true;
analysisData.Inclusion = true;
}
else
{
result = false;
analysisData.Inclusion = false;
}
analysisData.Description = string.Format("[{0},5일:{1:0.0},40일:{2:0.0}]",result, 가중이동평균5일, 가중이동평균40일);
}
}
}
if (checkEdit_종목보유수별수익률계산.Checked)
{
var coinCount = Convert.ToInt32(textEdit_종목보유수별수익률계산.Text);
//r Con
//inCount =
}
// 종가 판매
if (checkEdit_종가시간판매.Checked)
{
// 종가 판매 봉기준
var candleInterval = Convert.ToInt32(textEdit_종가시간판매.Text);
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var endDate = changeDatetimeFormat(analysisData.EndDate, 0);
var 종가판매기준시간 = changeDatetimeFormat(startDate, candleInterval);
if (analysisData.Inclusion)
{
if (changeDatetimeFormat(endDate, 0) > 종가판매기준시간)
{
var data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == 종가판매기준시간);
if(data == null)
{
var date = new DateTime();
date = 종가판매기준시간;
while (data == null)
{
date = changeDatetimeFormat(date, -1);
data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == date);
}
}
// 수익률 구하기
analysisData.EarningRate = (-100 + (data.EndValue / analysisData.BuyValue) * 100);
analysisData.WinFlag = analysisData.EarningRate > 0 ? true : false;
analysisData.SellValue = data.EndValue;
}
}
continue;
}
}
if(checkEdit_시가구름떼위에서시작.Checked)
{
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == startDate);
var maxich = Math.Max(((IchimokData)data.IndicatorDic["Ich2695226"]).value, ((IchimokData)data.IndicatorDic["Ich2695226"]).value2);
if (analysisData.Inclusion)
if (maxich >= data.StartValue) analysisData.Inclusion = false;
}
}
if (checkEdit_시가가볼린저401보다작음.Checked)
{
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == startDate);
if (analysisData.Inclusion)
if (data.IndicatorDic["Bol401"].value <= data.StartValue) analysisData.Inclusion = false;
}
}
if(checkEdit_4시간_8시간구름떼위.Checked)
{
foreach (var analysisData in parentForm._analysisDatas)
{
if (!analysisData.Inclusion) continue;
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var data = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H1].Find(item => item.DateTime == startDate);
var data4 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H4].Find(item => changeDatetimeFormat(startDate, -4) <= item.DateTime && item.DateTime <= startDate);
if (data4 == null)
{
var dateT4 = new DateTime();
dateT4 = startDate;
while (data4 == null)
{
data4 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H4].Find(item => changeDatetimeFormat(dateT4, -4) <= item.DateTime && item.DateTime <= dateT4);
dateT4 = changeDatetimeFormat(dateT4, -4);
}
}
var data8 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H8].Find(item => changeDatetimeFormat(startDate, -8) <= item.DateTime && item.DateTime <= startDate);
if (data8 == null)
{
var dateT8 = new DateTime();
dateT8 = startDate;
while (data8 == null)
{
data8 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H8].Find(item => changeDatetimeFormat(dateT8, -8) <= item.DateTime && item.DateTime <= dateT8);
dateT8 = changeDatetimeFormat(dateT8, -8);
}
}
var maxich = Math.Max(((IchimokData)data.IndicatorDic["Ich2695226"]).value, ((IchimokData)data.IndicatorDic["Ich2695226"]).value2);
var maxich4 = Math.Max(((IchimokData)data4.IndicatorDic["Ich2695226"]).value, ((IchimokData)data4.IndicatorDic["Ich2695226"]).value2);
var maxich8 = Math.Max(((IchimokData)data8.IndicatorDic["Ich2695226"]).value, ((IchimokData)data8.IndicatorDic["Ich2695226"]).value2);
if(analysisData.Inclusion)
if (maxich8 >= data8.StartValue || maxich4 >= data4.StartValue) analysisData.Inclusion = false;
}
}
if(checkEdit_4시간_8시간구름떼위_양봉.Checked)
{
foreach (var analysisData in parentForm._analysisDatas)
{
if (!analysisData.Inclusion) continue;
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var data = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H1].Find(item => item.DateTime == startDate);
var data4 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H4].Find(item => changeDatetimeFormat(startDate, -4) <= item.DateTime && item.DateTime <= startDate);
if (data4 == null)
{
var dateT4 = new DateTime();
dateT4 = startDate;
while (data4 == null)
{
data4 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H4].Find(item => changeDatetimeFormat(dateT4, -4) <= item.DateTime && item.DateTime <= dateT4);
dateT4 = changeDatetimeFormat(dateT4, -4);
}
}
var data8 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H8].Find(item => changeDatetimeFormat(startDate, -8) <= item.DateTime && item.DateTime <= startDate);
if (data8 == null)
{
var dateT8 = new DateTime();
dateT8 = startDate;
while (data8 == null)
{
data8 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H8].Find(item => changeDatetimeFormat(dateT8, -8) <= item.DateTime && item.DateTime <= dateT8);
dateT8 = changeDatetimeFormat(dateT8, -8);
}
}
var data12 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H12].Find(item => changeDatetimeFormat(startDate, -12) <= item.DateTime && item.DateTime <= startDate);
if (data12 == null)
{
var dateT12 = new DateTime();
dateT12 = startDate;
while (data12 == null)
{
data12 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.H12].Find(item => changeDatetimeFormat(dateT12, -12) <= item.DateTime && item.DateTime <= dateT12);
dateT12 = changeDatetimeFormat(dateT12, -12);
}
}
var data24 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.D1].Find(item => changeDatetimeFormat(startDate, -24) <= item.DateTime && item.DateTime <= startDate);
if (data24 == null)
{
var dateT24 = new DateTime();
dateT24 = startDate;
while (data24 == null)
{
data24 = analysisData.CandleDatas[CommonProperty.MCandleTimeType.D1].Find(item => changeDatetimeFormat(dateT24, -24) <= item.DateTime && item.DateTime <= dateT24);
dateT24 = changeDatetimeFormat(dateT24, -24);
}
}
var maxich = Math.Max(((IchimokData)data.IndicatorDic["Ich2695226"]).value, ((IchimokData)data.IndicatorDic["Ich2695226"]).value2);
var maxich4 = Math.Max(((IchimokData)data4.IndicatorDic["Ich2695226"]).value, ((IchimokData)data4.IndicatorDic["Ich2695226"]).value2);
var maxich8 = Math.Max(((IchimokData)data8.IndicatorDic["Ich2695226"]).value, ((IchimokData)data8.IndicatorDic["Ich2695226"]).value2);
var maxich12 = Math.Max(((IchimokData)data12.IndicatorDic["Ich2695226"]).value, ((IchimokData)data12.IndicatorDic["Ich2695226"]).value2);
//var maxichD1 = Math.Max(((IchimokData)data24.IndicatorDic["Ich2695226"]).value, ((IchimokData)data24.IndicatorDic["Ich2695226"]).value2);
if (analysisData.Inclusion)
{
//if (!(maxichD1 < data24.StartValue && maxich12 < data12.StartValue && maxich8 < data8.StartValue && maxich4 < data4.StartValue
if(!(maxich12 < data12.StartValue && maxich8 < data8.StartValue && maxich4 < data4.StartValue
//&& data12.IndicatorDic["Bol401"].value < data12.StartValue
// && data8.IndicatorDic["Bol401"].value < data8.StartValue
// && data4.IndicatorDic["Bol401"].value < data4.StartValue
)) analysisData.Inclusion = false;
}
}
}
if(checkEdit_구름떼돌파몇봉이내.Checked)
{
var timeInterval = Convert.ToInt32(textEdit_구름떼돌파몇봉이내.Text);
foreach (var analysisData in parentForm._analysisDatas)
{
if (analysisData.Inclusion)
{
var 몇봉이내이전봉시간 = changeDatetimeFormat(analysisData.StartDate, -timeInterval -1);
var data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == 몇봉이내이전봉시간);
if (data == null)
{
analysisData.Description += "데이터 없음" + analysisData.Description;
continue;
}
var ichData = (IchimokData)data.IndicatorDic["Ich2695226"];
if (data.HighValue < Math.Max(ichData.value2, ichData.value2))
{
analysisData.Inclusion = true;
}
else analysisData.Inclusion = false;
}
}
}
if (checkEdit_시가볼린저40_1아래.Checked)
{
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == startDate);
if (data == null)
{
analysisData.Description += "데이터 없음" + analysisData.Description;
continue;
}
if (analysisData.Inclusion)
{
if (data.StartValue < data.IndicatorDic["Bol401"].value) analysisData.Inclusion = true;
else analysisData.Inclusion = false;
}
}
}
if (checkEdit_시가구름떼위.Checked)
{
foreach (var analysisData in parentForm._analysisDatas)
{
var startDate = changeDatetimeFormat(analysisData.StartDate, 0);
var data = analysisData.CandleDatas.First().Value.Find(item => item.DateTime == startDate);
if (data == null)
{
analysisData.Description += "데이터 없음" + analysisData.Description;
continue;
}
if (analysisData.Inclusion)
{
var ichData = (IchimokData)data.IndicatorDic["Ich2695226"];
if (data.StartValue > Math.Max(ichData.value, ichData.value2)) analysisData.Inclusion = true;
else analysisData.Inclusion = false;
}
}
}
parentForm.CalcurateProfitAndWinRate();
parentForm.treeList_ResultData.RefreshDataSource();
}
/// <summary>
/// 시간/분/일 등의 Datetime 과 비교하기 위한 Format String 변경 함수
/// </summary>
/// <param name="dateTime"></param>
/// <param name="StartDateInterval"></param>
/// <returns></returns>
public DateTime changeDatetimeFormat(DateTime dateTime, int StartDateInterval)
{
var _dateTime = dateTime;
switch (MCandleTimeType)
{
case CommonProperty.MCandleTimeType.H1:
_dateTime = Convert.ToDateTime(dateTime.ToString("yyyy-MM-dd HH:00")) + new TimeSpan(0, StartDateInterval, 0, 0);
break;
case CommonProperty.MCandleTimeType.H4:
_dateTime = Convert.ToDateTime(dateTime.ToString("yyyy-MM-dd HH:00")) + new TimeSpan(0, StartDateInterval * 4, 0, 0);
break;
case CommonProperty.MCandleTimeType.M1:
break;
case CommonProperty.MCandleTimeType.M10:
case CommonProperty.MCandleTimeType.M5:
case CommonProperty.MCandleTimeType.M3:
case CommonProperty.MCandleTimeType.M30:
case CommonProperty.MCandleTimeType.M15:
break;
case CommonProperty.MCandleTimeType.D1:
_dateTime = Convert.ToDateTime(dateTime.ToString("yyyy-MM-dd")) + new TimeSpan(StartDateInterval, 0, 0, 0);
break;
}
return _dateTime;
}
/// <summary>
/// 이전봉40_2볼린저이하
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void checkEdit_common_CheckedChanged(object sender, EventArgs e)
{
if(!ignoreChangedfilter)
{
calcurateFilter();
}
}
private void simpleButton_찬_Click(object sender, EventArgs e)
{
progressBar1.Minimum = 0;
progressBar1.Step = 1;
progressBar1.Value = 0;
progressBar1.Maximum = parentForm._analysisDatas.Count;
new Thread(() => test11()).Start();
}
private void test11()
{
var _chartIndicatorCoditionSetups = new List<IndicatorCoditionSetup>();
_chartIndicatorCoditionSetups.Add(new BolingerConditionSetup()
{
IndicatorType = CommonProperty.IndicatorType.볼린저밴드,
Period = 40,
Squared = 1,
Description = "bol40_1",
MCandleTimeType = CommonProperty.MCandleTimeType.M1
}); ;
var lowAverArr = new List<double>();
var lowAverPlusArr = new List<double>();
foreach (var analysis in parentForm._analysisDatas)
{
if(analysis.BuyValue >= analysis.SellValue)
{
lowAverPlusArr.Add((analysis.SellValue - analysis.BuyValue) / analysis.BuyValue);
}
else
{
lowAverArr.Add((analysis.SellValue - analysis.BuyValue) / analysis.BuyValue);
}
UIController.next(this, progressBar1);
}
/*
foreach (var analysis in parentForm._analysisDatas)
{
var chartStartDate = analysis.StartDate;
var chartEndDate = analysis.EndDate;
var data = DbServiceFunctions.GetCandleData(analysis.OriginalSearchResult.MarketData, chartStartDate, chartEndDate, CommonProperty.MCandleTimeType.M1);
var selData = data.CandleDataLists_Im.Where(x => x.DateTime > chartStartDate && x.DateTime < chartEndDate).ToList();
if (selData.Count != 0)
{
var lowValue = selData.Min(x => x.LowValue);
if (analysis.BuyValue < analysis.SellValue)
{
lowAverPlusArr.Add((analysis.BuyValue - lowValue) / analysis.BuyValue);
}
else
{
lowAverArr.Add((analysis.BuyValue - lowValue) / analysis.BuyValue);
}
}
UIController.next(this, progressBar1);
}
*/
double aver = 0.0;
foreach(var low in lowAverArr)
{
aver += low;
}
aver = aver / lowAverArr.Count;
double aver2 = 0.0;
foreach (var low in lowAverPlusArr)
{
aver2 += low;
}
aver2 = aver2 / lowAverPlusArr.Count;
aver.ToString();
}
private void comboBoxEdit_defaultTime_SelectedIndexChanged(object sender, EventArgs e)
{
Enum.TryParse(comboBoxEdit_defaultTime.SelectedItem.ToString(),
out CommonProperty.MCandleTimeType mCandleTimeType);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,180 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{359B3045-ADB0-4708-AEEE-FCA9E706707F}</ProjectGuid>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>Million_Hunter</RootNamespace>
<AssemblyName>Million Hunter</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.5.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Linq" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="HunterSubForm\LoadAnalysisResultDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\LoadAnalysisResultDataForm.Designer.cs">
<DependentUpon>LoadAnalysisResultDataForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterSubForm\ResultViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\ResultViewerForm.Designer.cs">
<DependentUpon>ResultViewerForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterSubForm\LoadResultViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\LoadResultViewerForm.Designer.cs">
<DependentUpon>LoadResultViewerForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterMainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterMainForm.Designer.cs">
<DependentUpon>HunterMainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="HunterSubForm\LoadAnalysisResultDataForm.resx">
<DependentUpon>LoadAnalysisResultDataForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterSubForm\ResultViewerForm.resx">
<DependentUpon>ResultViewerForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterSubForm\LoadResultViewerForm.resx">
<DependentUpon>LoadResultViewerForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterMainForm.resx">
<DependentUpon>HunterMainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
<ProjectReference Include="..\Million\Million Core.csproj" />
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="4.1.0" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
<PackageReference Include="System.Reflection.Metadata" Version="7.0.2" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{359B3045-ADB0-4708-AEEE-FCA9E706707F}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Million_Hunter</RootNamespace>
<AssemblyName>Million Hunter</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.Desktop.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraBars.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraLayout.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.5.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Linq" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="HunterSubForm\LoadAnalysisResultDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\LoadAnalysisResultDataForm.Designer.cs">
<DependentUpon>LoadAnalysisResultDataForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterSubForm\LoadCalculateDataList.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\LoadCalculateDataList.Designer.cs">
<DependentUpon>LoadCalculateDataList.cs</DependentUpon>
</Compile>
<Compile Include="HunterSubForm\ResultViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\ResultViewerForm.Designer.cs">
<DependentUpon>ResultViewerForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterSubForm\LoadResultViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\LoadResultViewerForm.Designer.cs">
<DependentUpon>LoadResultViewerForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterMainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterMainForm.Designer.cs">
<DependentUpon>HunterMainForm.cs</DependentUpon>
</Compile>
<Compile Include="HunterSubForm\TestBoardForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HunterSubForm\TestBoardForm.Designer.cs">
<DependentUpon>TestBoardForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="HunterSubForm\LoadAnalysisResultDataForm.resx">
<DependentUpon>LoadAnalysisResultDataForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterSubForm\LoadCalculateDataList.resx">
<DependentUpon>LoadCalculateDataList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterSubForm\ResultViewerForm.resx">
<DependentUpon>ResultViewerForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterSubForm\LoadResultViewerForm.resx">
<DependentUpon>LoadResultViewerForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterMainForm.resx">
<DependentUpon>HunterMainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="HunterSubForm\TestBoardForm.resx">
<DependentUpon>TestBoardForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
</Project>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<ItemGroup>
<Compile Update="HunterMainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="HunterSubForm\LoadAnalysisResultDataForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="HunterSubForm\LoadCalculateDataList.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="HunterSubForm\LoadResultViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="HunterSubForm\ResultViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="HunterSubForm\TestBoardForm.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("Million Hunter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Million Hunter")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("359b3045-adb0-4708-aeee-fca9e706707f")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,3 @@
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.3.3" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.Scripting.Common" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections.Immutable" version="5.0.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Reflection.Metadata" version="5.0.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="4.5.1" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>

File diff suppressed because one or more lines are too long

View File

@@ -31,6 +31,85 @@
DevExpress.XtraCharts.XYDiagram xyDiagram1 = new DevExpress.XtraCharts.XYDiagram();
DevExpress.XtraCharts.Series series1 = new DevExpress.XtraCharts.Series();
DevExpress.XtraCharts.LineSeriesView lineSeriesView1 = new DevExpress.XtraCharts.LineSeriesView();
DevExpress.XtraCharts.XYDiagram xyDiagram2 = new DevExpress.XtraCharts.XYDiagram();
DevExpress.XtraCharts.Series series2 = new DevExpress.XtraCharts.Series();
DevExpress.XtraCharts.StockSeriesLabel stockSeriesLabel1 = new DevExpress.XtraCharts.StockSeriesLabel();
DevExpress.XtraCharts.SeriesPoint seriesPoint1 = new DevExpress.XtraCharts.SeriesPoint(1D, new object[] {
((object)(1D)),
((object)(4D)),
((object)(3D)),
((object)(2D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint2 = new DevExpress.XtraCharts.SeriesPoint(2D, new object[] {
((object)(0D)),
((object)(5D)),
((object)(0D)),
((object)(3D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint3 = new DevExpress.XtraCharts.SeriesPoint(3D, new object[] {
((object)(0D)),
((object)(4D)),
((object)(0D)),
((object)(2D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint4 = new DevExpress.XtraCharts.SeriesPoint(4D, new object[] {
((object)(0D)),
((object)(3D)),
((object)(0D)),
((object)(2D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint5 = new DevExpress.XtraCharts.SeriesPoint(5D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(2D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint6 = new DevExpress.XtraCharts.SeriesPoint(6D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(3D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint7 = new DevExpress.XtraCharts.SeriesPoint(7D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(4D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint8 = new DevExpress.XtraCharts.SeriesPoint(8D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(5D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint9 = new DevExpress.XtraCharts.SeriesPoint(9D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(6D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint10 = new DevExpress.XtraCharts.SeriesPoint(10D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(1D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint11 = new DevExpress.XtraCharts.SeriesPoint(11D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(0D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint12 = new DevExpress.XtraCharts.SeriesPoint(12D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(0D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint13 = new DevExpress.XtraCharts.SeriesPoint(13D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(0D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint14 = new DevExpress.XtraCharts.SeriesPoint(14D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(0D))});
DevExpress.XtraCharts.SeriesPoint seriesPoint15 = new DevExpress.XtraCharts.SeriesPoint(15D, new object[] {
((object)(0D)),
((object)(0D)),
((object)(0D)),
((object)(0D))});
DevExpress.XtraCharts.CandleStickSeriesView candleStickSeriesView1 = new DevExpress.XtraCharts.CandleStickSeriesView();
this.label1 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.listBox1 = new System.Windows.Forms.ListBox();
@@ -47,10 +126,17 @@
this.chartControl1 = new DevExpress.XtraCharts.ChartControl();
this.button10 = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
this.chartControl_Candle = new DevExpress.XtraCharts.ChartControl();
this.button12 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.chartControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(xyDiagram1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(series1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(lineSeriesView1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.chartControl_Candle)).BeginInit();
((System.ComponentModel.ISupportInitialize)(xyDiagram2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(series2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(stockSeriesLabel1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(candleStickSeriesView1)).BeginInit();
this.SuspendLayout();
//
// label1
@@ -80,7 +166,7 @@
" "});
this.listBox1.Location = new System.Drawing.Point(166, 18);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(419, 556);
this.listBox1.Size = new System.Drawing.Size(242, 556);
this.listBox1.TabIndex = 2;
//
// button2
@@ -115,21 +201,21 @@
//
// textBoxAskInput
//
this.textBoxAskInput.Location = new System.Drawing.Point(608, 18);
this.textBoxAskInput.Location = new System.Drawing.Point(432, 18);
this.textBoxAskInput.Name = "textBoxAskInput";
this.textBoxAskInput.Size = new System.Drawing.Size(100, 21);
this.textBoxAskInput.TabIndex = 6;
//
// textBoxAskOutput
//
this.textBoxAskOutput.Location = new System.Drawing.Point(714, 18);
this.textBoxAskOutput.Location = new System.Drawing.Point(538, 18);
this.textBoxAskOutput.Name = "textBoxAskOutput";
this.textBoxAskOutput.Size = new System.Drawing.Size(100, 21);
this.textBoxAskOutput.TabIndex = 7;
//
// button5
//
this.button5.Location = new System.Drawing.Point(608, 45);
this.button5.Location = new System.Drawing.Point(432, 45);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(75, 23);
this.button5.TabIndex = 8;
@@ -183,7 +269,7 @@
xyDiagram1.AxisY.VisibleInPanesSerializable = "";
this.chartControl1.Diagram = xyDiagram1;
this.chartControl1.Legend.Name = "Default Legend";
this.chartControl1.Location = new System.Drawing.Point(608, 79);
this.chartControl1.Location = new System.Drawing.Point(432, 79);
this.chartControl1.Name = "chartControl1";
series1.Name = "Series 1";
series1.View = lineSeriesView1;
@@ -194,7 +280,7 @@
//
// button10
//
this.button10.Location = new System.Drawing.Point(608, 285);
this.button10.Location = new System.Drawing.Point(432, 285);
this.button10.Name = "button10";
this.button10.Size = new System.Drawing.Size(75, 23);
this.button10.TabIndex = 14;
@@ -212,11 +298,64 @@
this.button11.UseVisualStyleBackColor = true;
this.button11.Click += new System.EventHandler(this.button11_Click);
//
// chartControl_Candle
//
this.chartControl_Candle.CrosshairOptions.ShowOutOfRangePoints = true;
xyDiagram2.AxisX.VisibleInPanesSerializable = "";
xyDiagram2.AxisY.VisibleInPanesSerializable = "";
this.chartControl_Candle.Diagram = xyDiagram2;
this.chartControl_Candle.FillStyle.FillMode = DevExpress.XtraCharts.FillMode.Empty;
this.chartControl_Candle.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.CheckBoxAndMarker;
this.chartControl_Candle.Legend.Name = "Default Legend";
this.chartControl_Candle.Location = new System.Drawing.Point(293, 306);
this.chartControl_Candle.Name = "chartControl_Candle";
stockSeriesLabel1.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
stockSeriesLabel1.ResolveOverlappingMode = DevExpress.XtraCharts.ResolveOverlappingMode.HideOverlapped;
series2.Label = stockSeriesLabel1;
series2.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
series2.Name = "Series 1";
seriesPoint1.ColorSerializable = "#FF80FF";
series2.Points.AddRange(new DevExpress.XtraCharts.SeriesPoint[] {
seriesPoint1,
seriesPoint2,
seriesPoint3,
seriesPoint4,
seriesPoint5,
seriesPoint6,
seriesPoint7,
seriesPoint8,
seriesPoint9,
seriesPoint10,
seriesPoint11,
seriesPoint12,
seriesPoint13,
seriesPoint14,
seriesPoint15});
candleStickSeriesView1.ReductionOptions.ColorMode = DevExpress.XtraCharts.ReductionColorMode.OpenToCloseValue;
candleStickSeriesView1.ReductionOptions.FillMode = DevExpress.XtraCharts.CandleStickFillMode.AlwaysEmpty;
series2.View = candleStickSeriesView1;
this.chartControl_Candle.SeriesSerializable = new DevExpress.XtraCharts.Series[] {
series2};
this.chartControl_Candle.Size = new System.Drawing.Size(829, 343);
this.chartControl_Candle.TabIndex = 16;
//
// button12
//
this.button12.Location = new System.Drawing.Point(35, 467);
this.button12.Name = "button12";
this.button12.Size = new System.Drawing.Size(75, 23);
this.button12.TabIndex = 17;
this.button12.Text = "웹소켓";
this.button12.UseVisualStyleBackColor = true;
this.button12.Click += new System.EventHandler(this.button12_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1415, 703);
this.ClientSize = new System.Drawing.Size(1415, 952);
this.Controls.Add(this.button12);
this.Controls.Add(this.chartControl_Candle);
this.Controls.Add(this.button11);
this.Controls.Add(this.button10);
this.Controls.Add(this.chartControl1);
@@ -239,6 +378,11 @@
((System.ComponentModel.ISupportInitialize)(lineSeriesView1)).EndInit();
((System.ComponentModel.ISupportInitialize)(series1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.chartControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(xyDiagram2)).EndInit();
((System.ComponentModel.ISupportInitialize)(stockSeriesLabel1)).EndInit();
((System.ComponentModel.ISupportInitialize)(candleStickSeriesView1)).EndInit();
((System.ComponentModel.ISupportInitialize)(series2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.chartControl_Candle)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -262,6 +406,8 @@
private DevExpress.XtraCharts.ChartControl chartControl1;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button11;
public DevExpress.XtraCharts.ChartControl chartControl_Candle;
private System.Windows.Forms.Button button12;
}
}

View File

@@ -18,6 +18,11 @@ using System.IO;
using Million.FileDBManagement;
using Million.SaveData;
using Million.DbManagement;
using System.Net.WebSockets;
using System.Threading.Tasks;
using System.Text;
using System.Net.Http;
using Newtonsoft.Json;
namespace Million_Prototype
{
@@ -27,10 +32,12 @@ namespace Million_Prototype
//public static string secretKey = "iAasVxQt8CyADjzXaAZiF5VZXTZPdElJOP4m97Bz";
//UpbitAPI uApi = new UpbitAPI(accessKey,secretKey);
Stopwatch sw = new Stopwatch();
private static SemaphoreSlim semaphore = new SemaphoreSlim(1);
public Form1()
{
InitializeComponent();
/*
var startDate = new DateTime(2022, 1, 1, 0, 0, 0);
var endDate = new DateTime(2022, 1, 2, 0, 0, 0);
@@ -39,11 +46,19 @@ namespace Million_Prototype
var datas = IndicatorSetupManager.GetCalculateCandleData(new List<IndicatorCoditionSetup>(), startDate, endDate, market);
//ChartViewerForm chartViewerForm = new ChartViewerForm();
ChartViewerForm chartViewerForm = new ChartViewerForm(null);
//chartViewerForm.setting(datas[MCandleTimeType.M1]);
//chartViewerForm.Show();
chartViewerForm.Show();
*/
var xyDiagram = (XYDiagram)chartControl_Candle.Diagram;
xyDiagram.EnableAxisXZooming = true;
//xyDiagram.EnableAxisYZooming = true;
xyDiagram.ZoomingOptions.UseKeyboard = true;
xyDiagram.ZoomingOptions.UseKeyboardWithMouse = true;
xyDiagram.ZoomingOptions.UseMouseWheel = true;
xyDiagram.ZoomingOptions.UseTouchDevice = true;
}
@@ -144,7 +159,7 @@ namespace Million_Prototype
int firstFlag = 0;
var savedResultDatas = DBConnection.QueryGetExcuter_SavedResultData();
var savedResultDatas = DBConnection.QueryGetExecuter_SavedResultData();
var savedResultData = savedResultDatas.FirstOrDefault(t=>t.Name == "IndicatorTemplate");
var sellIndicator = savedResultData.SellSetupList.OfType<IndicatorCoditionSetup>().ToList();
@@ -182,8 +197,8 @@ namespace Million_Prototype
{
if (firstFlag == 0)
{
realTimeMsg = new RealtimeDataSettingManager(null, PaymentType.KRW);
dataList = realTimeMsg.GetRealTimeCandleData(candleTypeList, 200);
dataList = realTimeMsg.GetRealTimeCandleData(candleTypeList,DateTime.Now, DateTime.Now, 200);
foreach (var item in realTimeMsg.coinFullNameList)
{
overlapBuyManagementList[item] = true;
@@ -201,7 +216,7 @@ namespace Million_Prototype
if (DateTime.Now.Minute == 0 && saveFlag)
{
realTimeMsg.ClearTicker();
if (resultDataList.Count > 0)
{
@@ -267,7 +282,7 @@ namespace Million_Prototype
savedResultData.ExchangePlace = "Upbit";
savedResultData.ParentId = null;
DBConnection.QueryInsertExcuter_SavedResultData(savedResultData);
DBConnection.QueryInsertExecuter_SavedResultData(savedResultData);
savedResultData.StartDateTime = DateTime.Now;
resultDataList.Clear();
@@ -391,7 +406,7 @@ namespace Million_Prototype
private void button11_Click(object sender, EventArgs e)
{
//select 관련 처리
var list = DBConnection.QueryGetExcuter_SavedResultData();
var list = DBConnection.QueryGetExecuter_SavedResultData();
}
private void button4_Click(object sender, EventArgs e)
@@ -1112,6 +1127,111 @@ namespace Million_Prototype
}
private async void button12_Click(object sender, EventArgs e)
{
var codes = new List<string>();
string apiUrl = "https://api.upbit.com/v1/market/all?isDetails=true";
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(apiUrl);
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(responseBody);
foreach(var code in data)
{
if( code["market"].Contains("KRW-"))
{
codes.Add(code["market"]);
}
}
Console.WriteLine(responseBody);
}
else
{
Console.WriteLine($"Failed to call the API. Status code: {response.StatusCode}");
}
}
var ttt = new List<Dictionary<string, object>>();
ttt.Add(new Dictionary<string, object>() { { "ticket", "test" } });
ttt.Add(new Dictionary<string, object>() { { "type", "trade" }, { "codes", codes } });
string WebSocketUrl = "wss://api.upbit.com/websocket/v1";
ClientWebSocket webSocket = new ClientWebSocket();
string message = "";
try
{
await webSocket.ConnectAsync(new Uri(WebSocketUrl), CancellationToken.None);
// 연결이 성공적으로 이루어지면 처리할 코드 작성
Console.WriteLine("WebSocket 연결 성공");
var test11 = "[{\"ticket\":\"test\"},{\"type\":\"trade\",\"codes\":[\"KRW-BTC\",\"KRW-ETH\"]}]";
test11 = JsonConvert.SerializeObject(ttt);
await SendMessage(webSocket, test11);
// 데이터 수신을 위한 반복문 시작
while (webSocket.State == WebSocketState.Open)
{
byte[] buffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
message = "";
// 수신한 데이터 처리
message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
var testData = JsonConvert.DeserializeObject<Trade>(message);
Console.WriteLine("수신한 데이터: " + message);
DateTime dt = new DateTime(1970, 01, 01);
dt = dt.AddMilliseconds(testData.trade_timestamp).ToLocalTime();
}
}
catch (Exception ex)
{
Console.WriteLine("WebSocket 연결 중 오류 발생: " + ex.Message);
}
finally
{
if (webSocket.State == WebSocketState.Open)
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "WebSocket 연결 종료", CancellationToken.None);
webSocket.Dispose();
}
}
public class Trade
{
public string type { get; set; }
public string code { get; set; }
public long timestamp { get; set; }
public string trade_date { get; set; }
public string trade_time { get; set; }
public long trade_timestamp { get; set; }
public double trade_price { get; set; }
public double trade_volume { get; set; }
public string ask_bid { get; set; }
public double prev_closing_price { get; set; }
public string change { get; set; }
public double change_price { get; set; }
public long sequential_id { get; set; }
public string stream_type { get; set; }
}
private static async Task SendMessage(ClientWebSocket webSocket, string message)
{
byte[] buffer = Encoding.UTF8.GetBytes(message);
await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
Console.WriteLine("메시지 전송: " + message);
}
}
public class DataPoint
{

View File

@@ -1,158 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{828206F2-6876-4B32-8B41-B925D809A1E7}</ProjectGuid>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>Million_Prototype</RootNamespace>
<AssemblyName>Million Prototype</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Charts.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v18.2.UI, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v18.2.Wizard, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraPrinting.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DocumentFormat.OpenXml, Version=2.16.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.2.16.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.5.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
<Reference Include="DevExpress.Charts.v22.2.Core, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Drawing.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v22.2.Core, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v22.2.UI, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v22.2.Wizard, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraPrinting.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\licenses.licx" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
<ProjectReference Include="..\Million\Million Core.csproj" />
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="2.16.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="4.1.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
<PackageReference Include="System.Reflection.Metadata" Version="7.0.2" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{828206F2-6876-4B32-8B41-B925D809A1E7}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Million_Prototype</RootNamespace>
<AssemblyName>Million Prototype</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Charts.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraBars.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v20.1.UI, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v20.1.Wizard, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraPrinting.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DocumentFormat.OpenXml, Version=2.16.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.2.16.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.5.0.0\lib\net461\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Metadata, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.5.0.0\lib\net461\System.Reflection.Metadata.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.4.5.1\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj">
<Project>{10ef08cb-bf38-4882-a92a-30db34e8e8bd}</Project>
<Name>Million Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.3.3.3\build\Microsoft.CodeAnalysis.Analyzers.targets')" />
</Project>

View File

@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectView>ShowAllFiles</ProjectView>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
<ItemGroup>
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("Million Prototype")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Million Prototype")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("828206f2-6876-4b32-8b41-b925d809a1e7")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1 @@
DevExpress.XtraCharts.ChartControl, DevExpress.XtraCharts.v22.2.UI, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="DocumentFormat.OpenXml" version="2.16.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.3.3" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CodeAnalysis.Scripting.Common" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections.Immutable" version="5.0.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Reflection.Metadata" version="5.0.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net48" />
<package id="System.Text.Encoding.CodePages" version="4.5.1" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>

View File

@@ -0,0 +1 @@
{"RootPath":"D:\\s\\1\\Million\\Million Update Server","ProjectFileName":"Million Update Server.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Form1.cs"},{"SourceFile":"Form1.Designer.cs"},{"SourceFile":"Program.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\s\\1\\Million\\Million\\bin\\Debug\\Million.exe","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\s\\1\\Million\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\s\\1\\Million\\Million Update Server\\bin\\Debug\\Million Update Server.exe","OutputItemRelativePath":"Million Update Server.exe"},{"OutputItemFullPath":"D:\\s\\1\\Million\\Million Update Server\\bin\\Debug\\Million Update Server.pdb","OutputItemRelativePath":"Million Update Server.pdb"}],"CopyToOutputEntries":[]}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>

76
Million Update Server/Form1.Designer.cs generated Normal file
View File

@@ -0,0 +1,76 @@
namespace Million_Update_Server
{
partial class Form1
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form 디자이너에서 생성한 코드
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.textBox_log = new System.Windows.Forms.TextBox();
this.button_ServerStart = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox_log
//
this.textBox_log.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.textBox_log.Location = new System.Drawing.Point(12, 12);
this.textBox_log.Multiline = true;
this.textBox_log.Name = "textBox_log";
this.textBox_log.ReadOnly = true;
this.textBox_log.Size = new System.Drawing.Size(284, 579);
this.textBox_log.TabIndex = 0;
//
// button_ServerStart
//
this.button_ServerStart.Location = new System.Drawing.Point(303, 13);
this.button_ServerStart.Name = "button_ServerStart";
this.button_ServerStart.Size = new System.Drawing.Size(93, 43);
this.button_ServerStart.TabIndex = 1;
this.button_ServerStart.Text = "서버 시작";
this.button_ServerStart.UseVisualStyleBackColor = true;
this.button_ServerStart.Click += new System.EventHandler(this.button_ServerStart_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 603);
this.Controls.Add(this.button_ServerStart);
this.Controls.Add(this.textBox_log);
this.Name = "Form1";
this.Text = "소켓서버";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBox_log;
private System.Windows.Forms.Button button_ServerStart;
}
}

View File

@@ -0,0 +1,92 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Newtonsoft.Json;
namespace Million_Update_Server
{
public partial class Form1 : Form
{
string log = "";
private TcpListener tcpListener;
private Thread listenThread = null;
IPAddress ipAddress = IPAddress.Parse("172.30.1.56");
int port = 6666;
public Form1()
{
InitializeComponent();
}
private void writeLog(string text)
{
log = text+"\r\n" + log;
Invoke(new MethodInvoker(delegate ()
{
textBox_log.Text = log;
}));
}
private void button_ServerStart_Click(object sender, System.EventArgs e)
{
if(listenThread != null && listenThread.IsAlive)
{
writeLog("이미 실행중입니다.");
return;
}
// TcpListener 객체 생성
this.tcpListener = new TcpListener(ipAddress, port);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
writeLog("서버 활성화 합니다.");
}
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
// 클라이언트 접속 대기
TcpClient client = this.tcpListener.AcceptTcpClient();
// 새로운 클라이언트가 접속했을 때 처리
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
try
{
string data = "";
do
{
byte[] buffer = new byte[tcpClient.ReceiveBufferSize];
int bytesRead = clientStream.Read(buffer, 0, buffer.Length);
data += Encoding.UTF8.GetString(buffer, 0, bytesRead);
} while (clientStream.DataAvailable);
//var receivedPeople = JsonConvert.DeserializeObject<Million.SaveData.SavedResultData>(data);
}
catch (Exception ex)
{
// 예외 발생 시 에러 메시지 출력
Console.WriteLine("Error: " + ex.Message);
}
// 클라이언트 연결 종료
tcpClient.Close();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,47 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Million\Million Core.csproj" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.8%28x86 및 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>ko-KR</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
<ItemGroup>
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Million_Update_Server
{
static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Million_Update_Server.Properties {
using System;
/// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary>
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
// 클래스에서 자동으로 생성되었습니다.
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Million_Update_Server.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대한 현재 스레드의 CurrentUICulture
/// 속성을 재정의합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Million_Update_Server.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -1,17 +1,23 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29806.167
# Visual Studio Version 17
VisualStudioVersion = 17.8.34316.72
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Million Core", "Million\Million Core.csproj", "{10EF08CB-BF38-4882-A92A-30DB34E8E8BD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Million Core", "Million\Million Core.csproj", "{10EF08CB-BF38-4882-A92A-30DB34E8E8BD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Million Saver", "DataSaver\Million Saver.csproj", "{D9DE0F1B-BA15-421E-A263-6859F3D5A3BC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Million Saver", "DataSaver\Million Saver.csproj", "{D9DE0F1B-BA15-421E-A263-6859F3D5A3BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Million Buyer", "Million Buyer\Million Buyer.csproj", "{7C6E28D6-A9CA-465B-88F2-1C3BA33B74BE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Million Buyer", "Million Buyer\Million Buyer.csproj", "{7C6E28D6-A9CA-465B-88F2-1C3BA33B74BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Million Prototype", "Million Prototype\Million Prototype.csproj", "{828206F2-6876-4B32-8B41-B925D809A1E7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Million Prototype", "Million Prototype\Million Prototype.csproj", "{828206F2-6876-4B32-8B41-B925D809A1E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Million Hunter", "Million Hunter\Million Hunter.csproj", "{359B3045-ADB0-4708-AEEE-FCA9E706707F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Million Hunter", "Million Hunter\Million Hunter.csproj", "{359B3045-ADB0-4708-AEEE-FCA9E706707F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Million Update Server", "Million Update Server\Million Update Server.csproj", "{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D26E0A5E-F07F-4E3A-95BD-B6C94C96E706}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -61,6 +67,14 @@ Global
{359B3045-ADB0-4708-AEEE-FCA9E706707F}.Release|Any CPU.Build.0 = Release|Any CPU
{359B3045-ADB0-4708-AEEE-FCA9E706707F}.Release|x64.ActiveCfg = Release|Any CPU
{359B3045-ADB0-4708-AEEE-FCA9E706707F}.Release|x64.Build.0 = Release|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Debug|x64.ActiveCfg = Debug|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Debug|x64.Build.0 = Debug|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Release|Any CPU.Build.0 = Release|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Release|x64.ActiveCfg = Release|Any CPU
{5AFDCFC0-19C8-4A2B-BD7C-4761A4B5C56A}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<DevExpress.LookAndFeel.Design.AppSettings>
<setting name="DefaultAppSkin" serializeAs="String">
<value></value>
</setting>
<setting name="DefaultPalette" serializeAs="String">
<value>Custom/Custom Palette #1</value>
</setting>
<setting name="TouchUI" serializeAs="String">
<value></value>
</setting>
<setting name="CompactUI" serializeAs="String">
<value></value>
</setting>
<setting name="TouchScaleFactor" serializeAs="String">
<value></value>
</setting>
<setting name="DirectX" serializeAs="String">
<value></value>
</setting>
<setting name="RegisterUserSkins" serializeAs="String">
<value></value>
</setting>
<setting name="RegisterBonusSkins" serializeAs="String">
<value></value>
</setting>
<setting name="FontBehavior" serializeAs="String">
<value></value>
</setting>
<setting name="DefaultAppFont" serializeAs="String">
<value></value>
</setting>
<setting name="DPIAwarenessMode" serializeAs="String">
<value></value>
</setting>
<setting name="CustomPaletteCollection" serializeAs="Xml">
<value>
<CustomPaletteCollection>
<Skin Name="Basic">
<SvgPalette Name="Custom Palette #1">
<SvgColor Name="Paint" Value="240,240,240" />
<SvgColor Name="Paint High" Value="255,255,255" />
<SvgColor Name="Paint Shadow" Value="Gainsboro" />
<SvgColor Name="Paint Deep Shadow" Value="210,210,210" />
<SvgColor Name="Brush" Value="40,40,40" />
<SvgColor Name="Brush High" Value="40,40,40" />
<SvgColor Name="Brush Light" Value="120,120,120" />
<SvgColor Name="Brush Major" Value="160,160,160" />
<SvgColor Name="Brush Minor" Value="200,200,200" />
<SvgColor Name="Accent Paint" Value="78,109,156" />
<SvgColor Name="Accent Paint Dark" Value="62,91,135" />
<SvgColor Name="Accent Paint Light" Value="206,221,245" />
<SvgColor Name="Accent Paint Lighter" Value="220,233,252" />
<SvgColor Name="Accent Brush" Value="255,255,255" />
<SvgColor Name="Accent Brush Light" Value="165,186,217" />
<SvgColor Name="Red" Value="208,49,68" />
<SvgColor Name="Green" Value="56,152,83" />
<SvgColor Name="Blue" Value="78,138,200" />
<SvgColor Name="Yellow" Value="241,151,63" />
<SvgColor Name="Black" Value="108,109,117" />
<SvgColor Name="Gray" Value="191,191,194" />
<SvgColor Name="White" Value="255,255,255" />
</SvgPalette>
</Skin>
</CustomPaletteCollection>
</value>
</setting>
</DevExpress.LookAndFeel.Design.AppSettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>

View File

@@ -6,7 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraReports.UI;
using DevExpress.Pdf.Native;
using Million.Data;
using Million.WebMangement.Upbit;
@@ -32,8 +32,8 @@ namespace Million
},
{ "김영호", new Dictionary<string, string>()
{
{ "accessKey", "FIkdR3xF4AxJpCI16xaM6qzQkVkFeQPBNONDDMtg" },
{"secretKey", "Uk8iulXofcfw8EJvWY6WMoHsmWZ5GWHZ2d5uycli" }
{ "accessKey", "oe3b2z6xN7NrBbxK1t57zzw2ucNNMMtFZSVn3DJz" },
{"secretKey", "74WRxxSpLqOXjCa9PBgm2NmPcqbjgFGpXXLFEzeg" }
}
},
{ "이찬균", new Dictionary<string, string>()
@@ -69,6 +69,11 @@ namespace Million
GET = 1
}
public enum ExchangeTime
{
UpbitorBithumb = 9
}
// 거래소 타입
public enum ExchangePlace
{
@@ -137,14 +142,23 @@ namespace Million
public enum MCandleTimeType
{
M1 = 1,
M2 = 2,
M3 = 3,
M4 = 4,
M5 = 5,
M6 = 6,
M10 = 10,
M15 = 15,
M20 = 20,
M30 = 30,
H1 = 60,
H2 = 120,
H3 = 180,
H4 = 240,
D1 = 1000,
H6 = 360,
H8 = 480,
H12 = 720,
D1 = 1440,
W1 = 10000,
MT1 = 100000
}
@@ -159,7 +173,8 @@ namespace Million
이동평균선 = 3,
ParabolicSAR = 4,
거래량비율 = 5,
가격비율 = 6
가격비율 = 6,
조건단순비교 =7
}
// 이동평균선 종류
@@ -211,7 +226,8 @@ namespace Million
{
선행스팬1 = 1,
선행스팬2 = 2,
선행스팬1OR2중고가= 3,
선행스팬1OR2중고가 = 3,
선행스팬1OR2중저가 = 4
}
// 구매/판매 조건 설정
@@ -282,6 +298,10 @@ namespace Million
{
{"CandleStick","/public/CandleStic"}
};
/// <summary>
/// 사용자 List Name
/// </summary>
public static string[] UserList = new string[] { "이장화", "김영호", "이찬균" };
#endregion
#region 저장 데이터 관련
@@ -297,19 +317,17 @@ namespace Million
//TODO 추후 관리 방안 고려
#region # 데이터 베이스 정보 #
private const string DbServerIp = "222.96.13.116";
private const string DbServerUserId = "million";
private const string DbServerUserPassword = "million!";
public const string DbServerIp = "59.26.54.110";
public const string DbServerUserId = "million";
public const string DbServerUserPassword = "million!";
public static string DbConnectionStr = $"Data Source={DbServerIp};uid={DbServerUserId};pwd={DbServerUserPassword};Database=";
public static string DbConnectionMarket = DbConnectionStr + "Market";
public static string DbConnectionResultData = DbConnectionStr + "ResultData";
public const int UpdateServerPort = 6666;
#endregion
#region DataSaver 사용되는 공용 변수
//현재 시점에서 사용되고 있는 DB Connection String
public static string ConDbConnectionStr = DbConnectionStr;
// 현재 시점에서 사용되고 있는 Place의 Market List 정보
public static List<MarketData> selectedMarketOfPlaceList { get; set; } = null;
@@ -336,12 +354,27 @@ namespace Million
public static string DataExtend = ".data";
// Save 결과 분석 데이터
public static string AnalysisExtendFolder = "_analysis";
public static bool InsertLogFlag = true;
#endregion
#region Buyer Flag
public static bool UpperMainIndicatorFlag = true;
public static bool DownBeforeValueFlag = true;
public enum BuyerMode
{
BuyerRealtime,
Buyer,
HunterRealtime,
None
}
#endregion
#region Realtime Hunter Flag
public static bool RealtimeHunterMode = false;
public static bool StarValueLowBuyValueUp = false;
#endregion
#region Realtime 관련 Sub data 사용하는 부분예외처리
@@ -350,5 +383,22 @@ namespace Million
/// </summary>
public static Dictionary<string, Dictionary<string, bool>> subIndicatorStateManagement = new Dictionary<string, Dictionary<string, bool>>();
#endregion
#region 장화형 요청 사항(조건단순 비교할때 첫번째는 포함되지 않도록 예외처리
public static Dictionary<string, Dictionary<string, bool>> compareIndicatorState = new Dictionary<string, Dictionary<string, bool>>();
#endregion
#region Compare 조건문 Flag
public enum CompareType
{
Origin_Up_Compare_Down = 0,
Origin_UpOrSame_Compare_Down = 1,
Origin_Down_Compare_Up = 2,
Origin_DownOrSame_Compare_Up = 3
}
#endregion
public static BuyerMode programMode = BuyerMode.None;
public static Dictionary<string, Dictionary<string, bool>> crossStateManagement = new Dictionary<string, Dictionary<string, bool>>();
}
}

View File

@@ -46,6 +46,13 @@ namespace Million.Data
// 기타 기입 내용
public string Description { get; set; }
// 현재 시간으로 구매된 종목 개수
[field: NonSerialized]
public int PurchasedCount { get; set; }
[field: NonSerialized]
public Dictionary<CommonProperty.MCandleTimeType,List<CandleData>> CandleDatas { get; set; }
// 원본 데이터 참조
public SearchResult OriginalSearchResult { get; set; }

View File

@@ -1,4 +1,5 @@
using System;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using static Million.CommonProperty;
@@ -19,6 +20,9 @@ namespace Million.Data
public double LowValue { get; set; }
// 거래량
public double MoneyVolume { get; set; }
// 거래 대금
public double TransactionAmount { get; set; }
public double BuyValue { get; set; }
/// <summary>
@@ -37,11 +41,13 @@ namespace Million.Data
public Dictionary<string, bool> SellLogicFlag { get; set; } = new Dictionary<string, bool>();
public Dictionary<string, bool> CalculateFlag { get; set; } = new Dictionary<string, bool>();
[JsonIgnore]
public Dictionary<MCandleTimeType, CandleData> ParentCandleData = new Dictionary<MCandleTimeType, CandleData>();
public CandleType CandleType { get; set; } = CandleType.None;
/// <summary>
/// 빗썸 DateTime 변환 로직
/// </summary>

View File

@@ -56,5 +56,17 @@ namespace Million.Data
return value > value2 ? value : value2;
}
/// <summary>
/// 두 선행스팬 값중에 아래 값을 리턴함
/// </summary>
/// <returns></returns>
public double GetDownOverValue()
{
if (value == 0 || value2 == 0)
return 0;
return value < value2 ? value : value2;
}
}
}

View File

@@ -0,0 +1,42 @@
using Million.SaveData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Million.Data.SaveData
{
/// <summary>
/// Realtime Hunter의 여러개 사용할 수 있도록 할 수 있는 List데이터 클래스
/// </summary>
public class MultiSavedResultData
{
/// <summary>
/// Saved Result Data List
/// </summary>
public SavedResultData SavedResultData { get; set; }
public bool UpperMainIndicatorFlag { get; set; }
public bool StarValueLowOverlapUp { get; set; }
public bool IncludeClearIndicator { get; set; }
public bool DownBeforeValueFlag { get; set; }
public bool BuyBigthanHighValFlag { get; set; }
public CommonProperty.MCandleTimeType BuyBigthanHighValType { get; set; }
public bool BigMoneyVolFlag { get; set; }
public int BigMoneyVolCnt { get; set; }
public CommonProperty.MCandleTimeType BigMoneyVolType { get; set; }
public bool HunterMode { get; set; }
public string Name { get; set; }
}
}

View File

@@ -39,6 +39,9 @@ namespace Million.SaveData
// 정규식 (Sell)
public string SellRegularExpression { get; set; }
// 정규식 (손절
public string SellExceptionRegularExpression { get; set; }
[field: NonSerialized]
// 실제 데이터 경로 (Data Info)
public string SavedInfoDataPath { get; set; }
@@ -68,6 +71,14 @@ namespace Million.SaveData
public SavedResultData Clone()
{
var buySetupList = new List<object>();
var sellSetupList = new List<object>();
buySetupList = BuySetupList;
sellSetupList = SellSetupList;
var searchResultList = new List<SearchResult>();
searchResultList = SearchResultList;
var clone = new SavedResultData
{
Id = Id,
@@ -78,13 +89,19 @@ namespace Million.SaveData
StartDateTime = StartDateTime,
EndDateTime = EndDateTime,
SavedDateTime = SavedDateTime,
BuySetupList = BuySetupList,
SellSetupList = SellSetupList,
BuySetupList = buySetupList,
SellSetupList = sellSetupList,
BuyRegularExpression = BuyRegularExpression,
SellRegularExpression = SellRegularExpression,
SearchResultList = SearchResultList,
SellExceptionRegularExpression = SellExceptionRegularExpression,
SearchResultList = searchResultList,
WinRate = WinRate,
ProfitRate = ProfitRate,
FirstProfitRate = FirstProfitRate,
FirstWinRate = FirstWinRate,
Name = Name,
ParentId = ParentId,
ResultDataCount = ResultDataCount
};
return clone;
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Million.Data.Upbit
{
/// <summary>
/// 실시간 체결량 관련 Class
/// </summary>
public class RealtimeConclusion
{
public string type { get; set; }
public string code { get; set; }
public long timestamp { get; set; }
public string trade_date { get; set; }
public string trade_time { get; set; }
public long trade_timestamp { get; set; }
public double trade_price { get; set; }
public double trade_volume { get; set; }
public string ask_bid { get; set; }
public double prev_closing_price { get; set; }
public string change { get; set; }
public double change_price { get; set; }
public long sequential_id { get; set; }
public string stream_type { get; set; }
public DateTime TradeDateTime { get; set; }
public RealtimeConclusion Clone()
{
var dt = new DateTime(1970, 1, 1);
dt = dt.AddMilliseconds(trade_timestamp);
dt = dt.AddHours(9);
return new RealtimeConclusion()
{
type = type,
code = code,
timestamp= timestamp,
trade_date = trade_date,
trade_time = trade_time,
trade_timestamp = trade_timestamp,
trade_price = trade_price,
trade_volume = trade_volume,
ask_bid = ask_bid,
prev_closing_price = prev_closing_price,
change = change,
change_price = change_price,
sequential_id = sequential_id,
stream_type = stream_type,
TradeDateTime = dt
};
}
}
}

View File

@@ -123,21 +123,6 @@ namespace Million.Data.Upbit
/// </summary>
public DateTime LowstPriceDateOf52Week { get; set; }
public object DeepClone(object obj)
{
object objResult = null;
using (var ms = new MemoryStream())
{
var bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
objResult = bf.Deserialize(ms);
}
return objResult;
}
public Ticker Clone()
{

View File

@@ -3,13 +3,17 @@ using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Windows.Forms;
using DevExpress.Charts.Native;
using DevExpress.DataAccess.Native.Sql;
using Million.Data;
using Million.Data.Upbit;
using Million.SaveData;
using Newtonsoft.Json;
namespace Million.DbManagement
{
@@ -23,7 +27,7 @@ namespace Million.DbManagement
return CommonProperty.DbConnectionStr + databaseName;
}
public static List<MarketData> QueryGetExcuter_Market(string strDBCon, string sqlQuery)
public static List<MarketData> QueryGetExecuter_Market(string strDBCon, string sqlQuery)
{
if (string.IsNullOrWhiteSpace(sqlQuery))
return null;
@@ -84,7 +88,7 @@ namespace Million.DbManagement
/// <param name="strDBCon"></param>
/// <param name="sqlQuery"></param>
/// <returns></returns>
public static List<CandleData> QueryGetExcuter_Candle(string strDBCon, string sqlQuery)
public static List<CandleData> QueryGetExecuter_Candle(string strDBCon, string sqlQuery)
{
var returnData = new List<CandleData>();
@@ -112,6 +116,13 @@ namespace Million.DbManagement
using (var rdr = cmd.ExecuteReader())
{
var columns = new List<string>();
for (int i = 0; i < rdr.FieldCount; i++)
{
columns.Add(rdr.GetName(i));
}
while (rdr.Read())
{
var dateTime = rdr["DateTime"]?.ToString();
@@ -122,6 +133,8 @@ namespace Million.DbManagement
double.TryParse(rdr["MoneyVolume"]?.ToString(), out var moneyVolume);
int.TryParse(rdr["CandleTimeType"]?.ToString(), out var candleTimeType);
var data = new CandleData();
data.DateTime = Convert.ToDateTime(dateTime);
data.StartValue = startValue;
@@ -131,6 +144,12 @@ namespace Million.DbManagement
data.MoneyVolume = moneyVolume;
data.CandleTimeType = candleTimeType;
if (columns.Any(t => t == "TransactionAmount"))
{
double.TryParse(rdr["TransactionAmount"]?.ToString(), out var transactionAmount);
data.TransactionAmount = transactionAmount;
}
returnData.Add(data);
}
}
@@ -149,13 +168,65 @@ namespace Million.DbManagement
return returnData;
}
/// <summary>
/// Get Log Data
/// </summary>
/// <param name="strDBCon"></param>
/// <param name="sqlQuery"></param>
/// <returns></returns>
public static List<Dictionary<string, object>> QueryGetExecuter_MainLog(string strDBCon, string userName, DateTime startDate, DateTime endDate)
{
var returnData = new List<Dictionary<string, object>>();
var sqlQuery = string.Format(@"SELECT * FROM [ResultData].[dbo].[MainLog] WHERE UserName = '{0}' AND SavedDateTime >= '{1}' AND SavedDateTime < '{2}",
userName, startDate.ToString("yyyy-MM-dd HH:mm:ss"), endDate.ToString("yyyy-MM-dd HH:mm:ss"));
using (var conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
try
{
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var dateTime = rdr["SavedDateTime"]?.ToString();
var data = new Dictionary<string, object>();
data["SavedDateTime"] = Convert.ToDateTime(dateTime);
data["UserName"] = rdr["UserName"].ToString();
data["Data"] = rdr["Data"].ToString();
returnData.Add(data);
}
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
conn.Close();
return returnData;
}
}
}
return returnData;
}
/// <summary>
/// Get Candle Data List
/// </summary>
/// <param name="strDBCon"></param>
/// <param name="sqlQuery"></param>
/// <returns></returns>
public static List<CandleData> QueryGetExcuterTest_Candle(string strDBCon, string sqlQuery)
public static List<CandleData> QueryGetExecuterTest_Candle(string strDBCon, string sqlQuery)
{
var returnData = new List<CandleData>();
@@ -186,7 +257,7 @@ namespace Million.DbManagement
/// </summary>
/// <param name="strDBCon">conn</param>
/// <param name="sqlQuery">create table sql</param>
public static void QueryUpdateExcuter(string strDBCon, string sqlQuery)
public static void QueryUpdateExecuter(string strDBCon, string sqlQuery)
{
SqlConnection conn = null;
SqlDataReader rdr = null;
@@ -217,11 +288,145 @@ namespace Million.DbManagement
}
}
/// <summary>
/// Insert Saved Buyer Result Data
/// </summary>
/// <param name="userName"></param>
/// <param name="mode"></param>
/// <param name="savedDateTime"></param>
/// <param name="data"></param>
/// <returns></returns>
public static bool QueryInsertExecuter_SavedBuyerResultData(string userName, string mode, DateTime savedDateTime, SearchResult data)
{
var binaryFormatter = new BinaryFormatter();
var sqlQuery = DbServiceFunctions.InsertSavedBuyerResultDataQuery(userName, mode, savedDateTime);
var strDBCon = CommonProperty.DbConnectionResultData;
SqlConnection conn = null;
SqlDataReader rdr = null;
try
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
var setupListStream = new MemoryStream();
binaryFormatter.Serialize(setupListStream, data);
setupListStream.Position = 0;
cmd.Parameters.Add("@data", SqlDbType.VarBinary, (int)setupListStream.Length).Value = setupListStream.ToArray();
conn.Open();
using (rdr = cmd.ExecuteReader())
{
}
}
conn.Close();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
return false;
}
}
/// <summary>
/// SavedResultData List 삭제
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public static bool QueryDeleteExecuter_SavedResultData(List<int> ids)
{
var sqlQuery = @"DELETE FROM [ResultData].[dbo].[SavedResultData] WHERE Id in(" + string.Join(",", ids) + ")";
var strDBCon = CommonProperty.DbConnectionResultData;
SqlConnection conn = null;
SqlDataReader rdr = null;
try
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
conn.Open();
using (rdr = cmd.ExecuteReader())
{
}
}
conn.Close();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
return false;
}
}
/// <summary>
/// SavedResultData 삭제
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static bool QueryDeleteExecuter_SavedResultData(int id)
{
var sqlQuery = @"DELETE FROM [ResultData].[dbo].[SavedResultData] WHERE Id =" + id;
var strDBCon = CommonProperty.DbConnectionResultData;
SqlConnection conn = null;
SqlDataReader rdr = null;
try
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
conn.Open();
using (rdr = cmd.ExecuteReader())
{
}
}
conn.Close();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
return false;
}
}
/// <summary>
/// Insert SavedResultData
/// </summary>
/// <param name="item"></param>
public static bool QueryInsertExcuter_SavedResultData(SavedResultData item)
public static bool QueryInsertExecuter_SavedResultData(SavedResultData item)
{
var baBinaryFormatter = new BinaryFormatter();
@@ -275,12 +480,80 @@ namespace Million.DbManagement
}
}
public static bool QueryInsertExecuter_SavedResultDataTemp(SavedResultData item)
{
try
{
string serverIP = CommonProperty.DbServerIp;
int serverPort = 6666;
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(item));
TcpClient client = new TcpClient(serverIP, serverPort);
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
return true;
}
catch(Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
return false;
}
}
/// <summary>
/// Insert Log
/// </summary>
/// <param name="savedData"></param>
/// <returns></returns>
public static bool QueryInsertExecuter_MainLog(DateTime savedData, string user, string data)
{
var sqlQuery = string.Format(@"INSERT INTO [ResultData].[dbo].[MainLog] VALUES('{0}', '{1}', '{2}');",
user, savedData.ToString("yyyy-MM-dd HH:mm:ss"), data);
var strDBCon = CommonProperty.DbConnectionResultData;
SqlConnection conn = null;
SqlDataReader rdr = null;
try
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
conn.Open();
using (rdr = cmd.ExecuteReader())
{
}
}
conn.Close();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
return false;
}
}
/// <summary>
/// insert RealTimeIndicator
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static bool QueryInsertExcuter_RealTimeIndicator(SavedResultData item, string name)
public static bool QueryInsertExecuter_RealTimeIndicator(SavedResultData item, string name)
{
var baBinaryFormatter = new BinaryFormatter();
@@ -334,7 +607,7 @@ namespace Million.DbManagement
/// <param name="item"></param>
/// <param name="name"></param>
/// <returns></returns>
public static bool QueryInsertExcuter_VerifyTickerData(List<Dictionary<string, object>> data, DateTime savedDateTime)
public static bool QueryInsertExecuter_VerifyTickerData(List<Dictionary<string, object>> data, DateTime savedDateTime)
{
var baBinaryFormatter = new BinaryFormatter();
@@ -386,7 +659,7 @@ namespace Million.DbManagement
/// </summary>
/// <param name="analysis"></param>
/// <param name="item"></param>
public static bool QueryInsertExcuter_SavedAnalysisData(SavedAnalysisData savedAnalysisData, SavedResultData savedResultData)
public static bool QueryInsertExecuter_SavedAnalysisData(SavedAnalysisData savedAnalysisData, SavedResultData savedResultData)
{
var baBinaryFormatter = new BinaryFormatter();
@@ -430,16 +703,174 @@ namespace Million.DbManagement
}
}
/// <summary>
/// Saved Get Buyer Result Data
/// </summary>
/// <param name="userName"></param>
/// <param name="mode"></param>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static List<SearchResult> QueryGetExecuter_SavedBuyerResultData(string userName, string mode, DateTime startDate, DateTime endDate)
{
var returnData = new List<SearchResult>();
var sqlQuery = string.Format(@"SELECT * FROM [ResultData].[dbo].[SavedBuyerResultData] WHERE [Mode] = '{0}' AND [UserName] = '{1}'
AND [SavedDateTime] >= '{2}' AND [SavedDateTime] <= '{3}';",
mode, userName, startDate.ToString("yyyy-MM-dd HH:mm:ss"), endDate.ToString("yyyy-MM-dd HH:mm:ss"));
var strDBCon = CommonProperty.DbConnectionResultData;
using (var conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
try
{
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var data = new SearchResult();
data = (SearchResult)GetBinaryConvertClass(rdr, "Data");
returnData.Add(data);
}
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
conn.Close();
return returnData;
}
}
}
return returnData;
}
/// <summary>
/// Get Ticerk List
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static List<Dictionary<string, object>> QueryGetExecuter_VerifyTickerData(DateTime startDate, DateTime endDate)
{
var returnData = new List<Dictionary<string, object>>();
var sqlQuery = string.Format(@"SELECT * FROM [ResultData].[dbo].[VerifyTickerData] WHERE [SavedDateTime] >= '{0}' AND [SavedDateTime] <= '{1}';",
startDate.ToString("yyyy-MM-dd HH:mm:ss"), endDate.ToString("yyyy-MM-dd HH:mm:ss"));
var strDBCon = CommonProperty.DbConnectionResultData;
using (var conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
try
{
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var data = (List<Dictionary<string, object>>)GetBinaryConvertClass(rdr, "data");
returnData.AddRange(data);
}
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
conn.Close();
return returnData;
}
}
}
return returnData;
}
/// <summary>
/// SavedResultData의 데이터를 기준으로 SearchResultList를 포함
/// </summary>
/// <param name="data"></param>
/// <param name="id"></param>
/// <returns></returns>
public static SavedResultData QueryGetExecuter_SearchResultData(SavedResultData data)
{
if (data != null && data.Id > 0)
{
var sqlQuery = @"SELECT [SearchResultList] FROM [ResultData].[dbo].[SavedResultData] WHERE [Id] = " + data.Id;
var strDBCon = CommonProperty.DbConnectionResultData;
using (var conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
try
{
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
data.SearchResultList = (List<SearchResult>)GetBinaryConvertClass(rdr, "SearchResultList");
}
}
conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
conn.Close();
return data;
}
}
}
}
return data;
}
/// <summary>
/// Get SavedResultData
/// idList가 null일 경우 전체 다 가져옴
/// </summary>
/// <param name="idList"></param>
/// <returns></returns>
public static List<SavedResultData> QueryGetExcuter_SavedResultData(List<int> idList = null, bool includeFolder = true)
public static List<SavedResultData> QueryGetExecuter_SavedResultData(List<int> idList = null, bool includeFolder = true)
{
//,[SellExceptionRegularExpression]
var returnData = new List<SavedResultData>();
var sqlQuery = "SELECT * FROM [ResultData].[dbo].[SavedResultData] WHERE [Type] IN('Data'";
var sqlQuery = @"SELECT [Id]
,[ParentId]
,[Name]
,[StartDateTime]
,[EndDateTime]
,[SavedDateTime]
,[BuySetupList]
,[SellSetupList]
,[BuyRegularExpression]
,[SellRegularExpression]
,[SellExceptionRegularExpression]
,[ResultDataCount]
,[WinRate]
,[ProfitRate]
,[FirstProfitRate]
,[FirstWinRate]
,[ExchangePlace]
,[Type]
,[SaveResultType]
,[Description] FROM [ResultData].[dbo].[SavedResultData] WHERE [Type] IN('Data'";
if (includeFolder)
sqlQuery += ",'Folder'";
@@ -478,7 +909,7 @@ namespace Million.DbManagement
var data = new SavedResultData();
data.BuySetupList = (List<object>)GetBinaryConvertClass(rdr, "BuySetupList");
data.SellSetupList = (List<object>)GetBinaryConvertClass(rdr, "SellSetupList");
data.SearchResultList = (List<SearchResult>)GetBinaryConvertClass(rdr, "SearchResultList");
//data.SearchResultList = (List<SearchResult>)GetBinaryConvertClass(rdr, "SearchResultList");
int.TryParse(rdr["Id"]?.ToString(), out var id);
data.Id = id;
@@ -497,6 +928,7 @@ namespace Million.DbManagement
data.SavedDateTime = Convert.ToDateTime(rdr["SavedDateTime"]?.ToString());
data.BuyRegularExpression = rdr["BuyRegularExpression"]?.ToString();
data.SellRegularExpression = rdr["SellRegularExpression"]?.ToString();
data.SellExceptionRegularExpression = rdr["SellExceptionRegularExpression"]?.ToString();
int.TryParse(rdr["ResultDataCount"]?.ToString(), out var resultDataCount);
data.ResultDataCount = resultDataCount;
@@ -537,7 +969,7 @@ namespace Million.DbManagement
/// </summary>
/// <param name="resultIdList"></param>
/// <returns></returns>
public static List<SavedAnalysisData> QueryGetExcuter_SavedAnalysisData(List<int> resultIdList)
public static List<SavedAnalysisData> QueryGetExecuter_SavedAnalysisData(List<int> resultIdList)
{
var returnData = new List<SavedAnalysisData>();
var sqlQuery = "SELECT * FROM [ResultData].[dbo].[SavedAnalysisData] WHERE ";
@@ -617,7 +1049,7 @@ namespace Million.DbManagement
/// 실시간 Indicator 가져오는 함수
/// </summary>
/// <returns></returns>
public static List<Dictionary<string, object>> QueryGetExcuter_RealTimeIndicator()
public static List<Dictionary<string, object>> QueryGetExecuter_RealTimeIndicator()
{
var returnData = new List<Dictionary<string, object>>();
var sqlQuery = "SELECT * FROM [ResultData].[dbo].[RealTimeIndicator]";
@@ -646,7 +1078,7 @@ namespace Million.DbManagement
data["BuyRegularExpression"] = rdr["BuyRegularExpression"]?.ToString();
data["SellRegularExpression"] = rdr["SellRegularExpression"]?.ToString();
data["SellExceptionRegularExpression"] = rdr["SellExceptionRegularExpression"]?.ToString();
returnData.Add(data);
}
}

View File

@@ -8,6 +8,7 @@ using System.Windows.Forms;
using System.Threading.Tasks;
using Million.Manager;
using Million.SaveData;
using DevExpress.Xpo.DB.Helpers;
namespace Million.DbManagement
{
@@ -24,7 +25,7 @@ namespace Million.DbManagement
Id int IDENTITY (1,1) NOT NULL,
SavedResultDataId int NOT NULL,
Name nvarchar(50) NOT NULL,
TreeListFilterString nvarchar(50) NOT NULL,
TreeListFilterString nvarchar(MAX) NOT NULL,
AnalysisDataList varbinary(MAX) NOT NULL,
Description nvarchar(MAX) NULL,
ResultDataCount int NOT NULL,
@@ -51,6 +52,7 @@ namespace Million.DbManagement
SellSetupList varbinary(MAX) NULL,
BuyRegularExpression varchar(100) NOT NULL,
SellRegularExpression varchar(100) NOT NULL,
SellExceptionRegularExpression varchar(100) NULL,
SearchResultList varbinary(MAX) NULL,
ResultDataCount int NOT NULL,
WinRate float NOT NULL,
@@ -78,10 +80,50 @@ namespace Million.DbManagement
BuySetupList varbinary(MAX) NULL,
SellSetupList varbinary(MAX) NULL,
BuyRegularExpression varchar(100) NOT NULL,
SellRegularExpression varchar(100) NOT NULL
SellRegularExpression varchar(100) NOT NULL,
SellExceptionRegularExpression varchar(100) NOT NULL,
)";
}
/// <summary>
/// Create Main Log Table
/// </summary>
/// <returns></returns>
public static string CreateMainLogTableQuery()
{
return @"if not exists (select * from sysobjects where name='MainLog' and xtype='U')
create table " + "\"MainLog\"" + @"(
UserName nvarchar(50) NOT NULL,
SavedDateTime datetime NULL,
Data nvarchar(MAX) NOT NULL
)";
}
/// <summary>
/// Create Saved Buyer Result Table
/// </summary>
/// <returns></returns>
public static string CreateSavedBuyerResultDataTableQuery()
{
return @"if not exists (select * from sysobjects where name='SavedBuyerResultData' and xtype='U')
create table " + "\"SavedBuyerResultData\"" + @"(
UserName nvarchar(50) NOT NULL,
SavedDateTime datetime NULL,
Mode nvarchar(50) NOT NULL,
Data varbinary(MAX) NULL,
)";
}
/// <summary>
/// Select Main Log Table
/// </summary>
/// <returns></returns>
public static string SelectMainLogQuery()
{
return @"SELECT * FROM [ResultData].[dbo].[MainLog]";
}
/// <summary>
/// DB Market 테이블 생성
/// </summary>
@@ -106,6 +148,23 @@ namespace Million.DbManagement
return resultstring;
}
public static string CreateMarketTable_ToDB_All()
{
var tableName = "AllDataTable";
return @"if not exists (select * from sysobjects where name='" + tableName + @"' and xtype='U')
create table " + "\"" + tableName + "\"" + @"(
CoinFullName nvarchar(50) not null,
DateTime datetime not null,
StartValue float not null,
EndValue float not null,
HighValue float not null,
LowValue float not null,
MoneyVolume float not null,
TransactionAmount float not null,
CandleTimeType int not null
); ";
}
/// <summary>
/// DB 거래소 내 Market 테이블 생성
/// </summary>
@@ -151,7 +210,7 @@ namespace Million.DbManagement
var strDbCon = $"{CommonProperty.DbConnectionStr}Market";
var subSql = "";
if(payment != null)
if (payment != null)
{
subSql = string.Format("AND [Payment] = '{0}'", payment);
}
@@ -159,7 +218,7 @@ namespace Million.DbManagement
// Query문 만들기
var sqlQuery = string.Format("select * from dbo.{0} where IsValid = 1 {1};", tableName, subSql);
return DBConnection.QueryGetExcuter_Market(strDbCon, sqlQuery);
return DBConnection.QueryGetExecuter_Market(strDbCon, sqlQuery);
}
/// <summary>
@@ -172,32 +231,32 @@ namespace Million.DbManagement
public static CandleDataList GetCandleData(MarketData marketData, DateTime startDate, DateTime endDate, MCandleTimeType candleTimeType = MCandleTimeType.M1)
{
var returnData = new CandleDataList();
if(marketData == null)
if (marketData == null)
{
return returnData;
}
var strDbCon = CommonProperty.DbConnectionStr + marketData.ExchangePlace;
if (candleTimeType == MCandleTimeType.M1 || candleTimeType == MCandleTimeType.M3 || candleTimeType == MCandleTimeType.M5 ||
candleTimeType == MCandleTimeType.M10 | candleTimeType == MCandleTimeType.M15|| candleTimeType == MCandleTimeType.M30)
startDate = startDate.AddMinutes(-72 * (int)candleTimeType);
else if(candleTimeType == MCandleTimeType.H1 | candleTimeType == MCandleTimeType.H4)
candleTimeType == MCandleTimeType.M10 | candleTimeType == MCandleTimeType.M15 || candleTimeType == MCandleTimeType.M30)
startDate = startDate.AddMinutes(-80 * (int)candleTimeType);
else if (candleTimeType == MCandleTimeType.H1 | candleTimeType == MCandleTimeType.H4)
{
var val = 1;
if (candleTimeType == MCandleTimeType.H4)
val = 4;
startDate = startDate.AddHours(-72 * val);
startDate = startDate.AddHours(-80 * val);
}
else if(candleTimeType == MCandleTimeType.D1)
startDate = startDate.AddDays(-72 * 1);
else if (candleTimeType == MCandleTimeType.D1)
startDate = startDate.AddDays(-80 * 1);
else if (candleTimeType == MCandleTimeType.W1)
startDate = startDate.AddDays(-72 * 7);
startDate = startDate.AddDays(-80 * 7);
else if (candleTimeType == MCandleTimeType.MT1)
startDate = startDate.AddMonths(-72);
startDate = startDate.AddMonths(-80);
var sqlQuery = string.Format(@"SELECT [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [DateTime] >= '{1}' AND [DateTime] < '{2}' AND [CandleTimeType] = {3} ORDER BY [DateTime] ASC", marketData.CoinFullName, startDate.ToString("yyyy-MM-dd HH:mm:ss"), endDate.ToString("yyyy-MM-dd HH:mm:ss"), (int)candleTimeType);
var dataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var dataList = DBConnection.QueryGetExecuter_Candle(strDbCon, sqlQuery);
if (dataList == null) return returnData;
@@ -225,24 +284,24 @@ namespace Million.DbManagement
if (candleTimeType == MCandleTimeType.M1 || candleTimeType == MCandleTimeType.M3 || candleTimeType == MCandleTimeType.M5 ||
candleTimeType == MCandleTimeType.M10 | candleTimeType == MCandleTimeType.M15 || candleTimeType == MCandleTimeType.M30)
startDate = startDate.AddMinutes(-72 * (int)candleTimeType);
startDate = startDate.AddMinutes(-80 * (int)candleTimeType);
else if (candleTimeType == MCandleTimeType.H1 | candleTimeType == MCandleTimeType.H4)
{
var val = 1;
if (candleTimeType == MCandleTimeType.H4)
val = 4;
startDate = startDate.AddHours(-72 * val);
startDate = startDate.AddHours(-80 * val);
}
else if (candleTimeType == MCandleTimeType.D1)
startDate = startDate.AddDays(-72 * 1);
startDate = startDate.AddDays(-80 * 1);
else if (candleTimeType == MCandleTimeType.W1)
startDate = startDate.AddDays(-72 * 7);
startDate = startDate.AddDays(-80 * 7);
else if (candleTimeType == MCandleTimeType.MT1)
startDate = startDate.AddMonths(-72);
startDate = startDate.AddMonths(-80);
var sqlQuery = string.Format(@"SELECT TOP({0}) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{1}] WHERE [DateTime] >= '{2}' AND [CandleTimeType] = {3} ORDER BY [DateTime] ASC", count, marketData.CoinFullName, startDate.ToString("yyyy-MM-dd HH:mm:ss"), ((int)candleTimeType).ToString());
var dataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var dataList = DBConnection.QueryGetExecuter_Candle(strDbCon, sqlQuery);
if (dataList == null) return returnData;
@@ -252,7 +311,59 @@ namespace Million.DbManagement
return returnData;
}
/// <summary>
/// 전체 데이터를 하나의 테이블에서 검색(Old, New)
/// </summary>
/// <param name="marketNameList"></param>
/// <param name="databaseName"></param>
/// <param name="candleTimeType"></param>
/// <returns></returns>
public static List<CandleDataList> GetOldNewDataList_FromDB_All(List<MarketData> marketNameList, string databaseName, MCandleTimeType candleTimeType = MCandleTimeType.M1)
{
var returnData = new List<CandleDataList>();
var strDbCon = CommonProperty.DbConnectionStr + databaseName;
//최신 데이터
foreach (var item in marketNameList)
{
var data = new CandleDataList();
data.ConGoodsData = item;
var sqlQuery = string.Format(@"SELECT TOP(1) * FROM [AllDataTable] WHERE [CandleTimeType] = {0} ORDER BY [DateTime] DESC", ((int)candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExecuter_Candle(strDbCon, sqlQuery);
if (recentlyDataList.Count > 0)
{
recentlyDataList[0].CandleType = CandleType.New;
data.CandleDataLists_Im = recentlyDataList;
}
else
{
data.CandleDataLists_Im = new List<CandleData>();
}
returnData.Add(data);
}
//오래된 데이터
foreach (var item in returnData)
{
if (item.CandleDataLists_Im.Count == 0)
continue;
// 1개라도 있을 경우
var sqlQuery = string.Format("SELECT TOP(1) * FROM [AllDataTable] WHERE [CandleTimeType] = {0} ORDER BY [DateTime] ASC", ((int)candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExecuter_Candle(strDbCon, sqlQuery);
if (recentlyDataList.Count > 0)
{
recentlyDataList[0].CandleType = CandleType.Old;
item.CandleDataLists_Im.AddRange(recentlyDataList);
}
}
return returnData;
}
/// <summary>
/// DB에서 각 Market 별 가장 최신, 오래된 데이터 한개씩 가져오기
@@ -272,8 +383,8 @@ namespace Million.DbManagement
var data = new CandleDataList();
data.ConGoodsData = item;
var sqlQuery = string.Format(@"SELECT TOP(1) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [CandleTimeType] = {1} ORDER BY [DateTime] DESC", item.CoinFullName, ((int) candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var sqlQuery = string.Format(@"SELECT TOP(1) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [CandleTimeType] = {1} ORDER BY [DateTime] DESC", item.CoinFullName, ((int)candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExecuter_Candle(strDbCon, sqlQuery);
if (recentlyDataList.Count > 0)
{
@@ -296,7 +407,7 @@ namespace Million.DbManagement
// 1개라도 있을 경우
var sqlQuery = string.Format("SELECT TOP(1) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [CandleTimeType] = {1} ORDER BY [DateTime] ASC", item.ConGoodsData.CoinFullName, ((int)candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var recentlyDataList = DBConnection.QueryGetExecuter_Candle(strDbCon, sqlQuery);
if (recentlyDataList.Count > 0)
{
recentlyDataList[0].CandleType = CandleType.Old;
@@ -370,6 +481,134 @@ namespace Million.DbManagement
// }
//}
/// <summary>
/// All Data에 Insert
/// </summary>
/// <param name="placeName"></param>
/// <param name="place"></param>
/// <param name="recentlyDbDataList"></param>
/// <param name="candleTimeType"></param>
/// <returns></returns>
public static bool SetCandleData_All(string placeName, ExchangeWebReqType place, List<CandleDataList> recentlyDbDataList, MCandleTimeType candleTimeType = MCandleTimeType.M1)
{
bool flag = false;
//데이터 쌓는 부분은 재귀로 처리할 예정
/**
* 단계 조정
* 아무것도 없을 경우 0
* 있을 경우1
* 완료 2
*/
var insertQuery = "";
foreach (var item in recentlyDbDataList)
{
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
var dateTime = DateTime.Now;
var tableName = item.ConGoodsData.CoinFullName;
int step = 0;
bool firstFlag = true;
var recentlyFlag = true;
switch (place)
{
case ExchangeWebReqType.UpbitCandleStick:
//최신 부터
var recentlyDateTime = new DateTime(1970, 1, 1);
var oldDateTime = new DateTime(1970, 1, 1);
CandleData recentlyData = null;
CandleData oldData = null;
if (item.CandleDataLists_Im.Count > 0)
{
recentlyData = item.CandleDataLists_Im.Find(t => t.CandleType == CandleType.New);
recentlyDateTime = recentlyData.DateTime;
oldData = item.CandleDataLists_Im.Find(t => t.CandleType == CandleType.Old);
oldDateTime = oldData.DateTime;
step = 1;
}
while (true)
{
var webDataList = UpbitApi.GetCandleStics(item.ConGoodsData.CoinFullName, candleTimeType, dateTime);
var insertDataList = new List<CandleData>();
if (step == 0)
{
insertDataList = webDataList;
}
else if (step == 1)
{
insertDataList.AddRange(webDataList.Where(t => t.DateTime > recentlyDateTime).ToList());
insertDataList.AddRange(webDataList.Where(t => t.DateTime < oldDateTime).ToList());
}
insertDataList = insertDataList.OrderBy(t => t.DateTime).ToList();
if (firstFlag)
{
if (insertDataList.Count > 0)
{
insertDataList.Remove(insertDataList[insertDataList.Count - 1]);
firstFlag = false;
}
else
{
flag = true;
}
}
//데이터 insert
foreach (var data in insertDataList)
{
insertQuery += string.Format("INSERT INTO [dbo].[AllDataTable]([CoinFullName],[DateTime],[StartValue], [EndValue], [HighValue], [LowValue], [MoneyVolume], [CandleTimeType], [TransactionAmount]) VALUES ('{0}', '{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
tableName, data.DateTime.ToString("yyyy-MM-dd HH:mm:ss"), data.StartValue, data.EndValue, data.HighValue, data.LowValue, data.MoneyVolume, data.CandleTimeType, data.TransactionAmount);
}
if (insertDataList.Count == 0)
{
if (recentlyFlag)
{
recentlyFlag = false;
dateTime = oldDateTime;
}
else
{
step = 2;
}
}
else
{
dateTime = insertDataList[0].DateTime;
}
if (step == 2)
break;
//초당 8회 이상안됨 (0.125초)
if (!string.IsNullOrWhiteSpace(insertQuery))
DBConnection.QueryUpdateExecuter(DbConnectionStr + placeName, insertQuery);
Thread.Sleep(60);
insertQuery = "";
}
break;
case ExchangeWebReqType.BithumbCandleTicker:
break;
}
sw.Stop();
Console.WriteLine("Completed Set Candle Data of Table : " + tableName + ", Times : " + sw.Elapsed.ToString());
}
return flag;
}
/// <summary>
/// 최신값, 가장오래된 값을 기준으로 Data 호출 및 처리
/// </summary>
@@ -436,12 +675,15 @@ namespace Million.DbManagement
insertDataList = insertDataList.OrderBy(t => t.DateTime).ToList();
if (firstFlag) {
if(insertDataList.Count > 0) {
if (firstFlag)
{
if (insertDataList.Count > 0)
{
insertDataList.Remove(insertDataList[insertDataList.Count - 1]);
firstFlag = false;
}
else {
else
{
flag = true;
}
}
@@ -474,7 +716,7 @@ namespace Million.DbManagement
break;
//초당 8회 이상안됨 (0.125초)
if (!string.IsNullOrWhiteSpace(insertQuery))
DBConnection.QueryUpdateExcuter(DbConnectionStr + placeName, insertQuery);
DBConnection.QueryUpdateExecuter(DbConnectionStr + placeName, insertQuery);
Thread.Sleep(60);
insertQuery = "";
}
@@ -506,18 +748,21 @@ namespace Million.DbManagement
,[SellSetupList]
,[BuyRegularExpression]
,[SellRegularExpression]
,[SellExceptionRegularExpression]
)VALUES(
'{0}',
'{1}',
@BuySetupList,
@SellSetupList,
'{2}',
'{3}'
'{3}',
'{4}'
);",
name,
item.SavedDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
item.BuyRegularExpression,
item.SellRegularExpression
item.SellRegularExpression,
item.SellExceptionRegularExpression
);
return str;
}
@@ -529,7 +774,7 @@ namespace Million.DbManagement
/// <returns></returns>
public static string InsertSavedResultDataQuery(SavedResultData item)
{
//,[SellExceptionRegularExpression]
var str = string.Format(@"INSERT INTO [ResultData].[dbo].[SavedResultData]
(
[ParentId]
@@ -551,6 +796,7 @@ namespace Million.DbManagement
,[Type]
,[SaveResultType]
,[Description]
,[SellExceptionRegularExpression]
)VALUES(
'{0}',
'{1}',
@@ -570,7 +816,8 @@ namespace Million.DbManagement
'{12}',
'{13}',
'{14}',
'{15}'
'{15}',
'{16}'
);",
item.ParentId,
item.Name,
@@ -587,7 +834,38 @@ namespace Million.DbManagement
item.ExchangePlace,
item.Type,
item.SaveResultType,
item.Description
item.Description,
item.SellExceptionRegularExpression
);
//,
return str;
}
/// <summary>
/// Saved Buyer Result Query
/// </summary>
/// <param name="userName"></param>
/// <param name="mode"></param>
/// <param name="dateTime"></param>
/// <returns></returns>
public static string InsertSavedBuyerResultDataQuery(string userName, string mode, DateTime dateTime)
{
var str = string.Format(@"INSERT INTO [ResultData].[dbo].[SavedBuyerResultData]
(
[UserName],
[SavedDateTime],
[Mode],
[Data]
)VALUES(
'{0}',
'{1}',
'{2}',
@data);",
userName,
dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
mode
);
return str;
}

View File

@@ -48,7 +48,7 @@ namespace Million.IndicatorConditionSetup
public override string GetKeyName(bool IndexStr = false)
{
var key = "Bol" + Period + Squared;
var key = "Bol" + (Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.하향선 ? "U" : "") + Period + Squared;
if (IndexStr)
return IndexString + key;
return key;
@@ -115,20 +115,37 @@ namespace Million.IndicatorConditionSetup
t_Low += Math.Pow(data[j].LowValue - average_Low, 2);
t_Close += Math.Pow(data[j].EndValue - average, 2);
bol.startValue = average_Open + Squared * Math.Sqrt(t_Open / Period);
bol.highValue = average_High + Squared * Math.Sqrt(t_High / Period);
bol.lowValue = average_Low + Squared * Math.Sqrt(t_Low / Period);
bol.value = average + Squared * Math.Sqrt(t_Close / Period);
if (Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.하향선)
{
bol.startValue = average_Open - Squared * Math.Sqrt(t_Open / Period);
bol.highValue = average_High - Squared * Math.Sqrt(t_High / Period);
bol.lowValue = average_Low - Squared * Math.Sqrt(t_Low / Period);
bol.value = average - Squared * Math.Sqrt(t_Close / Period);
}
else if(Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.상향선)
{
bol.startValue = average_Open + Squared * Math.Sqrt(t_Open / Period);
bol.highValue = average_High + Squared * Math.Sqrt(t_High / Period);
bol.lowValue = average_Low + Squared * Math.Sqrt(t_Low / Period);
bol.value = average + Squared * Math.Sqrt(t_Close / Period);
}
else if(Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.기준선)
{
bol.startValue = average_Open;
bol.highValue = average_High;
bol.lowValue = average_Low + Squared * Math.Sqrt(t_Low / Period);
bol.value = average;
}
IndicatorData.OverChecker(data[i], bol, data[i - 1].IndicatorDic[bolKeyName].indicator_over);
if (bol.overStatus != CommonProperty.OverStatus.None)
{
bol.overlapValue = getTargetValue(Period, sum, Squared, powSum);
bol.overlapValue = getTargetValueTemp(bol.highValue, bol.lowValue, data[i].HighValue, data[i].LowValue);
//bol.overlapValue = getTargetValue(Period, sum, Squared, powSum);
}
total_average -= data[i - Period + 1].EndValue;
}
}
}
@@ -178,24 +195,82 @@ namespace Million.IndicatorConditionSetup
t_Low += Math.Pow(data[j].LowValue - average_Low, 2);
t_Close += Math.Pow(data[j].EndValue - average, 2);
bol.startValue = average_Open + Squared * Math.Sqrt(t_Open / Period);
bol.highValue = average_High + Squared * Math.Sqrt(t_High / Period);
bol.lowValue = average_Low + Squared * Math.Sqrt(t_Low / Period);
bol.value = average + Squared * Math.Sqrt(t_Close / Period);
if (Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.하향선)
{
bol.startValue = average_Open - Squared * Math.Sqrt(t_Open / Period);
bol.highValue = average_High - Squared * Math.Sqrt(t_High / Period);
bol.lowValue = average_Low - Squared * Math.Sqrt(t_Low / Period);
bol.value = average - Squared * Math.Sqrt(t_Close / Period);
}
else if (Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.상향선)
{
bol.startValue = average_Open + Squared * Math.Sqrt(t_Open / Period);
bol.highValue = average_High + Squared * Math.Sqrt(t_High / Period);
bol.lowValue = average_Low + Squared * Math.Sqrt(t_Low / Period);
bol.value = average + Squared * Math.Sqrt(t_Close / Period);
}
else if (Indicator_BolingerOverLine == CommonProperty.Indicator_BolingerOverLine.기준선)
{
bol.startValue = average_Open;
bol.highValue = average_High;
bol.lowValue = average_Low;
bol.value = average;
}
IndicatorData.OverChecker(data[i], bol, data[i - 1].IndicatorDic[bolKeyName].indicator_over);
if (bol.overStatus != CommonProperty.OverStatus.None)
{
bol.overlapValue = getTargetValue(Period, sum, Squared, powSum);
bol.overlapValue = getTargetValueTemp(bol.highValue, bol.lowValue, data[i].HighValue, data[i].LowValue);
//bol.overlapValue = getTargetValue(Period, sum, Squared, powSum);
}
}
private double getTargetValueTemp(double highBolValue, double lowBolValue, double highValue, double lowValue)
{
var bolRate = (highBolValue - lowBolValue) / 1000;
var valRate = (highValue - lowValue) / 1000;
double returnValue = 0;
if (lowBolValue < lowValue)
{
while (true)
{
lowBolValue += bolRate;
lowValue += valRate;
if (lowBolValue > lowValue)
{
returnValue = lowBolValue;
break;
}
else if (lowBolValue > highBolValue)
break;
}
}
else
{
while (true)
{
lowBolValue += bolRate;
lowValue += valRate;
if (lowBolValue < lowValue)
{
returnValue = lowBolValue;
break;
}
else if (lowBolValue > highBolValue)
break;
}
}
return returnValue;
}
private double getBol(List<CandleData> candleDatas,double sum,double candle)
private double getBol(List<CandleData> candleDatas, double sum, double candle)
{
var aver = (sum+ candle) / Period;
var aver = (sum + candle) / Period;
var t = 0.0;
for (int i = 0; i < candleDatas.Count - 1; i++)
@@ -248,11 +323,10 @@ namespace Million.IndicatorConditionSetup
{
sum += parentDatas[i].EndValue;
}
exList = exList.Distinct().ToList();
foreach (var tempVal in exList)
{
result.Add(tempVal, getBol(parentDatas,sum,tempVal));
result.Add(tempVal, getBol(parentDatas, sum, tempVal));
}
return result;

View File

@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Million.CommonProperty;
namespace Million.IndicatorConditionSetup
{
[Serializable]
/// <summary>
/// Compare 조건식
/// </summary>
public class CompareConditionSetup : IndicatorCoditionSetup
{
/// <summary>
/// 기본 데이터
/// </summary>
public string Origin { get; set; }
/// <summary>
/// 조건 데이터
/// </summary>
public string Compare { get; set; }
/// <summary>
/// Compare 할 값
/// </summary>
public CompareType CompareType { get; set; }
/// <summary>
/// Clone
/// </summary>
/// <returns></returns>
public object Clone()
{
var clone = new CompareConditionSetup
{
CandlePriceTypeFirstOver = CandlePriceTypeFirstOver,
OverStatusEnumListFirstOver = OverStatusEnumListFirstOver,
FirstOverSubRegExpression = FirstOverSubRegExpression,
CrossSubRegExpression = CrossSubRegExpression,
CrossCandlePriceType = CrossCandlePriceType,
CrossType = CrossType,
ByBuySellType = ByBuySellType,
IndicatorType = IndicatorType,
SubIndicatorSetupType = SubIndicatorSetupType,
CandlePriceType = CandlePriceType,
IndicatorOver = IndicatorOver,
OverStatusEnumList = OverStatusEnumList,
MCandleTimeType = MCandleTimeType,
Description = Description,
IndexString = IndexString,
Origin = Origin,
Compare = Compare,
CompareType = CompareType
};
return clone;
}
public override string GetKeyName(bool IndexStr = false)
{
var key = "Compare" + Origin + Compare;
if (IndexStr)
return IndexString + key;
return key;
}
}
}

View File

@@ -166,14 +166,20 @@ namespace Million.IndicatorConditionSetup
{
targetValue = ichi.GetOverValue();
}
else if (IndicatorIchmokuOverLine == CommonProperty.Indicator_IchmokuOverLine.선행스팬1OR2중저가)
{
targetValue = ichi.GetDownOverValue();
}
var stValue = targetCandle.StartValue;
var enValue = targetCandle.EndValue;
var tempValue = stValue;
while (tempValue <= enValue)
{
result.Add(tempValue, targetValue);
if (!result.ContainsKey(tempValue))
{
result.Add(tempValue, targetValue);
}
tempValue = OrderbookManager.GetAskPrice(tempValue);
}

View File

@@ -72,9 +72,6 @@ namespace Million.IndicatorConditionSetup
{
return false;
}
if (obj.GetType() == typeof(BolingerConditionSetup))
{
var thisBol = (BolingerConditionSetup)this;
@@ -103,6 +100,14 @@ namespace Million.IndicatorConditionSetup
thisMov.MACandlePriceType == objMov.MACandlePriceType &&
thisMov.MovingAverageType == objMov.MovingAverageType;
}
else if (obj.GetType() == typeof(CompareConditionSetup)) {
var objCompare = (CompareConditionSetup)obj;
var thisCompare = (CompareConditionSetup)this;
return objCompare.Origin == thisCompare.Origin &&
objCompare.Compare == thisCompare.Compare &&
objCompare.CompareType == thisCompare.CompareType;
}
return base.Equals(obj);
}

View File

@@ -119,9 +119,9 @@ namespace Million.IndicatorConditionSetup
if (data[data.Count() - 2].IndicatorDic.ContainsKey(movingKeyName))
{
i = data.Count() - 1;
for(int j= data.Count()-Period;j<i;i++)
for(int j= data.Count()-Period;j<i;j++)
{
var thisValue = GetStockValue(data[i]);
var thisValue = GetStockValue(data[j]);
total_average += thisValue;
endValueList.Add(thisValue);
}
@@ -139,7 +139,7 @@ namespace Million.IndicatorConditionSetup
total_average += thisValue;//단순 이평 계산하기위한 값
endValueList.Add(thisValue);//가중 이평 계산하기위한 값
if (i >= Period - 1)
if (i > Period - 1)
{
if (MaType == CommonProperty.MAType.단순)
{
@@ -165,6 +165,23 @@ namespace Million.IndicatorConditionSetup
total_average -= GetStockValue(data[i - Period + 1]);
endValueList.RemoveAt(0);
}
else if (Period - 1 == 0)
{
//1개일 경우 단순만 해당 봉 데이터 처리
if (MaType == CommonProperty.MAType.단순)
{
var value = 0.0;
if (MACandlePriceType == CommonProperty.CandlePriceType.시가)
value = data[i].StartValue;
else if (MACandlePriceType == CommonProperty.CandlePriceType.고가)
value = data[i].HighValue;
else if (MACandlePriceType == CommonProperty.CandlePriceType.종가)
value = data[i].EndValue;
else if (MACandlePriceType == CommonProperty.CandlePriceType.저가)
value = data[i].LowValue;
mov.value = value;
}
}
}
}
@@ -212,8 +229,8 @@ namespace Million.IndicatorConditionSetup
{
sum+= GetStockValue(parentDatas[i]);
}
foreach(var tempVal in exList)
exList = exList.Distinct().ToList();
foreach (var tempVal in exList)
{
result.Add(tempVal, getSMA(sum, tempVal, period));
}
@@ -222,7 +239,7 @@ namespace Million.IndicatorConditionSetup
{
var percentage = 2 / (period + 1);
var beforeValue = parentDatas[parentDatas.Count - 2].IndicatorDic[GetKeyName()].value;
exList = exList.Distinct().ToList();
foreach (var tempVal in exList)
{
result.Add(tempVal, getEMA(tempVal, beforeValue, percentage));
@@ -237,7 +254,7 @@ namespace Million.IndicatorConditionSetup
}
double dividValue = period * (period + 1) / 2;
var wSum = getWSumLastExcpet(valList);
exList = exList.Distinct().ToList();
foreach (var tempVal in exList)
{
result.Add(tempVal, getWMA(wSum,tempVal,dividValue,period));

View File

@@ -65,7 +65,7 @@ namespace Million
/// <param name="e"></param>
private void barButtonItem_CharView_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
ChartViewerForm chartViewerForm = new ChartViewerForm();
ChartViewerForm chartViewerForm = new ChartViewerForm(null);
chartViewerForm.Show();
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,16 @@
using Million.Data;
using DevExpress.Pdf.Native;
using Million.Data;
using Million.Data.Upbit;
using Million.DbManagement;
using Million.IndicatorConditionSetup;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Humanizer.In;
using static Million.CommonProperty;
namespace Million.Manager
@@ -26,12 +31,19 @@ namespace Million.Manager
/// <param name="distinctIndicator"></param>
/// <returns></returns>
public static Dictionary<MCandleTimeType, List<CandleData>> GetStandardData(List<IndicatorCoditionSetup> totalIndicator, DateTime startDate,
DateTime endDate, MarketData market, List<IndicatorCoditionSetup> distinctIndicator, bool flag = false)
DateTime endDate, MarketData market, List<IndicatorCoditionSetup> distinctIndicator, bool flag = false, List<MCandleTimeType> candleTypes = null)
{
var candleTypeList = totalIndicator.Select(t => t.MCandleTimeType).ToList();
candleTypeList.Add(CommonProperty.MCandleTimeType.M1);
candleTypeList = candleTypeList.Distinct().ToList();
if (candleTypes != null)
{
candleTypeList = candleTypes;
}
else
{
candleTypeList.Add(CommonProperty.MCandleTimeType.M1);
candleTypeList = candleTypeList.Distinct().ToList();
}
var dic = new Dictionary<CommonProperty.MCandleTimeType, List<CandleData>>();
//계산로직에 필요한 Data setting
@@ -45,19 +57,73 @@ namespace Million.Manager
{
setup.excute(candleDataListClass.CandleDataLists_Im);
}
candleDataListClass.CandleDataLists_Im = candleDataListClass.CandleDataLists_Im.OrderBy(t => t.DateTime).ToList();
var list = new List<CandleData>();
if (flag)
{
var parentData = ValidationCheckManager.SplitValidationCandleDataList(candleDataListClass.CandleDataLists_Im, item);
foreach (var parent in parentData) list.AddRange(parent);
dic.Add(item, list);
foreach (var parent in parentData)
list.AddRange(parent);
dic[item] = list;
}
else
dic.Add(item, candleDataListClass.CandleDataLists_Im);
dic[item] = candleDataListClass.CandleDataLists_Im;
}
return dic;
}
/// <summary>
/// Data Indicator Execute
/// </summary>
/// <param name="dataList"></param>
/// <param name="totalIndicatorList"></param>
/// <param name="coinFullName"></param>
/// <returns></returns>
public static Dictionary<MCandleTimeType, List<CandleData>> GetExecuteData(Dictionary<MCandleTimeType, List<CandleDataList>> dataList, List<IndicatorCoditionSetup> totalIndicatorList, string coinFullName)
{
var dic = new Dictionary<MCandleTimeType, List<CandleData>>();
var distinctIndicator = IndicatorSetupManager.Distinct(totalIndicatorList);
foreach (var key in dataList.Keys)
{
var candleDataList = dataList[key].FirstOrDefault(t => t.ConGoodsData.CoinFullName == coinFullName);
dic[key] = candleDataList.CandleDataLists_Im;
var indicatorSetUpList = distinctIndicator.Where(t => t.MCandleTimeType == key).ToList();
foreach (var setup in indicatorSetUpList)
{
setup.excute(dic[key], true);
//setup.excute(dic[key], true);
}
}
return dic;
}
/// <summary>
/// Data Indicator Execute
/// </summary>
/// <param name="dataList"></param>
/// <param name="totalIndicatorList"></param>
/// <returns></returns>
public static Dictionary<MCandleTimeType, List<CandleData>> GetExecuteData(Dictionary<MCandleTimeType, List<CandleData>> dataList, List<IndicatorCoditionSetup> totalIndicatorList)
{
var distinctIndicator = IndicatorSetupManager.Distinct(totalIndicatorList);
foreach (var key in dataList.Keys)
{
var indicatorSetUpList = distinctIndicator.Where(t => t.MCandleTimeType == key).ToList();
foreach (var setup in indicatorSetUpList)
{
setup.excute(dataList[key], true);
}
}
return dataList;
}
/// <summary>
/// Sub Indicator List String 반환 Function
/// </summary>
@@ -67,18 +133,437 @@ namespace Million.Manager
{
// 최초와 cross의 조건먼저 계산이 필요함(선처리)
var parentIndicator = totalIndicator.Where(t => t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.최초돌파 ||
t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스).ToList();
t.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스 || t.IndicatorType == IndicatorType.조건단순비교).ToList();
var subIndStringiList = new List<string>();
foreach (var item in parentIndicator)
{
var subRegExpression = item.FirstOverSubRegExpression;
if (item.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스)
var subRegExpression = "";
if (item.IndicatorType == CommonProperty.IndicatorType.조건단순비교)
{
subRegExpression = ((CompareConditionSetup)item).Origin + "," + ((CompareConditionSetup)item).Compare;
}
else if (item.SubIndicatorSetupType == CommonProperty.SubIndicatorSetupType.크로스)
{
subRegExpression = item.CrossSubRegExpression;
}
else
{
subRegExpression = item.FirstOverSubRegExpression;
}
subIndStringiList.AddRange(subRegExpression.Split(',').ToList());
}
subIndStringiList = subIndStringiList.Distinct().ToList();
return subIndStringiList;
}
/// <summary>
/// Get Recently Data
/// </summary>
/// <param name="dic"></param>
/// <param name="timeType"></param>
/// <param name="realTimeFlag"></param>
/// <returns></returns>
public static CandleData GetRecentlyData(Dictionary<MCandleTimeType, List<CandleData>> dic, MCandleTimeType timeType = MCandleTimeType.M1, bool realTimeFlag = false)
{
CandleData returnData = null;
var list = dic[timeType];
var orderList = list.OrderByDescending(t => t.DateTime).ToList();
if (orderList.Count > 0)
{
if (realTimeFlag)
{
var recentlyList = orderList.Where(t => t.RecentlyDataFlag).ToList();
if (recentlyList.Count > 0)
returnData = recentlyList[0];
}
else
{
returnData = orderList[0];
}
}
// Parent Recently Data는 indicator에 따라 달라질수 있으므로 전부다 처리한 후 초기화
foreach (var data in dic)
{
var recentlyList = data.Value.Where(t => t.RecentlyDataFlag).ToList();
foreach (var recentlyItem in recentlyList)
recentlyItem.RecentlyDataFlag = false;
}
return returnData;
}
/// <summary>
/// Get SearchResult Class Data
/// </summary>
/// <param name="buyCandleData"></param>
/// <param name="sellCandleData"></param>
/// <param name="market"></param>
/// <returns></returns>
public static SearchResult GetBuyerSearchResult(CandleData buyCandleData, CandleData sellCandleData, MarketData market, List<CandleData> buyCandleDatas = null)
{
var result = new SearchResult();
var rate = ((sellCandleData.SellValue - buyCandleData.BuyValue) / buyCandleData.BuyValue) * 100;
result.FirstEarningRate = rate;
result.EndDate = sellCandleData.DateTime;
result.CoinFullName = market.CoinFullName;
result.MarketData = market;
result.BuyEarningRate.Add(rate);
result.BuyValueList.Add(buyCandleData.BuyValue);
result.BuyList.ConGoodsData = market;
if (buyCandleDatas != null) result.BuyList.CandleDataLists_Im = buyCandleDatas;
else result.BuyList.CandleDataLists_Im.Add(buyCandleData);
result.StartDate = buyCandleData.DateTime;
result.SellData = sellCandleData;
result.SellValue = sellCandleData.SellValue;
result.TotalEarningRate = rate;
result.WinCount = rate > 0 ? 1 : 0;
result.LoseCount = rate < 0 ? 1 : 0;
result.FirstWinFlag = rate > 0 ? true : false;
result.BuyCount = buyCandleData.BuyCount;
result.SellCount = sellCandleData.BuyCount;
return result;
}
private static CandleData CreateCandleData(CandleData candle, int timeFlagValue, string timeFlag)
{
var firstData = candle;
if (timeFlag == "minute")
{
var minute = firstData.DateTime.Minute / timeFlagValue * timeFlagValue;
return new CandleData()
{
DateTime = new DateTime(firstData.DateTime.Year, firstData.DateTime.Month, firstData.DateTime.Day, firstData.DateTime.Hour, minute, 0),
HighValue = firstData.HighValue,
StartValue = firstData.StartValue,
LowValue = firstData.LowValue,
EndValue = firstData.EndValue,
RecentlyDataFlag = true,
MoneyVolume = firstData.MoneyVolume
};
}
else if (timeFlag == "hour")
{
var tempDateTime = firstData.DateTime;
tempDateTime = tempDateTime.AddHours(((int)CommonProperty.ExchangeTime.UpbitorBithumb * -1));
var hour = tempDateTime.Hour / timeFlagValue * timeFlagValue;
var dateTime = new DateTime(tempDateTime.Year, tempDateTime.Month, tempDateTime.Day, hour, 0, 0);
dateTime = dateTime.AddHours((int)CommonProperty.ExchangeTime.UpbitorBithumb);
return new CandleData()
{
DateTime = dateTime,
HighValue = firstData.HighValue,
StartValue = firstData.StartValue,
LowValue = firstData.LowValue,
RecentlyDataFlag = true,
EndValue = firstData.EndValue,
MoneyVolume = firstData.MoneyVolume
};
}
else //if (timeFlag == "day")
{
//var hour = firstData.DateTime.Day / timeFlagValue * timeFlagValue;
return new CandleData()
{
DateTime = new DateTime(firstData.DateTime.Year, firstData.DateTime.Month, firstData.DateTime.Day, 0, 0, 0),
HighValue = firstData.HighValue,
StartValue = firstData.StartValue,
LowValue = firstData.LowValue,
RecentlyDataFlag = true,
EndValue = firstData.EndValue,
MoneyVolume = firstData.MoneyVolume
};
}
}
/// <summary>
/// CandleList 만들어주는거
/// </summary>
/// <param name="currentCandleList"></param>
/// <param name="mCandleTimeType"></param>
/// <returns></returns>
public static List<CandleData> GetConvertCandleDataList(List<CandleData> currentCandleList, MCandleTimeType mCandleTimeType)
{
var returnData = new List<CandleData>();
var timeFlag = "minute";
var timeFlagValue = 0;
if (mCandleTimeType < MCandleTimeType.H1)
{
timeFlagValue = (int)mCandleTimeType;
}
else if (mCandleTimeType < MCandleTimeType.D1)
{
timeFlag = "hour";
timeFlagValue = ((int)mCandleTimeType) / 60;
}
else if (mCandleTimeType < MCandleTimeType.W1)
{
timeFlag = "day";
timeFlagValue = 1;
}
if (currentCandleList == null || currentCandleList.Count == 0)
return returnData;
foreach (var item in currentCandleList)
{
var recentlyData = returnData.LastOrDefault();
if (recentlyData == null)
{
returnData.Add(CreateCandleData(item, timeFlagValue, timeFlag));
continue;
}
var coverTime = recentlyData.DateTime;
if (timeFlag == "minute")
{
coverTime = coverTime.AddMinutes(timeFlagValue);
}
else if (timeFlag == "hour")
{
coverTime = coverTime.AddHours(timeFlagValue);
}
else if (timeFlag == "day")
{
coverTime = coverTime.AddDays(timeFlagValue);
}
if (!(recentlyData.DateTime < item.DateTime && item.DateTime < coverTime))
{
returnData.Add(CreateCandleData(item, timeFlagValue, timeFlag));
continue;
}
recentlyData.HighValue = recentlyData.HighValue < item.HighValue ? item.HighValue : recentlyData.HighValue;
recentlyData.LowValue = recentlyData.LowValue < item.LowValue ? recentlyData.LowValue : item.LowValue;
recentlyData.EndValue = item.EndValue;
recentlyData.MoneyVolume += item.MoneyVolume;
recentlyData.RecentlyDataFlag = true;
}
return returnData;
}
/// <summary>
/// 최근 데이터 업데이트 하는 로직
/// </summary>
/// <param name="candleData"></param>
/// <param name="recentlyData"></param>
/// <param name="mCandleTimeType"></param>
/// <param name="newFlag"></param>
/// <returns></returns>
public static CandleData GetRecentlyCandleData(CandleData candleData, CandleData recentlyData, MCandleTimeType mCandleTimeType, ref bool newFlag)
{
var timeFlag = "minute";
var timeFlagValue = 0;
if (mCandleTimeType < MCandleTimeType.H1)
{
timeFlagValue = (int)mCandleTimeType;
}
else if (mCandleTimeType < MCandleTimeType.D1)
{
timeFlag = "hour";
timeFlagValue = ((int)mCandleTimeType) / 60;
}
else if (mCandleTimeType < MCandleTimeType.W1)
{
timeFlag = "day";
timeFlagValue = 1;
}
var flag = false;
if (recentlyData != null)
{
if (timeFlag == "minute")
{
if (candleData.DateTime.Minute % timeFlagValue == 0
|| recentlyData.DateTime.AddMinutes((int)mCandleTimeType) < candleData.DateTime)
{
if (recentlyData.DateTime != candleData.DateTime)
flag = true;
}
}
else if (timeFlag == "hour")
{
var hour = candleData.DateTime.Hour;
if (hour == 0) hour += 24;
if ((hour - (int)CommonProperty.ExchangeTime.UpbitorBithumb) % timeFlagValue == 0
|| recentlyData.DateTime.AddHours((int)mCandleTimeType / 60) < candleData.DateTime)
{
if(timeFlagValue == 1)
{
var temp = candleData.DateTime;
temp = temp.AddMinutes(-1 * temp.Minute);
temp = temp.AddSeconds(-1 * temp.Second);
if (temp != recentlyData.DateTime)
flag = true;
}
else
{
if (recentlyData.DateTime != candleData.DateTime)
flag = true;
}
}
}
else if (timeFlag == "day")
{
if (recentlyData.DateTime != candleData.DateTime)
flag = true;
}
}
else flag = true;
//새로 생성
if (flag)
{
newFlag = true;
var candle = new CandleData();
candle.CandleTimeType = (int)mCandleTimeType;
candle.StartValue = candleData.StartValue;
candle.HighValue = candleData.HighValue;
candle.LowValue = candleData.LowValue;
candle.RecentlyDataFlag = true;
candle.EndValue = candleData.EndValue;
candle.MoneyVolume = candleData.MoneyVolume;
if (timeFlag == "minute")
{
var date = recentlyData.DateTime.AddMinutes((int)mCandleTimeType);
if(recentlyData != null)
{
if (recentlyData.DateTime.AddMinutes((int)mCandleTimeType) < candleData.DateTime)
{
var temp = candleData.DateTime.Minute % timeFlagValue;
date = candleData.DateTime.AddMinutes(-1 * temp);
}
}
else
{
var temp = candleData.DateTime.Minute % timeFlagValue;
date = candleData.DateTime.AddMinutes(-1 * temp);
}
date = date.AddSeconds(-1 * date.Second);
candle.DateTime = date;
}
else if (timeFlag == "hour")
{
var date = candleData.DateTime;
if (recentlyData == null)
{
var hour = candleData.DateTime.Hour;
if (hour == 0) hour += 24;
var temp = (hour - (int)CommonProperty.ExchangeTime.UpbitorBithumb) % timeFlagValue;
date = candleData.DateTime.AddHours(-1 * temp);
}
else
{
date = recentlyData.DateTime.AddHours((int)mCandleTimeType / 60);
if (recentlyData.DateTime.AddHours((int)mCandleTimeType / 60) < candleData.DateTime)
{
var hour = candleData.DateTime.Hour;
if (hour == 0) hour += 24;
var temp = (hour - (int)CommonProperty.ExchangeTime.UpbitorBithumb) % timeFlagValue;
date = candleData.DateTime.AddHours(-1 * temp);
}
}
date = date.AddMinutes(-1 * date.Minute);
date = date.AddSeconds(-1 * date.Second);
candle.DateTime = date;
}
else if (timeFlag == "day")
{
var date = recentlyData.DateTime.AddDays(1);
date = date.AddHours(-1 * date.Hour);
date = date.AddMinutes(-1 * date.Minute);
date = date.AddSeconds(-1 * date.Second);
candle.DateTime = date;
}
return candle;
}
//기존 데이터 엎어쓰기
else
{
recentlyData.HighValue = recentlyData.HighValue < candleData.HighValue ? candleData.HighValue : recentlyData.HighValue;
recentlyData.LowValue = recentlyData.LowValue < candleData.LowValue ? recentlyData.LowValue : candleData.LowValue;
recentlyData.EndValue = candleData.EndValue;
recentlyData.RecentlyDataFlag = true;
recentlyData.MoneyVolume += candleData.MoneyVolume;
return recentlyData;
}
}
/// <summary>
/// 실시간 체결 데이터 1분봉 처리
/// </summary>
/// <param name="realtimeConclusions"></param>
/// <returns></returns>
public static List<CandleData> GetOneMinuteCandleDataFromConclusionList(List<RealtimeConclusion> realtimeConclusions)
{
var returnData = new List<CandleData>();
var dateTimeList = realtimeConclusions.Select(t => t.TradeDateTime.Minute).Distinct().ToList();
foreach (var item in dateTimeList)
{
var list = realtimeConclusions.Where(t => t.TradeDateTime.Minute == item).ToList();
if (list.Count > 0)
{
var valueList = list.Select(t => t.trade_price).ToList();
var startValue = list[0].trade_price;
var endValue = list[list.Count - 1].trade_price;
var highValue = valueList.Max();
var lowValue = valueList.Min();
var candle = new CandleData();
candle.DateTime = list[0].TradeDateTime;
candle.DateTime = candle.DateTime.AddSeconds(candle.DateTime.Second * -1);
candle.CandleTimeType = 1;
candle.StartValue = startValue;
candle.HighValue = highValue;
candle.LowValue = lowValue;
candle.RecentlyDataFlag = true;
candle.EndValue = endValue;
candle.MoneyVolume = list.Select(t => t.trade_volume).Sum();
returnData.Add(candle);
}
}
return returnData;
}
/// <summary>
/// Json 검사
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static bool ValidateJSON(string s)
{
try
{
JToken.Parse(s);
return true;
}
catch (JsonReaderException)
{
return false;
}
}
}
}

View File

@@ -0,0 +1,54 @@
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Million.Manager
{
public static class ExcelExport
{
public static void export(String path ,List<Dictionary<string,object>> data)
{
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
{
// WorkbookPart 객체를 만듭니다.
WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
// WorksheetPart 객체를 만듭니다.
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Sheet 객체를 만듭니다.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" };
sheets.Append(sheet);
// 데이터를 출력합니다.
SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
Row headerRow = new Row();
foreach (string key in data.First().Keys)
{
headerRow.AppendChild(new Cell() { CellValue = new CellValue(key), DataType = CellValues.String });
}
sheetData.AppendChild(headerRow);
foreach (var row in data)
{
Row dataRow = new Row();
foreach (var key in row.Keys)
{
dataRow.AppendChild(new Cell() { CellValue = new CellValue(row[key].ToString()), DataType = CellValues.String });
}
sheetData.AppendChild(dataRow);
}
}
}
}
}

View File

@@ -35,10 +35,12 @@ namespace Million.Manager
else if (setup.GetType() == typeof(PriceRateCondtionSetup))
{
indicatorList.Add((PriceRateCondtionSetup)setup);
}else if(setup.GetType() == typeof(CompareConditionSetup))
{
indicatorList.Add((CompareConditionSetup)setup);
}
}
return indicatorList;
}
@@ -72,6 +74,7 @@ namespace Million.Manager
market = tableList.FirstOrDefault(t => t.CoinFullName == "KRW-BTC");
}
var distinctIndicator = Distinct(totalIndicators);
// 총 데이터
@@ -89,8 +92,9 @@ namespace Million.Manager
/// <param name="endDate"></param>
/// <returns></returns>
public static Dictionary<MCandleTimeType, List<CandleData>> CalculateIndicator(Dictionary<MCandleTimeType, List<CandleData>> dic,
List<IndicatorCoditionSetup> totalIndicators, DateTime startDate, DateTime endDate,string coinFullName = null, bool recentlyDataFlag = false)
List<IndicatorCoditionSetup> totalIndicators, DateTime startDate, DateTime endDate,string coinFullName = null, bool recentlyDataFlag = false, CandleData buyData = null)
{
dic[MCandleTimeType.M1] = dic[MCandleTimeType.M1].Where(t => startDate <= t.DateTime && t.DateTime < endDate).ToList();
// Sub Indicator string list 반환
var subIndStringList = DataManager.GetSubIndicatorStringList(totalIndicators);
@@ -100,7 +104,7 @@ namespace Million.Manager
// 선처리
CalculateManager.GetCalculateIndicator(totalIndicators, subIndStringList, null, startDate,
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, coinFullName);
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, coinFullName, buyData);
var totalIndi = totalIndicators.Select(t => t.IndexString).ToList();
@@ -110,7 +114,7 @@ namespace Million.Manager
// 후처리
CalculateManager.GetCalculateIndicator(totalIndicators, totalIndi, null, startDate,
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, coinFullName);
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, coinFullName, buyData);
return dic;
}
}

View File

@@ -0,0 +1,220 @@
using Million.Data;
using Million.Data.Upbit;
using Million.DbManagement;
using Million.IndicatorConditionSetup;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Million.CommonProperty;
namespace Million.Manager
{
/// <summary>
/// 프로그램 처음 실행 할 때 필요한 모든 데이터 Load Manager Class
/// </summary>
public static class InitManager
{
#region Common
public static void InitFunc(string marketName, CommonProperty.PaymentType payment, CommonProperty.ExchangePlace placeType = ExchangePlace.Upbit)
{
DbServiceFunctions.GetMarketTable_FromDB(marketName, Enum.GetName(typeof(PaymentType), payment));
// Result Data DB에 생성
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedAnalysisDataTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedResultDataTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateRealTimeIndicatorTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateMainLogTableQuery());
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionResultData, DbServiceFunctions.CreateSavedBuyerResultDataTableQuery());
// Market Table없으면 생성해주기
foreach (var placeName in GetMarketList())
{
var createTableSql = Million.DbManagement.DbServiceFunctions.CreateMarketTableQuery(placeName);
Million.DbManagement.DBConnection.QueryUpdateExecuter
(CommonProperty.DbConnectionMarket, createTableSql);
}
UpdateMarketTableOfPlace(placeType, payment);
}
public static void GetRecentlyMarketOfPlaceList(CommonProperty.ExchangePlace placeType = ExchangePlace.Upbit)
{
CommonProperty.recentlyMarketOfPlaceList = new List<MarketData>();
switch (placeType)
{
case (int)CommonProperty.ExchangePlace.Upbit:
CommonProperty.recentlyMarketOfPlaceList = CommonProperty.UpbitApi.GetMarketDatas();
break;
//case (int)CommonProperty.ExchangePlace.Bithumb:
// marketList = Million.DbManagement.DbServiceFunctions.GetMarketTable_FromDB(
// comboBoxEdit_ExchangePlace.SelectedItem.ToString());
// break;
}
}
/// <summary>
/// DB에 있는 Market 정보 Update
/// </summary>
/// <param name="placeType"></param>
public static void UpdateMarketTableOfPlace(CommonProperty.ExchangePlace placeType, PaymentType payment)
{
var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList;
// 비교
// insert (신규)
var insertData = new List<MarketData>();
var sqlQuery = "";
GetRecentlyMarketOfPlaceList(placeType);
foreach (var data in CommonProperty.recentlyMarketOfPlaceList)
{
if (data.Payment != payment.ToString()) continue;
if (!dbMarketDataList.Any(t => t.CoinFullName == data.CoinFullName))
sqlQuery += string.Format(
"INSERT INTO [dbo].[{0}]([CoinFullName], [ExchangePlace], [KorName], [CoinName], [Payment], [IsValid]) VALUES ('{1}','{2}','{3}','{4}','{5}',{6})",
placeType.ToString(), data.CoinFullName,
data.ExchangePlace, data.KorName, data.CoinName, data.Payment, 1);
}
foreach (var data in dbMarketDataList)
{
if (!CommonProperty.recentlyMarketOfPlaceList.Any(t => t.CoinFullName == data.CoinFullName) && data.IsValid)
sqlQuery += string.Format(
"UPDATE [dbo].[{0}] SET IsValid = 0 WHERE [CoinFullName] = '{1}'",
placeType.ToString(),
data.CoinFullName);
}
if (!string.IsNullOrWhiteSpace(sqlQuery))
Million.DbManagement.DBConnection.QueryUpdateExecuter(CommonProperty.DbConnectionMarket, sqlQuery);
GetRecentlyMarketOfPlaceList(placeType);
}
/// <summary>
/// Indicator Type List Return
/// </summary>
/// <returns></returns>
public static string[] GetIndicatorTypeList()
{
return Enum.GetNames(enumType: typeof(CommonProperty.IndicatorType));
}
/// <summary>
/// Market List Return
/// </summary>
/// <returns></returns>
public static string[] GetMarketList()
{
return Enum.GetNames(enumType: typeof(Million.CommonProperty.ExchangePlace));
}
/// <summary>
/// Patment List Return
/// </summary>
/// <returns></returns>
public static string[] GetPaymentList()
{
return Enum.GetNames(enumType: typeof(Million.CommonProperty.PaymentType));
}
/// <summary>
/// Candle Time Type Return
/// </summary>
/// <returns></returns>
public static string[] GetCandleTimeTypes()
{
return Enum.GetNames(enumType: typeof(Million.CommonProperty.MCandleTimeType));
}
#endregion
#region Buyer
/// <summary>
/// Buyer 관련 Init
/// </summary>
/// <param name="checkData"></param>
/// <param name="overlapBuyManagementList"></param>
/// <param name="totalIndicatorList"></param>
public static void SettingInit(bool checkData, Dictionary<string, bool> overlapBuyManagementList, List<IndicatorCoditionSetup> totalIndicatorList)
{
var coinFullNameList = CommonProperty.selectedMarketOfPlaceList.Select(t => t.CoinFullName).ToList();
if (overlapBuyManagementList != null)
{
foreach (var item in coinFullNameList)
{
if (checkData)
overlapBuyManagementList[item] = false;
else
overlapBuyManagementList[item] = true;
}
}
foreach (var item in totalIndicatorList)
{
var dic = new Dictionary<string, bool>();
var compareDic = new Dictionary<string, bool>();
var crossDic = new Dictionary<string, bool>();
foreach (var codeFullname in coinFullNameList)
{
if (checkData)
dic[codeFullname] = false;
else
dic[codeFullname] = true;
compareDic[codeFullname] = false;
crossDic[codeFullname] = false;
}
CommonProperty.subIndicatorStateManagement[item.IndexString] = dic;
CommonProperty.compareIndicatorState[item.IndexString] = compareDic;
CommonProperty.crossStateManagement[item.IndexString] = crossDic;
}
}
/// <summary>
/// Buyer에서 사용자가 기존에 가지고 있는 DataList 처리
/// </summary>
/// <param name="accounts"></param>
/// <param name="dataList"></param>
/// <returns></returns>
public static List<CandleDataList> GetBuyListofAccounts(List<Account> accounts, Dictionary<MCandleTimeType, List<CandleDataList>> dataList)
{
var buyList = new List<CandleDataList>();
foreach (var item in accounts)
{
if (item.Currency != "KRW")
{
var buyItem = new CandleDataList();
buyItem.Uuid = "";
var temp = dataList[MCandleTimeType.M1].FirstOrDefault(t => t.ConGoodsData.CoinFullName == item.UnitCurrency + "-" + item.Currency);
if (temp == null) continue;
buyItem.ConGoodsData = temp.ConGoodsData;
var candle = new CandleData();
candle.BuyTime = new DateTime(2000, 1, 1);
candle.BuyValue = item.AvgBuyPrice;
candle.BuyCount = item.Balance;
buyItem.CandleDataLists_Im.Add(candle);
buyList.Add(buyItem);
}
}
return buyList;
}
#endregion
}
}

View File

@@ -16,6 +16,9 @@ namespace Million.Manager
public string regularExpressionString;
public string Name;
//Remmeber dic 관련 에러 처리를 위한 Lock obj
private object obj = new object();
/// <summary>
/// 캐쉬 Dictionary
/// </summary>
@@ -38,62 +41,64 @@ namespace Million.Manager
public bool DicExcuteScript(Dictionary<string, bool> RegularExpression)
{
var cloneRex = RegularExpression.ToDictionary(x => x.Key, x => x.Value);
try
lock (obj)
{
//중복 검사
Dictionary<string, bool> data = null;
foreach(var key in rememberDic.Keys)
try
{
bool checker = true;
if(key.Count == cloneRex.Count)
//중복 검사
Dictionary<string, bool> data = null;
foreach (var key in rememberDic.Keys)
{
foreach(var keyStr in key.Keys)
bool checker = true;
if (key.Count == cloneRex.Count)
{
if(cloneRex.ContainsKey(keyStr))
foreach (var keyStr in key.Keys)
{
if (key[keyStr] != cloneRex[keyStr])
if (cloneRex.ContainsKey(keyStr))
{
if (key[keyStr] != cloneRex[keyStr])
checker = false;
}
else
{
checker = false;
}
else
{
checker = false;
}
}
}
else
{
checker = false;
}
if (checker)
{
data = key;
break;
}
}
if (data != null)
{
return rememberDic[data];
}
else
{
checker = false;
}
var returnData = ScriptExcute(ChangeScript(regularExpressionString, cloneRex));
rememberDic[cloneRex] = returnData;
if(checker)
{
data = key;
break;
var str = "Name : " + Name + ",\r\nregularExpressionString : " + regularExpressionString + ",\r\n RegularExpression : "
+ JsonConvert.SerializeObject(cloneRex) + ",\r\n Result : " + returnData.ToString()
+ ",\r\n RememberDic : " + JsonConvert.SerializeObject(rememberDic) + "\r\n";
LogManager.WriteLog(str);
return returnData;
}
}
if (data != null)
catch (Exception e)
{
return rememberDic[data];
throw e;
}
else
{
var returnData = ScriptExcute(ChangeScript(regularExpressionString, cloneRex));
rememberDic[cloneRex] = returnData;
var str = "Name : " + Name +",\r\nregularExpressionString : " + regularExpressionString + ",\r\n RegularExpression : "
+ JsonConvert.SerializeObject(cloneRex) + ",\r\n Result : " + returnData.ToString()
+ ",\r\n RememberDic : " + JsonConvert.SerializeObject(rememberDic) + "\r\n";
LogManager.WriteLog(str);
return returnData;
}
}
catch (Exception e)
{
throw e;
}
}

View File

@@ -25,6 +25,8 @@ namespace Million.Manager
/// <returns></returns>
public static bool WriteLog(string message, string coinFullName = "")
{
if (!CommonProperty.InsertLogFlag) return false;
if (coinFullName == "") coinFullName = "common";
var returnData = true;
var defaultMesage = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "=>" + message +"\r\n";

View File

@@ -2,12 +2,14 @@
using Million.Data.Upbit;
using Million.DbManagement;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Million.CommonProperty;
namespace Million.Manager
{
@@ -16,32 +18,33 @@ namespace Million.Manager
/// </summary>
public class RealtimeDataSettingManager
{
/// <summary>
/// Ticker에 들어갈 데이터
/// </summary>
public List<Ticker> tickerList = new List<Ticker>();
public List<RealtimeConclusion> realtimeConclusions = new List<RealtimeConclusion>();
private object obj = new object();
public List<string> coinFullNameList = null;
public List<MarketData> marketList = null;
public PaymentType buyType = PaymentType.KRW;
public CommonProperty.PaymentType buyType = CommonProperty.PaymentType.KRW;
public DateTime basicDateTime { get; set; }
public System.Threading.Timer timer = null;
public TimerCallback tc = null;
public bool flag = true;
public CommonProperty.BuyerMode buyerMode;
public DateTime startDateTime { get; set; }
public DateTime endDateTime { get; set; }
/// <summary>
/// Websocket 관련 데이터 처리
/// </summary>
public bool Flag { get; set; } = true;
/// <summary>
/// 생성자
/// </summary>
public RealtimeDataSettingManager(List<string> coinFullNameList, PaymentType buyType, string tableName = "Upbit")
public RealtimeDataSettingManager(List<string> coinFullNameList, CommonProperty.BuyerMode buyerMode, CommonProperty.PaymentType buyType, string tableName = "Upbit")
{
this.buyType = buyType;
marketList = DbServiceFunctions.GetMarketDatas(tableName, Enum.GetName(typeof(PaymentType), buyType));
this.buyerMode = buyerMode;
//null일경우 전체가 가져옴
if (coinFullNameList == null)
{
//Upbit로 임시
this.coinFullNameList = marketList.Select(t => t.CoinFullName).ToList();
this.coinFullNameList = CommonProperty.selectedMarketOfPlaceList.Select(t => t.CoinFullName).ToList();
}
else
{
@@ -52,21 +55,23 @@ namespace Million.Manager
//TODO Market ignore 처리 필요 -> 임시로 비트토랜트만 삭제
this.coinFullNameList.Remove("KRW-BTT");
if (CommonProperty.selectedMarketOfPlaceList != null)
CommonProperty.selectedMarketOfPlaceList.Remove(selectedMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == "KRW-BTT"));
CommonProperty.selectedMarketOfPlaceList.Remove(CommonProperty.selectedMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == "KRW-BTT"));
if (CommonProperty.recentlyMarketOfPlaceList != null)
CommonProperty.recentlyMarketOfPlaceList.Remove(recentlyMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == "KRW-BTT"));
CommonProperty.recentlyMarketOfPlaceList.Remove(CommonProperty.recentlyMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == "KRW-BTT"));
}
/// <summary>
/// 실시간 데이터 가져오는 함수(Ticker와 CandleDataList두개를 Return 할 수 있도록 구성)
/// 실시간 데이터 가져오는 함수(Ticker와 CandleDataList두개를 Return 할 수 있도록 구성) => Ticker 에서 실시간 체결 데이터로 이전
/// </summary>
/// <param name="candleDatas"></param>
/// <param name="coinFullNameList"></param>
/// <param name="tableName"></param>
/// <returns></returns>
public List<Ticker> GetRecentlyCandleData()
public List<RealtimeConclusion> GetRecentlyCandleData()
{
return CommonProperty.UpbitApi.GetTickerList(coinFullNameList);
var returnData = new List<RealtimeConclusion>();
return returnData;
}
/// <summary>
@@ -76,17 +81,14 @@ namespace Million.Manager
/// <param name="coinFullNameList"></param>
/// <param name="tableName"></param>
/// <returns></returns>
public List<CandleDataList> GetBasicDataSetting(MCandleTimeType timeType, int count = 200)
public List<CandleDataList> GetBasicDataSetting(CommonProperty.MCandleTimeType timeType, DateTime basicDateTime, int count = 200)
{
var returnData = new List<CandleDataList>();
basicDateTime = DateTime.Now;
var resultList = new List<CandleData>();
foreach (var item in coinFullNameList)
{
var val = new CandleDataList();
val.ConGoodsData = marketList.FirstOrDefault(t => t.CoinFullName == item);
val.ConGoodsData = CommonProperty.selectedMarketOfPlaceList.FirstOrDefault(t => t.CoinFullName == item);
val.CandleDataLists_Im = CommonProperty.UpbitApi.GetCandleStics(item, timeType, basicDateTime, count).OrderBy(t => t.DateTime).ToList();
returnData.Add(val);
Thread.Sleep(400);
@@ -95,33 +97,6 @@ namespace Million.Manager
return returnData;
}
public void StartGetRealTimeTicker(object state, int duTime = 0, int period = 50)
{
if (this.timer != null)
{
flag = false;
this.timer.Dispose();
this.timer = null;
}
this.tc = new TimerCallback(TimerEvent); // 이벤트 발생 처리 루틴
//0.5초 마다 쌓는거 진행 -> DB데이터 가지고와서 부터 데이터 처리
this.timer = new System.Threading.Timer(tc, null, 0, 500);
flag = true;
}
public void EndRealTimeTicker()
{
flag = false;
if (timer != null)
{
this.timer.Dispose();
this.timer = null;
}
}
/// <summary>
/// 실시간 데이터 가져오는 함수(Buyer에서 시작과 동시에 호출되는 함수)
@@ -130,281 +105,194 @@ namespace Million.Manager
/// <param name="type"></param>
/// <param name="count"></param>
/// <returns></returns>
public Dictionary<MCandleTimeType, List<CandleDataList>> GetRealTimeCandleData(List<MCandleTimeType> types, int count = 200)
public Dictionary<CommonProperty.MCandleTimeType, List<CandleDataList>> GetRealTimeCandleData(List<CommonProperty.MCandleTimeType> types,DateTime startDate, DateTime endDate, int count = 200)
{
var data = new Dictionary<MCandleTimeType, List<CandleDataList>>();
//여기는 한번만 동작하므로 RealtimeConclusion 처리 해야함
var thread = new Thread(new ThreadStart(ThreadEventAsync));
thread.Start();
StartGetRealTimeTicker(null);
var data = new Dictionary<CommonProperty.MCandleTimeType, List<CandleDataList>>();
foreach (var type in types)
{
data[type] = GetBasicDataSetting(type, count);
data[type] = GetBasicDataSetting(type, startDate, count);
}
return ProcessRecentlyCandleDatas(data, types);
}
/// <summary>
/// CandleData를 Ticker로 계싼
/// </summary>
/// <param name="candleDatas"></param>
/// <param name="tickers"></param>
/// <returns></returns>
public Dictionary<MCandleTimeType, List<CandleDataList>> ProcessRecentlyCandleDatas(Dictionary<MCandleTimeType, List<CandleDataList>> candleDatas, List<MCandleTimeType> types)
public Dictionary<CommonProperty.MCandleTimeType, List<CandleDataList>> ProcessRecentlyCandleDatas(Dictionary<CommonProperty.MCandleTimeType, List<CandleDataList>> candleDatas, List<CommonProperty.MCandleTimeType> types)
{
var cloneRealtimeConclusion = new List<RealtimeConclusion>();
lock (obj)
{
try
{
foreach (var item in realtimeConclusions)
{
var temp = item.Clone();
cloneRealtimeConclusion.Add(temp);
}
realtimeConclusions.Clear();
}
catch (Exception e)
{
LogManager.WriteLog(e.Message);
}
}
foreach (var type in types)
{
var candleList = candleDatas[type];
//Parallel.ForEach(candleList, item =>
//{
var tickList = new List<Ticker>();
var cloneTickList = new List<Ticker>();
lock (obj)
{
try
{
foreach (var item in tickerList)
{
cloneTickList.Add(item.Clone());
}
}
catch (Exception e)
{
LogManager.WriteLog(e.Message);
}
}
var list = new List<RealtimeConclusion>();
foreach (var item in candleList)
{
if (item.CandleDataLists_Im.Count > 0)
basicDateTime = item.CandleDataLists_Im.Select(t => t.DateTime).Max();
//if (item.CandleDataLists_Im.Count > 0)
// basicDateTime = item.CandleDataLists_Im.Select(t => t.DateTime).Max();
var coinFullName = item.ConGoodsData.CoinFullName;
tickList = cloneTickList.Where(t => t.CoinFullName == coinFullName).OrderBy(t=>t.DateTime).ToList();
list = cloneRealtimeConclusion.Where(t => t.code == coinFullName).OrderBy(t=>t.TradeDateTime).ToList();
// 호출 당시 시, 분, 초
var callH = basicDateTime.Hour;
var callM = basicDateTime.Minute;
var callS = basicDateTime.Second;
try
#region 여러 Type 다 호환 되도록 새로 구성
/*
* 1. Tick -> 1분봉으로 모두 변환(시가는 제일 작은거로 처리
* 2. 기존에 가지고 있는 봉 마지막꺼를 포함한 모든 데이터를 가지고 GetConvertCandleDataList로 처리
* 3. 마지막 봉삭제 후 모두 Addrange
* 4. 이후 300개 이상일 경우 삭제 처리
*/
var returnList = DataManager.GetOneMinuteCandleDataFromConclusionList(list);
if(item.CandleDataLists_Im.Count > 0)
{
if (type == MCandleTimeType.M1)
{
var equalMinuteList = tickList.Where(t => t.DateTime.Minute == callM).ToList();
//해당 분 고가
if (equalMinuteList.Count != 0)
{
var equalListM = equalMinuteList.Select(t => t.TradePrice).ToList();
double equalListMax = 0;
if (equalListM.Count != 0)
{
equalListMax = equalListM.Max();
}
//해당 분 저가
var equalListL = equalMinuteList.Select(t => t.TradePrice).ToList();
double equalListMin = 0;
if (equalListL.Count != 0)
{
equalListMin = equalListL.Min();
}
if (item.CandleDataLists_Im.Count != 0)
{
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue < equalListMax && equalListMax != 0)
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue = equalListMax;
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue > equalListMin && equalListMin != 0)
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue = equalListMin;
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].RecentlyDataFlag = true;
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].EndValue = equalMinuteList[equalMinuteList.Count - 1].TradePrice;
}
else
{
var candle = new CandleData();
candle.CandleTimeType = (int)MCandleTimeType.M1;
candle.StartValue = equalMinuteList[0].TradePrice;
candle.HighValue = equalListMax;
candle.LowValue = equalListMin;
candle.RecentlyDataFlag = true;
candle.EndValue = equalMinuteList[equalMinuteList.Count - 1].TradePrice;
var date = basicDateTime.AddMinutes(1);
date = date.AddSeconds(-1 * callS);
candle.DateTime = date;
if (item.CandleDataLists_Im.Count > 300)
item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
item.CandleDataLists_Im.Add(candle);
}
}
var list = tickList.Where(t => t.DateTime > basicDateTime && t.DateTime.Minute != basicDateTime.Minute).ToList();
if (list.Count > 0)
{
// 데이터 가져올떄 1분 이상 걸릴 시 처리할 데이터
var minList = list.Select(t => t.DateTime.Minute).Distinct().ToList();
minList.Sort();
foreach (var min in minList)
{
var equalList = list.Where(t => t.DateTime.Minute == min).OrderBy(t => t.DateTime).ToList();
//해당 분 고가
var max = equalList.Select(t => t.TradePrice).ToList().Max();
//해당 분 저가
var low = equalList.Select(t => t.TradePrice).ToList().Min();
var candle = new CandleData();
candle.CandleTimeType = (int)MCandleTimeType.M1;
candle.StartValue = equalList[0].TradePrice;
candle.HighValue = max;
candle.LowValue = low;
candle.RecentlyDataFlag = true;
candle.EndValue = equalList[equalList.Count - 1].TradePrice;
var intervalMin = min - callM;
var date = basicDateTime.AddMinutes(intervalMin);
if(intervalMin < 0) date = date.AddHours(1);
date = date.AddSeconds(-1 * callS);
candle.DateTime = date;
if (item.CandleDataLists_Im.Count > 300)
item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
item.CandleDataLists_Im.Add(candle);
}
}
}
else if (type == MCandleTimeType.H1)
{
var equalHourList = tickList.Where(t => t.DateTime.Hour == callH).ToList();
if (equalHourList.Count != 0)
{
var equalListM = equalHourList.Select(t => t.TradePrice).ToList();
double equalListMax = 0;
if (equalListM.Count != 0)
{
equalListMax = equalListM.Max();
}
//해당 분 저가
var equalListL = equalHourList.Select(t => t.TradePrice).ToList();
double equalListMin = 0;
if (equalListL.Count != 0)
{
equalListMin = equalListL.Min();
}
if (item.CandleDataLists_Im.Count > 0)
{
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue < equalListMax && equalListMax != 0)
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].HighValue = equalListMax;
if (item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue > equalListMin && equalListMin != 0)
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].LowValue = equalListMin;
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].RecentlyDataFlag = true;
item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1].EndValue = equalHourList[equalHourList.Count - 1].TradePrice;
}
else
{
var candle = new CandleData();
candle.CandleTimeType = (int)MCandleTimeType.H1;
candle.StartValue = equalHourList[0].TradePrice;
candle.HighValue = equalListMax;
candle.LowValue = equalListMin;
candle.RecentlyDataFlag = true;
candle.EndValue = equalHourList[equalHourList.Count - 1].TradePrice;
var date = basicDateTime.AddHours(1);
date = date.AddMinutes(-1 * callM);
date = date.AddSeconds(-1 * callS);
candle.DateTime = date;
if (item.CandleDataLists_Im.Count > 300)
item.CandleDataLists_Im.RemoveRange(0, 100);
item.CandleDataLists_Im.Add(candle);
}
}
var list = tickList.Where(t => t.DateTime > basicDateTime && t.DateTime.Hour != basicDateTime.Hour).ToList();
if (list.Count > 0)
{
//해당 분 고가
var max = list.Select(t => t.TradePrice).ToList().Max();
//해당 분 저가
var low = list.Select(t => t.TradePrice).ToList().Min();
var candle = new CandleData();
candle.CandleTimeType = (int)MCandleTimeType.H1;
candle.StartValue = list[0].TradePrice;
candle.HighValue = max;
candle.LowValue = low;
candle.RecentlyDataFlag = true;
candle.EndValue = list[list.Count - 1].TradePrice;
var date = basicDateTime.AddHours(1);
date = date.AddMinutes(-1 * callM);
date = date.AddSeconds(-1 * callS);
candle.DateTime = date;
if (item.CandleDataLists_Im.Count > 300)
item.CandleDataLists_Im.RemoveRange(0, 100);
item.CandleDataLists_Im.Add(candle);
}
}
var lastData = item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1];
returnList.Insert(0, lastData);
}
catch (Exception e)
var dataList = DataManager.GetConvertCandleDataList(returnList, type);
if (item.CandleDataLists_Im.Count > 0)
{
throw;
item.CandleDataLists_Im.Remove(item.CandleDataLists_Im[item.CandleDataLists_Im.Count - 1]);
}
item.CandleDataLists_Im.AddRange(dataList);
if(item.CandleDataLists_Im.Count > 300)
{
item.CandleDataLists_Im.RemoveRange(0, item.CandleDataLists_Im.Count - 300);
}
#endregion
}
//});
}
return candleDatas;
}
public void ClearTicker()
{
lock (obj)
{
try {
if (tickerList.Count > 2000)
tickerList.RemoveRange(0, tickerList.Count - 1000);
}
catch (Exception e)
{
LogManager.WriteLog(e.Message);
}
}
}
/// <summary>
/// Timer Event
/// </summary>
/// <param name="state"></param>
private void TimerEvent(object state)
private async void ThreadEventAsync()
{
lock (obj)
string WebSocketUrl = "wss://api.upbit.com/websocket/v1";
realtimeConclusions.Clear();
var tempStrData = "";
var message = "";
while (Flag)
{
ClientWebSocket webSocket = new ClientWebSocket();
var cancelToken = CancellationToken.None;
try
{
var temp = GetRecentlyCandleData();
await webSocket.ConnectAsync(new Uri(WebSocketUrl), cancelToken);
var dic = new List<Dictionary<string, object>>();
dic.Add(new Dictionary<string, object>() { { "ticket", "test" } });
dic.Add(new Dictionary<string, object>() { { "type", "trade" }, { "codes", CommonProperty.recentlyMarketOfPlaceList.Where(t => t.CoinFullName.Contains("KRW-")).Select(t => t.CoinFullName).ToList() } });
if (temp != null)
await SendMessage(webSocket, JsonConvert.SerializeObject(dic));
// 데이터 수신을 위한 반복문 시작
while (webSocket.State == WebSocketState.Open && Flag)
{
tickerList.AddRange(temp);
ClearTicker();
}
byte[] buffer = new byte[1024 * 10];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), cancelToken);
// 수신한 데이터 처리
message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
if (!DataManager.ValidateJSON(message))
{
tempStrData += message;
if (!DataManager.ValidateJSON(message))
{
continue;
}
else
{
message = tempStrData;
}
}
var data = JsonConvert.DeserializeObject<RealtimeConclusion>(message);
lock (obj)
{
realtimeConclusions.Add(data);
}
}
}
catch (Exception e)
catch (Exception ex)
{
LogManager.WriteLog(e.Message);
LogManager.WriteLog(ex.Message+"\r\n오류 메세지 : " + message);
}
finally
{
if (webSocket.State == WebSocketState.Open)
{
try
{
await webSocket.CloseAsync(webSocket.CloseStatus.Value, webSocket.CloseStatusDescription, cancelToken);
}
catch (Exception e)
{
LogManager.WriteLog(e.Message + "\r\n오류 메세지 : " + message);
}
if(webSocket != null)
webSocket.Dispose();
webSocket = null;
}
}
}
}
/// <summary>
/// Websocket 관련 SendMessage function
/// </summary>
/// <param name="webSocket"></param>
/// <param name="message"></param>
/// <returns></returns>
private async Task SendMessage(ClientWebSocket webSocket, string message)
{
byte[] buffer = Encoding.UTF8.GetBytes(message);
await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
}

View File

@@ -1,4 +1,5 @@
using Million.Data;
using DocumentFormat.OpenXml.Vml;
using Million.Data;
using Million.IndicatorConditionSetup;
using System;
using System.Collections.Generic;
@@ -42,16 +43,23 @@ namespace Million.Manager
val = indiData.value;
else if (indi.IndicatorIchmokuOverLine == Indicator_IchmokuOverLine.선행스팬2)
val = indiData.value2;
else if (indi.IndicatorIchmokuOverLine == Indicator_IchmokuOverLine.선행스팬1OR2중고가)
val = indiData.GetOverValue();
else if (indi.IndicatorIchmokuOverLine == Indicator_IchmokuOverLine.선행스팬1OR2중저가)
val = indiData.GetDownOverValue();
valDic.Add(key.Key, val);
if (indi.SubIndicatorSetupType == SubIndicatorSetupType.크로스)
val = indiData.overlapValue;
valDic[key.Key] = val;
}
else
{
valDic.Add(key.Key, item.IndicatorDic[keyData].value);
valDic[key.Key] = item.IndicatorDic[keyData].overlapValue;
}
}
else
valDic.Add(key.Key, 0);
valDic[key.Key] = 0;
}
return valDic;
}
@@ -65,13 +73,10 @@ namespace Million.Manager
/// <param name="sellRegularExpression"></param>
/// <returns></returns>
public static List<SearchResult> GetSearchResultList(List<CandleData> datas, List<IndicatorCoditionSetup> rateIndicators,
string buyRegularExpression, string sellRegularExpression, MarketData market, List<IndicatorCoditionSetup> totalIndicator, bool insertTermCandleData = false)
MarketData market, List<IndicatorCoditionSetup> totalIndicator, bool insertTermCandleData, InteratorScripter buyScript,
InteratorScripter sellScript)
{
//buy, sell script 선언
var buyScript = new InteratorScripter("Buy Script");
buyScript.regularExpressionString = buyRegularExpression;
var sellScript = new InteratorScripter("Sell Script");
sellScript.regularExpressionString = sellRegularExpression;
var resultList = new List<SearchResult>();
@@ -112,7 +117,7 @@ namespace Million.Manager
if (deafultSellFlag)
{
//Sell Value 계산 로직
item.SellValue = CalculateManager.GetConditionValue(sellRegularExpression, valDic, dic);
item.SellValue = CalculateManager.GetConditionValue(sellScript.regularExpressionString, valDic, dic);
defaultSellValue = item.SellValue;
@@ -151,7 +156,7 @@ namespace Million.Manager
if (errorList.Count > 0)
continue;
var val = CalculateManager.GetConditionValue(sellRegularExpression, valDic, dic);
var val = CalculateManager.GetConditionValue(sellScript.regularExpressionString, valDic, dic);
if (deafultSellFlag) {
if (defaultSellValue > val)
@@ -257,7 +262,7 @@ namespace Million.Manager
if (flag)
{
var valDic = GetIndicateValue(dic, totalIndicator, item);
var val = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(buyRegularExpression, valDic, dic));
var val = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(buyScript.regularExpressionString, valDic, dic));
item.BuyValue = val + Math.Round(val * 0.0005);
buyList.Add(item);
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Million.Manager
{
public static class UIController
{
public static void next(Form subForm, ProgressBar progressBar)
{
subForm.Invoke(new MethodInvoker(delegate ()
{
progressBar.PerformStep();
}));
}
}
}

View File

@@ -1,341 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{10EF08CB-BF38-4882-A92A-30DB34E8E8BD}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Million</RootNamespace>
<AssemblyName>Million</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Dashboard.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Dashboard.v18.2.Win, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.DataAccess.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.DataAccess.v18.2.UI, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Map.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Office.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.PivotGrid.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.RichEdit.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.TreeMap.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v18.2.UI, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Xpo.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGauges.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGauges.v18.2.Presets, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGauges.v18.2.Win, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGrid.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraLayout.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraMap.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPivotGrid.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraReports.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraRichEdit.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeMap.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DocumentFormat.OpenXml, Version=2.16.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.2.16.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="Humanizer, Version=2.2.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL">
<HintPath>..\packages\Humanizer.Core.2.2.0\lib\netstandard1.0\Humanizer.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.VisualBasic, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.VisualBasic.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.VisualBasic.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.VisualBasic.Workspaces.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Workspaces.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.6.12.0\lib\net472\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Logging, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IdentityModel.Logging.6.12.0\lib\net472\Microsoft.IdentityModel.Logging.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Tokens, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IdentityModel.Tokens.6.12.0\lib\net472\Microsoft.IdentityModel.Tokens.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="DevExpress.Charts.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v18.2.Core, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraBars.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraCharts.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraCharts.v18.2.UI, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v18.2.Wizard, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="System" />
<Reference Include="System.Composition.AttributedModel, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.AttributedModel.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.AttributedModel.dll</HintPath>
</Reference>
<Reference Include="System.Composition.Convention, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.Convention.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.Convention.dll</HintPath>
</Reference>
<Reference Include="System.Composition.Hosting, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.Hosting.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.Hosting.dll</HintPath>
</Reference>
<Reference Include="System.Composition.Runtime, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.Runtime.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.Runtime.dll</HintPath>
</Reference>
<Reference Include="System.Composition.TypedParts, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.TypedParts.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.TypedParts.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IdentityModel.Tokens.Jwt, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\System.IdentityModel.Tokens.Jwt.6.12.0\lib\net472\System.IdentityModel.Tokens.Jwt.dll</HintPath>
</Reference>
<Reference Include="System.IO.Pipelines, Version=5.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.5.0.1\lib\net461\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="CommonProperty.cs" />
<Compile Include="Data\AnalysisData.cs" />
<Compile Include="Data\BollingerData.cs" />
<Compile Include="Data\CandleData.cs" />
<Compile Include="Data\CandleDataList.cs" />
<Compile Include="Data\ErrorCandleData.cs" />
<Compile Include="Data\IchimokData.cs" />
<Compile Include="Data\IndicatorData.cs" />
<Compile Include="Data\MarketData.cs" />
<Compile Include="Data\MovingAverageData.cs" />
<Compile Include="Data\SearchResult.cs" />
<Compile Include="Data\Upbit\Account.cs" />
<Compile Include="Data\Upbit\Conclusion.cs" />
<Compile Include="Data\Upbit\OrderableInformation\OrderableInformation_Account.cs" />
<Compile Include="Data\Upbit\OrderableInformation\Market_Restrictions.cs" />
<Compile Include="Data\Upbit\OrderableInformation\OrderableInformation.cs" />
<Compile Include="Data\Upbit\OrderableInformation\Market.cs" />
<Compile Include="Data\Upbit\OrderBook\OrderBook.cs" />
<Compile Include="Data\Upbit\OrderBook\Unit.cs" />
<Compile Include="Data\Upbit\Order\Order.cs" />
<Compile Include="Data\Upbit\Order\Trade.cs" />
<Compile Include="Data\Upbit\Ticker.cs" />
<Compile Include="DbMangement\DBConnection.cs" />
<Compile Include="DbMangement\DBServiceFunctions.cs" />
<Compile Include="FileManagement\FileContoler.cs" />
<Compile Include="FileManagement\Ini.cs" />
<Compile Include="IndicatorConditionSetup\BolingerConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\IchimokuConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\IndicatorCoditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\MovingAverageConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\ParabolicSarIndicatorConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\PriceRateCondtionSetup.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Manager\BuyLogicManager.cs" />
<Compile Include="Manager\CalculateManager.cs" />
<Compile Include="Manager\DataManager.cs" />
<Compile Include="Manager\IndicatorSetupManager.cs" />
<Compile Include="Manager\InteratorScripter.cs" />
<Compile Include="Manager\LogManager.cs" />
<Compile Include="Manager\OrderbookManager.cs" />
<Compile Include="Manager\ExportManager.cs" />
<Compile Include="Manager\RealtimeDataSettingManager.cs" />
<Compile Include="Manager\ResultLogicManager.cs" />
<Compile Include="Manager\SellLogicManager.cs" />
<Compile Include="Manager\ValidationCheckManager.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SaveData\SavedAnalysisData.cs" />
<Compile Include="SaveData\SavedResultData.cs" />
<Compile Include="SubForm\AccumulateDataUI.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\AccumulateDataUI.Designer.cs">
<DependentUpon>AccumulateDataUI.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartIndicatorSetupForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\ChartIndicatorSetupForm.Designer.cs">
<DependentUpon>ChartIndicatorSetupForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartSimulatorForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\ChartSimulatorForm.Designer.cs">
<DependentUpon>ChartSimulatorForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\ChartViewerForm.Designer.cs">
<DependentUpon>ChartViewerForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartViewerUI.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\ChartViewerUI.Designer.cs">
<DependentUpon>ChartViewerUI.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.Designer.cs">
<DependentUpon>BolingerBandSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.Designer.cs">
<DependentUpon>CommonIndicatorSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.Designer.cs">
<DependentUpon>IchimokuCloudSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.Designer.cs">
<DependentUpon>MovingAverageSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.Designer.cs">
<DependentUpon>ParabolicSarSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.Designer.cs">
<DependentUpon>PriceRateSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="WebMangement\BitthumbWerServices.cs" />
<Compile Include="WebMangement\Upbit\ClientHttpClient.cs" />
<Compile Include="WebMangement\Upbit\UpbitAPI.cs" />
<Compile Include="WebMangement\Upbit\UpbitProcess.cs" />
<Compile Include="WebMangement\WebConnection.cs" />
<Compile Include="WebMangement\WebServiceFunctions.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="SubForm\AccumulateDataUI.resx">
<DependentUpon>AccumulateDataUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartIndicatorSetupForm.resx">
<DependentUpon>ChartIndicatorSetupForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartSimulatorForm.resx">
<DependentUpon>ChartSimulatorForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartViewerForm.resx">
<DependentUpon>ChartViewerForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartViewerUI.resx">
<DependentUpon>ChartViewerUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.resx">
<DependentUpon>BolingerBandSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.resx">
<DependentUpon>CommonIndicatorSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.resx">
<DependentUpon>IchimokuCloudSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.resx">
<DependentUpon>MovingAverageSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.resx">
<DependentUpon>ParabolicSarSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.resx">
<DependentUpon>PriceRateSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>Million</RootNamespace>
<AssemblyName>Million</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<PropertyGroup>
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
<ItemGroup>
<Compile Update="SubForm\AccumulateDataUI.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\ChartViewerUI.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\CompareSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Update="SubForm\IndicatorSetupForm\RemoveTickUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<PackageReference Include="DevExpress.Win.Design" Version="22.2.3" />
<PackageReference Include="DocumentFormat.OpenXml" Version="2.16.0" />
<PackageReference Include="Humanizer.Core" Version="2.2.0" />
<PackageReference Include="log4net" Version="2.0.12" />
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" Version="4.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.1.0" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.12.0" />
<PackageReference Include="Microsoft.IdentityModel.Logging" Version="6.12.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.12.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.12.0" />
<PackageReference Include="Microsoft.AspNetCore.SystemWebAdapters" Version="1.3.0" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
<PackageReference Include="System.Composition" Version="7.0.0" />
<PackageReference Include="System.Composition.AttributedModel" Version="7.0.0" />
<PackageReference Include="System.Composition.Convention" Version="7.0.0" />
<PackageReference Include="System.Composition.Hosting" Version="7.0.0" />
<PackageReference Include="System.Composition.Runtime" Version="7.0.0" />
<PackageReference Include="System.Composition.TypedParts" Version="7.0.0" />
<PackageReference Include="System.IO.Pipelines" Version="7.0.0" />
<PackageReference Include="System.Reflection.Metadata" Version="7.0.2" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,366 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{10EF08CB-BF38-4882-A92A-30DB34E8E8BD}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Million</RootNamespace>
<AssemblyName>Million</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Dashboard.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Dashboard.v20.1.Win, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.DataAccess.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.DataAccess.v20.1.UI, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Map.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Office.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.PivotGrid.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.RichEdit.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Sparkline.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.TreeMap.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v20.1.UI, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Xpo.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGauges.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGauges.v20.1.Presets, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGauges.v20.1.Win, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraGrid.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraLayout.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraMap.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPivotGrid.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.CodeParser.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraReports.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraRichEdit.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeList.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraTreeMap.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DocumentFormat.OpenXml, Version=2.16.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.2.16.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="Humanizer, Version=2.2.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL">
<HintPath>..\packages\Humanizer.Core.2.2.0\lib\netstandard1.0\Humanizer.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Scripting, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Scripting.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Scripting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.VisualBasic, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.VisualBasic.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.VisualBasic.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.VisualBasic.Workspaces.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Workspaces.Common.4.1.0\lib\netstandard2.0\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.6.12.0\lib\net472\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Logging, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IdentityModel.Logging.6.12.0\lib\net472\Microsoft.IdentityModel.Logging.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IdentityModel.Tokens, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IdentityModel.Tokens.6.12.0\lib\net472\Microsoft.IdentityModel.Tokens.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="DevExpress.Charts.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Printing.v20.1.Core, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Data.Desktop.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Utils.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraBars.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraCharts.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraCharts.v20.1.UI, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v20.1.Wizard, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraEditors.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v20.1, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="System" />
<Reference Include="System.Composition.AttributedModel, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.AttributedModel.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.AttributedModel.dll</HintPath>
</Reference>
<Reference Include="System.Composition.Convention, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.Convention.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.Convention.dll</HintPath>
</Reference>
<Reference Include="System.Composition.Hosting, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.Hosting.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.Hosting.dll</HintPath>
</Reference>
<Reference Include="System.Composition.Runtime, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.Runtime.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.Runtime.dll</HintPath>
</Reference>
<Reference Include="System.Composition.TypedParts, Version=1.0.31.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Composition.TypedParts.1.0.31\lib\portable-net45+win8+wp8+wpa81\System.Composition.TypedParts.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IdentityModel.Tokens.Jwt, Version=6.12.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\System.IdentityModel.Tokens.Jwt.6.12.0\lib\net472\System.IdentityModel.Tokens.Jwt.dll</HintPath>
</Reference>
<Reference Include="System.IO.Pipelines, Version=5.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.5.0.1\lib\net461\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="CommonProperty.cs" />
<Compile Include="Data\AnalysisData.cs" />
<Compile Include="Data\BollingerData.cs" />
<Compile Include="Data\CandleData.cs" />
<Compile Include="Data\CandleDataList.cs" />
<Compile Include="Data\ErrorCandleData.cs" />
<Compile Include="Data\IchimokData.cs" />
<Compile Include="Data\IndicatorData.cs" />
<Compile Include="Data\MarketData.cs" />
<Compile Include="Data\MovingAverageData.cs" />
<Compile Include="Data\SaveData\MultiSavedResultData.cs" />
<Compile Include="Data\SearchResult.cs" />
<Compile Include="Data\Upbit\Account.cs" />
<Compile Include="Data\Upbit\Conclusion.cs" />
<Compile Include="Data\Upbit\OrderableInformation\OrderableInformation_Account.cs" />
<Compile Include="Data\Upbit\OrderableInformation\Market_Restrictions.cs" />
<Compile Include="Data\Upbit\OrderableInformation\OrderableInformation.cs" />
<Compile Include="Data\Upbit\OrderableInformation\Market.cs" />
<Compile Include="Data\Upbit\OrderBook\OrderBook.cs" />
<Compile Include="Data\Upbit\OrderBook\Unit.cs" />
<Compile Include="Data\Upbit\Order\Order.cs" />
<Compile Include="Data\Upbit\Order\Trade.cs" />
<Compile Include="Data\Upbit\RealtimeConclusion.cs" />
<Compile Include="Data\Upbit\Ticker.cs" />
<Compile Include="DbMangement\DBConnection.cs" />
<Compile Include="DbMangement\DBServiceFunctions.cs" />
<Compile Include="FileManagement\FileContoler.cs" />
<Compile Include="FileManagement\Ini.cs" />
<Compile Include="IndicatorConditionSetup\BolingerConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\CompareConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\IchimokuConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\IndicatorCoditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\MovingAverageConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\ParabolicSarIndicatorConditionSetup.cs" />
<Compile Include="IndicatorConditionSetup\PriceRateCondtionSetup.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Manager\BuyLogicManager.cs" />
<Compile Include="Manager\CalculateManager.cs" />
<Compile Include="Manager\DataManager.cs" />
<Compile Include="Manager\ExcelExport.cs" />
<Compile Include="Manager\IndicatorSetupManager.cs" />
<Compile Include="Manager\InitManager.cs" />
<Compile Include="Manager\InteratorScripter.cs" />
<Compile Include="Manager\LogManager.cs" />
<Compile Include="Manager\OrderbookManager.cs" />
<Compile Include="Manager\ExportManager.cs" />
<Compile Include="Manager\RealtimeDataSettingManager.cs" />
<Compile Include="Manager\ResultLogicManager.cs" />
<Compile Include="Manager\SellLogicManager.cs" />
<Compile Include="Manager\UIController.cs" />
<Compile Include="Manager\ValidationCheckManager.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Data\SaveData\SavedAnalysisData.cs" />
<Compile Include="Data\SaveData\SavedResultData.cs" />
<Compile Include="SubForm\AccumulateDataUI.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\AccumulateDataUI.Designer.cs">
<DependentUpon>AccumulateDataUI.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartIndicatorSetupForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\ChartIndicatorSetupForm.Designer.cs">
<DependentUpon>ChartIndicatorSetupForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartSimulatorForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\ChartSimulatorForm.Designer.cs">
<DependentUpon>ChartSimulatorForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartViewerForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SubForm\ChartViewerForm.Designer.cs">
<DependentUpon>ChartViewerForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\ChartViewerUI.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\ChartViewerUI.Designer.cs">
<DependentUpon>ChartViewerUI.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.Designer.cs">
<DependentUpon>BolingerBandSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.Designer.cs">
<DependentUpon>CommonIndicatorSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.Designer.cs">
<DependentUpon>IchimokuCloudSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.Designer.cs">
<DependentUpon>MovingAverageSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\CompareSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\CompareSetupUserForm.Designer.cs">
<DependentUpon>CompareSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.Designer.cs">
<DependentUpon>ParabolicSarSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.Designer.cs">
<DependentUpon>PriceRateSetupUserForm.cs</DependentUpon>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\RemoveTickUserForm.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SubForm\IndicatorSetupForm\RemoveTickUserForm.Designer.cs">
<DependentUpon>RemoveTickUserForm.cs</DependentUpon>
</Compile>
<Compile Include="WebMangement\BitthumbWerServices.cs" />
<Compile Include="WebMangement\Upbit\ClientHttpClient.cs" />
<Compile Include="WebMangement\Upbit\UpbitAPI.cs" />
<Compile Include="WebMangement\Upbit\UpbitProcess.cs" />
<Compile Include="WebMangement\WebConnection.cs" />
<Compile Include="WebMangement\WebServiceFunctions.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="SubForm\AccumulateDataUI.resx">
<DependentUpon>AccumulateDataUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartIndicatorSetupForm.resx">
<DependentUpon>ChartIndicatorSetupForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartSimulatorForm.resx">
<DependentUpon>ChartSimulatorForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartViewerForm.resx">
<DependentUpon>ChartViewerForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\ChartViewerUI.resx">
<DependentUpon>ChartViewerUI.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\BolingerBandSetupUserForm.resx">
<DependentUpon>BolingerBandSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\CommonIndicatorSetupUserForm.resx">
<DependentUpon>CommonIndicatorSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\IchimokuCloudSetupUserForm.resx">
<DependentUpon>IchimokuCloudSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\MovingAverageSetupUserForm.resx">
<DependentUpon>MovingAverageSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\CompareSetupUserForm.resx">
<DependentUpon>CompareSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\ParabolicSarSetupUserForm.resx">
<DependentUpon>ParabolicSarSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\PriceRateSetupUserForm.resx">
<DependentUpon>PriceRateSetupUserForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SubForm\IndicatorSetupForm\RemoveTickUserForm.resx">
<DependentUpon>RemoveTickUserForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -3,4 +3,18 @@
<PropertyGroup>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
<ItemGroup>
<Compile Update="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="SubForm\ChartIndicatorSetupForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="SubForm\ChartSimulatorForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="SubForm\ChartViewerForm.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("Million")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Million")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("10ef08cb-bf38-4882-a92a-30db34e8e8bd")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,5 +0,0 @@
DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraCharts.ChartControl, DevExpress.XtraCharts.v18.2.UI, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v18.2, Version=18.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1 @@
DevExpress.XtraCharts.ChartControl, DevExpress.XtraCharts.v20.1.UI, Version=20.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

Some files were not shown because too many files have changed in this diff Show More