336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

단기자금을 운용하는 경우 보통 은행을 이용하게 된다.

그런데, 계좌에서 돈을 뺄수 없는 경우(ex. ISA계좌)라면?

 

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

callfuc = 'GetOptionCode("%s", 2, "%s")' % (code, date)
putfunc = 'GetOptionCode("%s", 3, "%s")' % (code, date)

callcode = self.ocx.dynamicCall(callfuc)
putcode = self.ocx.dynamicCall(putfunc)

self.logger.info('>>> %s %s %s %s' % (code, date, callcode, putcode))

 

 

>> 217.50 202004 201Q4217 301Q4217
>> 220.00 202004 201Q4220 301Q4220
>> 222.50 202004 201Q4222 301Q4222
>> 225.00 202004 201Q4225 301Q4225
>> 227.50 202004 201Q4227 301Q4227
>> 230.00 202004 201Q4230 301Q4230
>> 232.50 202004 201Q4232 301Q4232
>> 235.00 202004 201Q4235 301Q4235
>> 237.50 202004 201Q4237 301Q4237
>> 240.00 202004 201Q4240 301Q4240
>> 242.50 202004 201Q4242 301Q4242
>> 245.00 202004 201Q4245 301Q4245
>> 247.50 202004 201Q4247 301Q4247
>> 250.00 202004 201Q4250 301Q4250
>> 252.50 202004 201Q4252 301Q4252
>> 255.00 202004 201Q4255 301Q4255
>> 257.50 202004 201Q4257 301Q4257
>> 260.00 202004 201Q4260 301Q4260

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

"opt50007"

 

ocx.dynamicCall("SetInputValue(QString, QString)", "종목코드", code)
ocx.dynamicCall("CommRqData(QString, QString, QString, QString)", code, TR50007, "0", "0401")

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ret = ocx.dynamicCall("GetFutureCodeByIndex(int)", "nIndex", 0)

logger = Loggers.__call__().get_logger()
logger.info('GetFutureCodeByIndex RET: %s' % ret)

 

 

 

GetFutureCodeByIndex RET: 101Q6000

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ret = ocx.dynamicCall("GetFutureList()")

logger = Loggers.__call__().get_logger()
logger.info('GetFutureList RET: %s' % ret)

 

