레이블이 python인 게시물을 표시합니다. 모든 게시물 표시
레이블이 python인 게시물을 표시합니다. 모든 게시물 표시

2022년 6월 19일 일요일

[ironpython] pip install pandas

 ironpython은 pip install 같은걸로 패키지설치 불가능


var paths = engine.GetSearchPaths();
paths.Add(@"C:\Users\anaconda3\envs\py37_32");
paths.Add(@"C:\Users\anaconda3\envs\py37_32\DLLs");
paths.Add(@"C:\Users\anaconda3\envs\py37_32\Lib");
paths.Add(@"C:\Users\anaconda3\envs\py37_32\Lib\site-packages");
engine.SetSearchPaths(paths);

이런식으로 원하는 package가 설치되어있는 anaconda 환경을 통째로

들고오면 c#에서도 python 사용이 가능하다!!!


2022년 6월 9일 목요일

python list

 



### 작은순서로 sorting하고 앞에 4개만 남기는 리스트
        d1 = sorted(Dict_distance.items(),key=operator.itemgetter(1),reverse=False)[:4]
        print(d1)

2021년 8월 21일 토요일

python calculation Psar

 





def 계산psar(self,barsdata, iaf=0.02, maxaf=0.2):
length = len(barsdata)
first_index = 0
high = list(barsdata['high'])
low = list(barsdata['low'])
close = list(barsdata['y'])
psar = close[0:len(close)]
bull = True
af = iaf

hp = high[first_index]
lp = low[first_index]


for i in range(first_index+2, length):
if bull:
psar[i] = psar[i - 1] + af * (hp - psar[i - 1])
else:
psar[i] = psar[i - 1] + af * (lp - psar[i - 1])
reverse = False
if bull:
if low[i] < psar[i]:
bull = False
reverse = True
psar[i] = hp
lp = low[i]
af = iaf
else:
if high[i] > psar[i]:
bull = True
reverse = True
psar[i] = lp
hp = high[i]
af = iaf
if not reverse:
if bull:
if high[i] > hp:
hp = high[i]
af = min(af + iaf, maxaf)
if low[i - 1] < psar[i]:
psar[i] = low[i - 1]
if low[i - 2] < psar[i]:
psar[i] = low[i - 2]
else:
if low[i] < lp:
lp = low[i]
af = min(af + iaf, maxaf)
if high[i - 1] > psar[i]:
psar[i] = high[i - 1]
if high[i - 2] > psar[i]:
psar[i] = high[i - 2]


barsdata["psar"] = psar





def 실시간계산psar(self,barsdata, iaf=0.02, maxaf=0.2):

length = len(barsdata)
first_index = len(barsdata)-2
high = list(barsdata['high'])
low = list(barsdata['low'])

bull = True
af = iaf

hp = high[first_index]
lp = low[first_index]

for i in range(first_index + 2, length):
if bull:
barsdata["psar"].iloc[i] = barsdata["psar"].iloc[i - 1] + af * (hp - barsdata["psar"].iloc[i - 1])
else:
barsdata["psar"].iloc[i] = barsdata["psar"].iloc[i - 1] + af * (lp - barsdata["psar"].iloc[i - 1])
reverse = False
if bull:
if low[i] < barsdata["psar"].iloc[i]:
bull = False
reverse = True
barsdata["psar"].iloc[i] = hp
lp = low[i]
af = iaf
else:
if high[i] > barsdata["psar"].iloc[i]:
bull = True
reverse = True
barsdata["psar"].iloc[i] = lp
hp = high[i]
af = iaf
if not reverse:
if bull:
if high[i] > hp:
hp = high[i]
af = min(af + iaf, maxaf)
if low[i - 1] < barsdata["psar"].iloc[i]:
barsdata["psar"].iloc[i] = low[i - 1]
if low[i - 2] < barsdata["psar"].iloc[i]:
barsdata["psar"].iloc[i] = low[i - 2]
else:
if low[i] < lp:
lp = low[i]
af = min(af + iaf, maxaf)
if high[i - 1] > barsdata["psar"].iloc[i]:
barsdata["psar"].iloc[i] = high[i - 1]
if high[i - 2] > barsdata["psar"].iloc[i]:
barsdata["psar"].iloc[i] = high[i - 2]

