ironpython은 pip install 같은걸로 패키지설치 불가능
이런식으로 원하는 package가 설치되어있는 anaconda 환경을 통째로
들고오면 c#에서도 python 사용이 가능하다!!!
ironpython은 pip install 같은걸로 패키지설치 불가능
이런식으로 원하는 package가 설치되어있는 anaconda 환경을 통째로
들고오면 c#에서도 python 사용이 가능하다!!!
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]
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)
text = "수익율:{}, 손익가:{}".format(str(stock_data['수익율'].iloc[i]),str(stock_data['손익가'].iloc[i]))
"{} {}".format( 원하는인자1,원하는인자2)
이런식으로 사용
파이썬 가상환경 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 설치해서 진행하면됨!!
원하는 데이터 프레임에서 원하는 행렬만 얻는방법
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)]이런식으로 사용하면됨
시간순으로 되어있는 dataFrame을
역순으로 정렬
data9 = data9.sort_values(by=['ds'],axis=0,ascending=False) ## 최신순으로 다시 정렬
금일 거래 종목
-12000했음
심지어 어제 거래했던 종목을 아침 시작하자마자 9천원 이득보면서 시작했는데
결론은 -3000ㅋ
| LG디스플레이 |
| KCTC |
손절은 팔때까지 딕셔너리 삭제하지말자!! 그러면 4번차면 파는거 괜찮은듯!
동방(004140)
매수는 좋앗는데 매도가 안됫음
돌파매도를 조금더 느슨하게 하자그냥 이거때매 손해보는게 많음
바이넥스
매수도 엉망임
닿고 두번째 고가에 샀음 (이거는 그냥 바로 신호왔을때 산게 좋았다, 만약 두번오르면 사지말게하는건 있어야할듯)
(매수에도 오른거 확인하는거 필요!!)
구매괜찮았는데 왜 볼리저 뚫었는데 2번호가로 파는게 안통했나봄 너무 빨리 내려왔나봄 거의 바로 팔게만들자
구영테크
매수 자체도 좋지않았음 올라갔을때 샀음
차트 자체가 손해보는 차트긴한데
애초에 내려가면 바로 팔게 하던지 해야함
KCTC
차트는 이득볼수도 있었는데
손절을 못버텨서 이득못봄, 매수 타이밍도 안좋았음 11:15분 7055매수가 너무 안좋았음
그냥 안건 1:선행스팬2보다 낮아지면 사는거였으면 괜찮았음
포스코엠택
거의 최저에 사고 최고에 팔았음 완벽함
LG디스플레이
매수는 공식에 맞게 잘함
차트가 안좋았으므로 손절에 바로 들어갔어야함 (손절들어가는걸 더 빡시게 하자)
코드 수정사항
def func_real_sonjuldef func_more_Money
두함수 모두 돌입하면 끝을 보는걸로...
기존 1초 -> 0.1초로 주기 수정
버틴횟수 40회 -> 150회로 수정
만약 너무 잘 팔아버리면 해당 값을 더 올려야할듯
기존상한가 횟수 2회 ->2회 유지
결과
코드 수정
돌파 매매,매수
기존 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분에 전부 파는 코드 만들어야함
못팔빠에야 그냥 탑에 닿으면 무조건 판다는 생각으로 가야할듯 이걸로 수정하자!
문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...