GetFutureList RET: 101Q6000;101Q9000;101QC000;101R3000;101R6000;101RC000;101SC000;401Q6Q9S;401Q6QCS;401Q6R3S;401Q6R6S;401Q6RCS;401Q6SCS;105Q4000;105Q5000;105Q6000;105Q7000;105Q8000;105Q9000;405Q4Q5S;405Q4Q6S;405Q4Q7S;405Q4Q8S;405Q4Q9S;106Q6000;106Q9000;106QC000;106R3000;106R6000;106RC000;106SC000;406Q6Q9S;406Q6QCS;406Q6R3S;406Q6R6S;406Q6RCS;406Q6SCS;104Q4000;104Q5000;104Q6000;104Q7000;104Q8000;104Q9000;404Q4Q5S;404Q4Q6S;404Q4Q7S;404Q4Q8S;404Q4Q9S;107Q6000;107Q9000;107QC000;407Q6Q9S;407Q6QCS;1A0Q6000;1A0Q9000;1A0QC000;1A0R3000;1A0R6000;1A0RC000;1A0SC000;4A0Q6Q9S;4A0Q6QCS;4A0Q6R3S;4A0Q6R6S;4A0Q6RCS;4A0Q6SCS;1A1Q6000;1A1Q9000;1A1QC000;1A1R3000;1A1R6000;1A1RC000;1A1SC000;4A1Q6Q9S;4A1Q6QCS;4A1Q6R3S;4A1Q6R6S;4A1Q6RCS;4A1Q6SCS;1A2Q6000;1A2Q9000;1A2QC000;1A2R3000;1A2R6000;1A2RC000;1A2SC000;4A2Q6Q9S;4A2Q6QCS;4A2Q6R3S;4A2Q6R6S;4A2Q6RCS;4A2Q6SCS;1A3Q6000;1A3Q9000;1A3QC000;1A3R3000;1A3R6000;1A3RC000;1A3SC000;4A3Q6Q9S;4A3Q6QCS;4A3Q6R3S;4A3Q6R6S;4A3Q6RCS;4A3Q6SCS;1A6Q6000;1A6Q9000;1A6QC000;1A6R3000;1A6R6000;1A6RC000;1A6SC000;4A6Q6Q9S;4A6Q6QCS;4A6Q6R3S;4A6Q6R6S;4A6Q6RCS;4A6Q6SCS;1A7Q6000;1A7Q9000;1A7QC000;1A7R3000;1A7R6000;1A7RC000;1A7SC000;4A7Q6Q9S;4A7Q6QCS;4A7Q6R3S;4A7Q6R6S;4A7Q6RCS;4A7Q6SCS;1A8Q6000;1A8Q9000;1A8QC000;1A8R3000;1A8R6000;1A8RC000;1A8SC000;4A8Q6Q9S;4A8Q6QCS;4A8Q6R3S;4A8Q6R6S;4A8Q6RCS;4A8Q6SCS;1A9Q6000;1A9Q9000;1A9QC000;1A9R3000;1A9R6000;1A9RC000;1A9SC000;4A9Q6Q9S;4A9Q6QCS;4A9Q6R3S;4A9Q6R6S;4A9Q6RCS;4A9Q6SCS;1AAQ6000;1AAQ9000;1AAQC000;1AAR3000;1AAR6000;1AARC000;1AASC000;4AAQ6Q9S;4AAQ6QCS;4AAQ6R3S;4AAQ6R6S;4AAQ6RCS;4AAQ6SCS;1ABQ6000;1ABQ9000;1ABQC000;1ABR3000;1ABR6000;1ABRC000;1ABSC000;4ABQ6Q9S;4ABQ6QCS;4ABQ6R3S;4ABQ6R6S;4ABQ6RCS;4ABQ6SCS;1A4Q6000;1A4Q9000;1A4QC000;1A4R3000;1A4R6000;1A4RC000;1A4SC000;4A4Q6Q9S;4A4Q6QCS;4A4Q6R3S;4A4Q6R6S;4A4Q6RCS;4A4Q6SCS;1A5Q6000;1A5Q9000;1A5QC000;1A5R3000;1A5R6000;1A5RC000;1A5SC000;4A5Q6Q9S;4A5Q6QCS;4A5Q6R3S;4A5Q6R6S;4A5Q6RCS;4A5Q6SCS;108Q6000;108Q9000;108QC000;108R3000;408Q6Q9S;408Q6QCS;408Q6R3S

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

완벽한 전략은 없다.

상황에 따라 손절도 할수있고, 잠시 멈출필요도 있다.

이런것들은 모두 시뮬레이션을 통해서 적절한 설정이 필요하다.

 

 

처음에 공격적인 설정을 했다가.. 시뮬레이션을 통해서 지금은 보수적인 설정으로 운용중..

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. CCXT
CCXT는 다양한 API를 지원해서 많이 사용된다.
분봉데이터를 가져오거나 주문를 위한 API가 잘 만들어져 있다.
그러나, 주문후 체결되지 않은 정보(open position), 체결후 정보(closed position)에 대한 실시간 처리가 미흡하다.
주문후 지속적으로 확인하기 위한 요청을 하다 보면 Block 당한다.

2. 웹소켓
웹소켓의 API는 Low level로 단순하다.
connection을 연결하면, 1초이내에 정보가 계속 업데이트 된다.
정보에는 position정보와 현재 코인의 가격정보 등등이 있다.
connection은 코인별로 만들어야 한다.

3. delta server
ccxt/웹소켓을 장기간 사용하다 보면.. 문제가 발생할때가 있는데 reset을 시키는데 어려움이 있다면, 이것을 추천한다.