2021년 8월 18일 수요일

python calculate DMI(원본)

 






def cal_dmi(self,data, n=14,n_ADX=14):
i = 0
UpI = [0]
DoI = [0]

data["UpI"]=0
data["DoI"]=0

while i + 1 <= data.index[-1] :
UpMove = data.loc[i + 1, "high"] - data.loc[i, "high"]
DoMove = data.loc[i, "low"] - data.loc[i+1, "low"]
if UpMove > DoMove and UpMove > 0 :
UpD = UpMove
else :
UpD = 0
data["UpI"].iloc[i] = UpD
# UpI.append(UpD)

if DoMove > UpMove and DoMove > 0 :
DoD = DoMove
else :
DoD = 0

# DoI.append(DoD)
data["DoI"].iloc[i] = DoD
i = i + 1

i = 0
TR_l = [0]
data["TR_l"]=0
while i < data.index[-1]:
TR = max(data.loc[i + 1, 'high'], data.loc[i, 'y']) - min(data.loc[i + 1, 'low'], data.loc[i, 'y'])
# TR_l.append(TR)
data["TR_l"].iloc[i]=TR
i = i + 1


TR_s = pd.Series(TR_l)
# ATR = pd.Series(TR_s.ewm(span=n, min_periods=1).mean())
ATR = pd.Series(data["TR_l"].ewm(span=n, min_periods=1).mean())
# UpI = pd.Series(UpI)
# DoI = pd.Series(DoI)
# PosDI = pd.Series(UpI.ewm(span=n, min_periods=1).mean() / ATR)
# NegDI = pd.Series(DoI.ewm(span=n, min_periods=1).mean() / ATR)

PosDI = pd.Series(data["UpI"].ewm(span=n, min_periods=1).mean() / ATR)
NegDI = pd.Series(data["DoI"].ewm(span=n, min_periods=1).mean() / ATR)

ADX = pd.Series((abs(PosDI - NegDI) / (PosDI + NegDI)).ewm(span=n_ADX, min_periods=1).mean(), name='ADX_' + str(n) + '_' + str(n_ADX))
data["DIMinus"] =round(NegDI*100,2)
data["DIPlus"] = round(PosDI*100,2)
data["ADX"] =round(ADX*100,2)











######실시간용과 전체용

def 계산DMI(self,data, n=14,n_ADX=14):


data["UpI"]=0
data["DoI"]=0
data["TR_l"]=0

# first_index = 803

# print("111:[%s] 222:[%s]"%(data.index[-1],len(data)-1))

# i = first_index
i=0

while i + 1 <= len(data)-1:
# UpMove = data.loc[i+1 , "high"] - data.loc[i, "high"]
# DoMove = data.loc[i, "low"] - data.loc[i+1, "low"]
# print("i:[%s][%s]"%(i,data["ds"].iloc[i]))
UpMove = data["high"].iloc[i + 1] - data["high"].iloc[i]
DoMove = data["low"].iloc[i] - data["low"].iloc[i + 1]

if UpMove > DoMove and UpMove > 0 :
UpD = UpMove
else :
UpD = 0

data["UpI"].iloc[i+1] = UpD

if DoMove > UpMove and DoMove > 0 :
DoD = DoMove
else :
DoD = 0

data["DoI"].iloc[i+1] = DoD
i = i + 1

i = 0

while i < len(data)-1:
TR = max(data["high"].iloc[i + 1], data["y"].iloc[i]) - min(data["low"].iloc[i + 1], data["y"].iloc[i])
data["TR_l"].iloc[i+1]=TR
i = i + 1

ATR = pd.Series(data["TR_l"].ewm(span=n, min_periods=1).mean())
PosDI = pd.Series(data["UpI"].ewm(span=n, min_periods=1).mean() / ATR)
NegDI = pd.Series(data["DoI"].ewm(span=n, min_periods=1).mean() / ATR)
ADX = pd.Series((abs(PosDI - NegDI) / (PosDI + NegDI)).ewm(span=n_ADX, min_periods=1).mean(), name='ADX_' + str(n) + '_' + str(n_ADX))