4. TA-LIB
TA-LIB는 스토캐스틱, 볼린저밴드같은 기술적 분석을 위해서 필요한 API를 제공한다.

5. 텔레그램 API
운용중인 상태를 메시지로 받고 싶을때 사용한다.
운용 정보를 요청/응답 받을 수 있다.

6. influxDB, Grafana
운용 상태를 모니터링하기 위해서 필요하다.

모니터링 대상 예시

1. 현재가

2. 잔고

3. 매매수량/수익률

4. 콜/풋 신호

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ccxt와 websocket api를 사용중에 문제가 생겼다.

 

ccxt와 websocket api 

https://stocknotes.tistory.com/51?category=762346

 

[비트맥스] 2. CCXT와 웹소켓, 그리고 TA-LIB

자동매매 프로그램을 만들기 위해서 기본적으로 알아야하는 라이브러리가 있다. 1. CCXT CCXT는 다양한 API를 지원해서 많이 사용된다. 분봉데이터를 가져오거나 주문를 위한 API가 잘 만들어져 있다. 그러나, 주..

stocknotes.tistory.com

websocket api로 주문 및 포지션 정보를 얻을수있는데,

제대로 데이터가 안들어오고 먹통이 되는 상황이 발생한다. 특히, 비트코인(BTCUSD)은 너무 자주 발생한다..

강제로 bitmex_websocket을 reset도 시도해 봤지만, 효과를 보지 못했고.. 

이런저런 고민끝에 Delta Server를 사용하게 되었다.

 

https://github.com/BitMEX/api-connectors/tree/master/official-ws/delta-server

 

BitMEX/api-connectors

Libraries for connecting to the BitMEX API. Contribute to BitMEX/api-connectors development by creating an account on GitHub.

github.com

nodejs에서 실시간데이터를 가져오는 서버를 구동시키고, 거기서 데이터를 가져온다.

이 서버를 사용해도 주문/포지션 정보가 먹통이 되는데, 이때 마다 서버를 종료시키고 다시 실행시키면 유지가 가능하다.

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

F3::

Gui, New
Gui, Add, Text, x10 y10 w150 h30 vA, 준비
Gui, Add, Button, x10 y50 w150 h30, ExecLoop
Gui, Add, Button, x10 y100 w150 h30, 종료
Gui, Show

return

ButtonExecLoop:

Gui, Submit, nohide
Guicontrol,,A,시작

Loop
{
check1()
Sleep, 3000
check2()

Sleep, 3000

}

return


check1()
{
ImageSearch, vx, vy, 0,0, A_ScreenWidth, A_ScreenHeight, *50 login_click.png
IF ErrorLevel = 0
{
Gui, Submit, nohide
Guicontrol,,A, %TimeString% click1찾았음
vx:=vx+20
vy:=vy+5
MouseClick, left, %vx%, %vy%
send, {ENTER}
return
}



FormatTime, TimeString,T12, Time

IF ErrorLevel = 1
{

Gui, Submit, nohide
Guicontrol,,A, %TimeString% 못찾음
}
IF ErrorLevel = 2
{
Gui, Submit, nohide
Guicontrol,,A, %TimeString% 파일없음
}
}


check2()
{
ImageSearch, vx, vy, 0,0, A_ScreenWidth, A_ScreenHeight, *50 click2.png
IF ErrorLevel = 0
{
Gui, Submit, nohide
Guicontrol,,A, %TimeString% click2찾았음
vx:=vx+20
vy:=vy+5
MouseClick, left, %vx%, %vy%
send, {ENTER}

}


FormatTime, TimeString,T12, Time

IF ErrorLevel = 1
{

Gui, Submit, nohide
Guicontrol,,A, %TimeString% 못찾음
}
IF ErrorLevel = 2
{
Gui, Submit, nohide
Guicontrol,,A, %TimeString% 파일없음
}
}

ButtonOK:
Gui, submit
Msgbox Hello
Gui, show
return

Button종료:
ExitApp

+ Recent posts