data["DIMinus"] =round(NegDI*100,2)
data["DIPlus"] = round(PosDI*100,2)
data["ADX"] =round(ADX*100,2)












def 실시간dmi(self,code,n=14,n_ADX=14):


i = len(self.실시간차트용데이터[code])-5

while i + 1 <= len(self.실시간차트용데이터[code]) - 1:
UpMove = self.실시간차트용데이터[code]["high"].iloc[i + 1] - self.실시간차트용데이터[code]["high"].iloc[i]
DoMove = self.실시간차트용데이터[code]["low"].iloc[i] - self.실시간차트용데이터[code]["low"].iloc[i + 1]

if UpMove > DoMove and UpMove > 0:
UpD = UpMove
else:
UpD = 0

# self.실시간차트용데이터[code]["UpI"].iloc[i + 1] = UpD

if DoMove > UpMove and DoMove > 0:
DoD = DoMove
else:
DoD = 0

# self.실시간차트용데이터[code]["DoI"].iloc[i + 1] = DoD
##마지막값만 변경
if i+1 == len(self.실시간차트용데이터[code]) - 1:
print("여기안타나??? [%s %s ]"%(self.실시간차트용데이터[code]["ds"].iloc[i+1],i))
print("UpD:[%s]"%UpD)
print("Dod:[%s]"%DoD)
print("UpMove DoMove:[%s,%s]"%(UpMove,DoMove))
self.실시간차트용데이터[code]["UpI"].iloc[i+1] = UpD
self.실시간차트용데이터[code]["DoI"].iloc[i+1] = DoD

i = i + 1

i = len(self.실시간차트용데이터[code])-5

while i < len(self.실시간차트용데이터[code]) - 1:
TR = max(self.실시간차트용데이터[code]["high"].iloc[i + 1], self.실시간차트용데이터[code]["y"].iloc[i]) - min(self.실시간차트용데이터[code]["low"].iloc[i + 1], self.실시간차트용데이터[code]["y"].iloc[i])
if i==len(self.실시간차트용데이터[code])-2:
self.실시간차트용데이터[code]["TR_l"].iloc[i+1] = TR
i = i + 1

ATR = pd.Series(self.실시간차트용데이터[code]["TR_l"].ewm(span=n, min_periods=1).mean())
PosDI = pd.Series(self.실시간차트용데이터[code]["UpI"].ewm(span=n, min_periods=1).mean() / ATR)
NegDI = pd.Series(self.실시간차트용데이터[code]["DoI"].ewm(span=n, min_periods=1).mean() / ATR)
print("NegDI%s"%NegDI.tail(5))
print()
ADX = pd.Series((abs(PosDI - NegDI) / (PosDI + NegDI)).ewm(span=n_ADX, min_periods=1).mean(),
name='ADX_' + str(n) + '_' + str(n_ADX))

self.실시간차트용데이터[code]["DIMinus"].iloc[len(self.실시간차트용데이터[code]) - 1] = round(NegDI.iloc[len(NegDI) - 1] * 100, 2)
self.실시간차트용데이터[code]["DIPlus"].iloc[len(self.실시간차트용데이터[code]) - 1] = round(PosDI.iloc[len(PosDI) - 1] * 100, 2)
self.실시간차트용데이터[code]["ADX"].iloc[len(self.실시간차트용데이터[code]) - 1] = round(ADX.iloc[len(ADX) - 1] * 100, 2)

2021년 4월 28일 수요일

파이썬 스트링

 text = "수익율:{}, 손익가:{}".format(str(stock_data['수익율'].iloc[i]),str(stock_data['손익가'].iloc[i]))


"{} {}".format( 원하는인자1,원하는인자2)


이런식으로 사용

2021년 4월 21일 수요일

아나콘다 가상환경 pip install 방법

 파이썬 가상환경 32비트 설치

Error : pyautogui설치안됨

import pyautogui ModuleNotFoundError: No module named 'pyautogui'


conda create -n py37_32 python=3.7 anaconda


해결: anaconda Prompt 실행

conda activate py37_32 엔터 (py37_32로 상태 변경) (커스텀 python 환경)

pip install pyautogui 명령어 실행 (원하는 명령어)

프로젝트 C:\Users\LCE\anaconda3\envs\py37_32 이거를 환경에 일단 추가한다

Error : ModuleNotFoundError: No module named 'PyQt5'

위 상황과 똑같이 py37_32환경에서 pip install PyQt5 실행해주면 된다

36Keras는 아나콘다에서 py36 설치해서 진행하면됨!!

2021년 4월 16일 금요일

[python] dataframe 특정조건 필터링 하기




원하는 데이터 프레임에서 원하는 행렬만 얻는방법
df_MACD 데이터프레임에서
MACD 최소값의 ds를 출력하기 위해 사용했음



MIN_MACD = min(df_MACD['MACD'])  ## MACD_OSC 최소값
MAX_MACD = max(df_MACD['MACD'])  ## MACD_OSC 최대값


 max_df = df_MACD[df_MACD['MACD'] == MAX_MACD] (대괄호 안에다가 공식을 넣는다!)

min_df = df_MACD[df_MACD['MACD'] == MIN_MACD]


다중조건은 
mesu_df = df_macd[(df_macd['MACD_OSC']>-1) & (df_macd['MACD_OSC']<1)]
이런식으로 사용하면됨

2021년 4월 5일 월요일

bat 파일 관리자 권한 실행하기

 














@echo off
set uaccheck=0
:CheckUAC
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACAccess
) else ( goto Done )
:UACAccess
echo 관리자 권한을 취득해야 합니다.
pause
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\uac_get_admin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\uac_get_admin.vbs"
"%temp%\uac_get_admin.vbs"
del "%temp%\uac_get_admin.vbs"
exit /b
:Done
echo 관리자 권한을 취득하였습니다.
pause
exit



2021년 3월 26일 금요일

python DataFrame 정렬


시간순으로 되어있는 dataFrame을

역순으로 정렬


 data9 = data9.sort_values(by=['ds'],axis=0,ascending=False) ## 최신순으로 다시 정렬

2021년 3월 19일 금요일

[python] cmd kill in code

 


def process_Kill(exeName):
    # python filename.py로 실행된 프로세스를 찾음
    for proc in psutil.process_iter():
        try:
            # 프로세스 이름, PID값 가져오기
            processName = proc.name()
            processID = proc.pid

            # print(processName)

            if processName[:3] == "cmd":
                # print(processName)
                commandLine = proc.cmdline()  # 동일한 프로세스 확인. code 확인
                print(commandLine)

                for item in commandLine:
                    if exeName in item:
                        parent_pid = processID  # PID
                        print("PID %s" % parent_pid)
                        parent = psutil.Process(parent_pid)  # PID 찾기

                        for child in parent.children(recursive=True):  # 자식-부모 종료
                            child.kill()

                        parent.kill()


            # print(processName, ' ', commandLine, ' - ', processID)

        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass

2021년 3월 17일 수요일

[python 주식 자동매매] 2021-03-18

 

금일 거래 종목




-12000했음

심지어 어제 거래했던 종목을 아침 시작하자마자 9천원 이득보면서 시작했는데

결론은 -3000



















LG디스플레이








KCTC





손절은 팔때까지 딕셔너리 삭제하지말자!! 그러면 4번차면 파는거 괜찮은듯!







동방(004140)


매수는 좋앗는데 매도가 안됫음

돌파매도를 조금더 느슨하게 하자그냥 이거때매 손해보는게 많음




바이넥스


매수도 엉망임 

닿고 두번째 고가에 샀음 (이거는 그냥 바로 신호왔을때 산게 좋았다, 만약 두번오르면 사지말게하는건 있어야할듯)

(매수에도 오른거 확인하는거 필요!!)

구매괜찮았는데 왜 볼리저 뚫었는데 2번호가로 파는게 안통했나봄 너무 빨리 내려왔나봄 거의 바로 팔게만들자


구영테크


매수 자체도 좋지않았음 올라갔을때 샀음

차트 자체가 손해보는 차트긴한데

애초에 내려가면 바로 팔게 하던지 해야함


KCTC

차트는 이득볼수도 있었는데


손절을 못버텨서 이득못봄, 매수 타이밍도 안좋았음 11:15분 7055매수가 너무 안좋았음

그냥 안건 1:선행스팬2보다 낮아지면 사는거였으면 괜찮았음



포스코엠택


거의 최저에 사고 최고에 팔았음 완벽함


LG디스플레이


매수는 공식에 맞게 잘함 

차트가 안좋았으므로 손절에 바로 들어갔어야함 (손절들어가는걸 더 빡시게 하자)












코드 수정사항


def func_real_sonjul
def func_more_Money
두함수 모두 돌입하면 끝을 보는걸로...




기존 1초 -> 0.1초로 주기 수정

버틴횟수 40회 -> 150회로 수정
만약 너무 잘 팔아버리면 해당 값을 더 올려야할듯


기존상한가 횟수 2회 ->2회 유지






2021년 3월 16일 화요일

[python 주식 자동매매일지]2021-03-17

 

결과










코드 수정



돌파 매매,매수

기존 10초->수정 1초






매매특이사항

부광약품은 시그널이 약한데 실수로 들어감

버팀변수를 20으로 하면 약한 시그널로 들어감

수정사항 버팀변수 20->40

매도점 24600 ,9:31


부광약품 특이사항

매도 총잔량 22527 -------매수 총 잔량 62241

매수 총 잔량이 더 많앗다! 일단 확인 원래법칙대로라면 매도가 많아야 올라감 그래서 올라가는 힘이 약한듯

잘못된점:

너무 쉽게 들어갔고(하나 내려갓는데 구매?) 볼린저 탑 찍엇을때 판매에 실패했음







키다리 스튜디오

마찬가지로 

매도총잔량 13283 --매수잔량 29000으로 매수잔량이 더 많음

과연 어떻게 될지는 두고보기


매도잔량 22000 -- 매수잔량 34000까지 오면서

볼린저 탑 까지 닿음(Good)

하지만 팔지못했음


잘못된점:

볼린저 탑 넘으면 그냥 하나호가해도 팔아버리자!!(하나 낮아져도 팔아버리자!)







덕성

마찬가지로 

매도총잔량 27000 --매수잔량 95000 으로 매수잔량이 더 많음

과연 어떻게 될지는 두고보기

볼린저 탑까지 갔음(Good)

못팔았지만 계속 올라감


여기서 볼린저 탑 근처에서 팔았어도 괜찮을듯 코드 그냥 전부 수정하자






신풍제약

마찬가지로 

매도총잔량 95000 --매수잔량 150000 으로 매수잔량이 더 많음

과연 어떻게 될지는 두고보기

매도 68000 -- 매수 146000 볼린저 탑 뚫음

102000에 매수

106000에 매도

2.98%센트 수익율 손익금액 3037


거의 최고점에서 판매했다 지렷따리




에러수정

조건검색 후 코드 안돌아 가는듯??


왜 멈췃는지 이유를 모르겠음...

조치:일단 succecProhet에 대한 update 코드를 수정해놨음..

더 지켜봐야함




수정해야할사항



오후 1:14 

매도코드 수정

볼린저 탑에 붙었을때 뚫었을때 판매도 좋지만 붙어도 판매를 가야할듯(2%이상 이득이라면)


조건검색 수정

++총매수잔량 10만이상 ?? 일단 한번 해보자~

++총매도잔량 5만이상 ??


장종료 매도가 안됨


그냥 3시 19분에 전부 파는 코드 만들어야함



못팔빠에야 그냥 탑에 닿으면 무조건 판다는 생각으로 가야할듯 이걸로 수정하자!



매매기록.txt



git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...