평가판 QuantX
개시하다
나는 이과 대학생으로 평소에 기계공학을 전공한다.
나는 단지 조금 독학했을 뿐, 기본적으로 금융 지식이 없다.
이번 SmartTrade 실습, QuantXhttps://quantx.io/)
에서 알고리즘 개발을 진행했다.
QuantX 사용
의 목적
QuantX로 알고리즘 개발을 진행하다.
생성할 알고리즘
복잡한 거래를 하지 말고 큰 상승세의 최초 구매, 큰 하락세의 최초 베스트셀러 알고리즘을 사용하라.
따라서 아래 그림과 같이 단기선이 장기선을 초과할 때 구매할 수 있다.(반대로)
실제로 해 보다
이번엔 이 기사https://qiita.com/katakyo/items/d786599f6638d53a8602)
참고로 하다.
제작된 알고리즘은 다음과 같다.
[추기]
이번에는 위 그림과 같은 황금 십자가를 만들고 싶었지만, 이후 검증된 결과의 알고리즘이 평균 배리율의 것이 됐다.
따라서 아래의 알고리즘은 상술한 그림과 같은 것이 아니라 평균 배리율이다.
try.pyimport talib as ta
import pandas as pd
import numpy as np
#関数の初期化
def initialize(ctx):#初期関数の定義
#設定
ctx.logger.debug("initialize() called")#プログラムのログ出力を行う
ctx.configure(#トレードの基本設定
target="jp.stock.daily",#日本株を使う
channels={ #銘柄選択 #データを実際に入れる
"jp.stock": {
"symbols": [
"jp.stock.7201", #日産自動車
"jp.stock.2914", #日本たばこ産業
"jp.stock.8766", #東京海上ホールディングス
"jp.stock.8031", #三井物産
"jp.stock.8316", #三井住友フィナンシャルグループ
"jp.stock.8411", #みずほフィナンシャルグループ
# "jp.stock.9427", #NTTドコモ
"jp.stock.4502", #武田薬品工業
"jp.stock.8058", #三菱商事
"jp.stock.9433", #KDDI
"jp.stock.9432", #日本電信電話
"jp.stock.7267", #本田技研工業
"jp.stock.6902", #デンソー
"jp.stock.4503", #アステラス製薬
"jp.stock.4063", #信越化学工業
"jp.stock.7974", #任天堂
"jp.stock.6981", #村田製作所
"jp.stock.3382", #セブン&アイ・ホールディングス
"jp.stock.9020", #東日本旅客鉄道
"jp.stock.8802", #三菱地所
"jp.stock.9022", #東海旅客鉄道
"jp.stock.9984", #ソフトバンクグループ
"jp.stock.6861", #キーエンス
"jp.stock.6501", #日立製作所
"jp.stock.6752", #パナソニック
"jp.stock.6758", #ソニー
"jp.stock.6954", #ファナック
"jp.stock.7203", #トヨタ自動車
"jp.stock.7751", #キヤノン
],
"columns": [#columnsの中に終値などの必要なデータを入れる
"open_price_adj", # 始値(株式分割調整後)
"high_price_adj", # 高値(株式分割調整後)
"low_price_adj", # 安値(株式分割調整後)
"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
]
}
}
)
#シグナル定義
def _my_signal(data): #売買シグナルの定義
#fillna(method='ffill')を使うと欠損値(NaN)を自動的に保管してくれる
cp = data["close_price_adj"].fillna(method="ffill")
ctx.logger.debug(cp)
#単純移動平均線(SMA)の設定
#データの入れ物を用意
s_sma = pd.DataFrame(data=0,columns=[], index=cp.index)#短期の単純移動曲線
l_sma = pd.DataFrame(data=0,columns=[], index=cp.index)
#TA-Libによる計算
for (sym,val) in cp.items():
s_sma[sym] = ta.SMA(cp[sym].values.astype(np.double), timeperiod=5)
l_sma[sym] = ta.SMA(cp[sym].values.astype(np.double), timeperiod=75)
#SMAの売買シグナルの定義
#短期線と長期線の比率を出したもの
s_sma_ratio = s_sma/l_sma
df_sma_buy_sig = (s_sma_ratio > 1.02) & (s_sma_ratio < 1.04)
df_sma_sell_sig = (s_sma_ratio < 0.96)
ctx.logger.debug(cp)
#売買シグナルの設定
buy_sig = df_sma_buy_sig
sell_sig = df_sma_sell_sig
buy_sig = df_sma_buy_sig
sell_sig = df_sma_sell_sig
#return内にシグナル定義部分で定義した変数を入れて可視化できるようにする
return {
"s_sma": s_sma,
"l_sma": l_sma,
"buy:sig":buy_sig,
"sell:sig":sell_sig,
}
# シグナル登録 登録するとシグナルが生成される
ctx.regist_signal("my_signal", _my_signal)
#取引数量の設定
def handle_signals(ctx, date, current):
df = current.copy()
# 買いシグナル
df_long = df[df["buy:sig"]]
if not df_long.empty:
for (sym, val) in df_long.iterrows():
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.07, comment= "買いシグナル")
# 売りシグナル
df_sell = df[df["sell:sig"]]
if not df_sell.empty:
for (sym, val) in df_sell.iterrows():
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment= "売りシグナル")
done_syms = set([])
for (sym,val) in ctx.portfolio.positions.items():
returns = val["returns"]
if returns < -0.15:
sec = ctx.getSecurity(sym)
sec.order(-val["amount"], comment="損切り(%f)" % returns)
done_syms.add(sym)
elif returns > 0.30:
sec = ctx.getSecurity(sym)
sec.order(-val["amount"], comment="利益確定売(%f)" % returns)
done_syms.add(sym)
단기선과 장기선의 위치로 매매하고 싶어 장기선/단기선 1.02~1.04에서 사고 0.96 이하에서 판다.
결실
이번에는 단순 이동 평균선만 사용했지만 더 높은 정밀도를 가진 제품을 만들기 위해서는 다른 지표를 조합할 필요가 있다고 생각한다.다음에는 또 다른 것을 조합해 보고 싶다.
참고 자료
QuantX( https://quantx.io/ )
이동평균선에서 이 1~3종의 이동평균선을 그려보세요~#QuantXhttps://qiita.com/katakyo/items/d786599f6638d53a8602)
소차랑 강사(2018)'이동평균선 궁극독법·사용법'일본실업출판사
학습회
SmartTrade사는 매주 수요일 18:00에 학습회를 개최한다.( https://python-algo.connpass.com/)
Reference
이 문제에 관하여(평가판 QuantX), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Miku_F/items/49c20fcbbbfae59cb9a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
의 목적
QuantX로 알고리즘 개발을 진행하다.
생성할 알고리즘
복잡한 거래를 하지 말고 큰 상승세의 최초 구매, 큰 하락세의 최초 베스트셀러 알고리즘을 사용하라.
따라서 아래 그림과 같이 단기선이 장기선을 초과할 때 구매할 수 있다.(반대로)
실제로 해 보다
이번엔 이 기사https://qiita.com/katakyo/items/d786599f6638d53a8602)
참고로 하다.
제작된 알고리즘은 다음과 같다.
[추기]
이번에는 위 그림과 같은 황금 십자가를 만들고 싶었지만, 이후 검증된 결과의 알고리즘이 평균 배리율의 것이 됐다.
따라서 아래의 알고리즘은 상술한 그림과 같은 것이 아니라 평균 배리율이다.
try.py
import talib as ta
import pandas as pd
import numpy as np
#関数の初期化
def initialize(ctx):#初期関数の定義
#設定
ctx.logger.debug("initialize() called")#プログラムのログ出力を行う
ctx.configure(#トレードの基本設定
target="jp.stock.daily",#日本株を使う
channels={ #銘柄選択 #データを実際に入れる
"jp.stock": {
"symbols": [
"jp.stock.7201", #日産自動車
"jp.stock.2914", #日本たばこ産業
"jp.stock.8766", #東京海上ホールディングス
"jp.stock.8031", #三井物産
"jp.stock.8316", #三井住友フィナンシャルグループ
"jp.stock.8411", #みずほフィナンシャルグループ
# "jp.stock.9427", #NTTドコモ
"jp.stock.4502", #武田薬品工業
"jp.stock.8058", #三菱商事
"jp.stock.9433", #KDDI
"jp.stock.9432", #日本電信電話
"jp.stock.7267", #本田技研工業
"jp.stock.6902", #デンソー
"jp.stock.4503", #アステラス製薬
"jp.stock.4063", #信越化学工業
"jp.stock.7974", #任天堂
"jp.stock.6981", #村田製作所
"jp.stock.3382", #セブン&アイ・ホールディングス
"jp.stock.9020", #東日本旅客鉄道
"jp.stock.8802", #三菱地所
"jp.stock.9022", #東海旅客鉄道
"jp.stock.9984", #ソフトバンクグループ
"jp.stock.6861", #キーエンス
"jp.stock.6501", #日立製作所
"jp.stock.6752", #パナソニック
"jp.stock.6758", #ソニー
"jp.stock.6954", #ファナック
"jp.stock.7203", #トヨタ自動車
"jp.stock.7751", #キヤノン
],
"columns": [#columnsの中に終値などの必要なデータを入れる
"open_price_adj", # 始値(株式分割調整後)
"high_price_adj", # 高値(株式分割調整後)
"low_price_adj", # 安値(株式分割調整後)
"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
]
}
}
)
#シグナル定義
def _my_signal(data): #売買シグナルの定義
#fillna(method='ffill')を使うと欠損値(NaN)を自動的に保管してくれる
cp = data["close_price_adj"].fillna(method="ffill")
ctx.logger.debug(cp)
#単純移動平均線(SMA)の設定
#データの入れ物を用意
s_sma = pd.DataFrame(data=0,columns=[], index=cp.index)#短期の単純移動曲線
l_sma = pd.DataFrame(data=0,columns=[], index=cp.index)
#TA-Libによる計算
for (sym,val) in cp.items():
s_sma[sym] = ta.SMA(cp[sym].values.astype(np.double), timeperiod=5)
l_sma[sym] = ta.SMA(cp[sym].values.astype(np.double), timeperiod=75)
#SMAの売買シグナルの定義
#短期線と長期線の比率を出したもの
s_sma_ratio = s_sma/l_sma
df_sma_buy_sig = (s_sma_ratio > 1.02) & (s_sma_ratio < 1.04)
df_sma_sell_sig = (s_sma_ratio < 0.96)
ctx.logger.debug(cp)
#売買シグナルの設定
buy_sig = df_sma_buy_sig
sell_sig = df_sma_sell_sig
buy_sig = df_sma_buy_sig
sell_sig = df_sma_sell_sig
#return内にシグナル定義部分で定義した変数を入れて可視化できるようにする
return {
"s_sma": s_sma,
"l_sma": l_sma,
"buy:sig":buy_sig,
"sell:sig":sell_sig,
}
# シグナル登録 登録するとシグナルが生成される
ctx.regist_signal("my_signal", _my_signal)
#取引数量の設定
def handle_signals(ctx, date, current):
df = current.copy()
# 買いシグナル
df_long = df[df["buy:sig"]]
if not df_long.empty:
for (sym, val) in df_long.iterrows():
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.07, comment= "買いシグナル")
# 売りシグナル
df_sell = df[df["sell:sig"]]
if not df_sell.empty:
for (sym, val) in df_sell.iterrows():
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment= "売りシグナル")
done_syms = set([])
for (sym,val) in ctx.portfolio.positions.items():
returns = val["returns"]
if returns < -0.15:
sec = ctx.getSecurity(sym)
sec.order(-val["amount"], comment="損切り(%f)" % returns)
done_syms.add(sym)
elif returns > 0.30:
sec = ctx.getSecurity(sym)
sec.order(-val["amount"], comment="利益確定売(%f)" % returns)
done_syms.add(sym)
단기선과 장기선의 위치로 매매하고 싶어 장기선/단기선 1.02~1.04에서 사고 0.96 이하에서 판다.결실
이번에는 단순 이동 평균선만 사용했지만 더 높은 정밀도를 가진 제품을 만들기 위해서는 다른 지표를 조합할 필요가 있다고 생각한다.다음에는 또 다른 것을 조합해 보고 싶다.
참고 자료
QuantX( https://quantx.io/ )
이동평균선에서 이 1~3종의 이동평균선을 그려보세요~#QuantXhttps://qiita.com/katakyo/items/d786599f6638d53a8602)
소차랑 강사(2018)'이동평균선 궁극독법·사용법'일본실업출판사
학습회
SmartTrade사는 매주 수요일 18:00에 학습회를 개최한다.( https://python-algo.connpass.com/)
Reference
이 문제에 관하여(평가판 QuantX), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Miku_F/items/49c20fcbbbfae59cb9a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
QuantX( https://quantx.io/ )
이동평균선에서 이 1~3종의 이동평균선을 그려보세요~#QuantXhttps://qiita.com/katakyo/items/d786599f6638d53a8602)
소차랑 강사(2018)'이동평균선 궁극독법·사용법'일본실업출판사
학습회
SmartTrade사는 매주 수요일 18:00에 학습회를 개최한다.( https://python-algo.connpass.com/)
Reference
이 문제에 관하여(평가판 QuantX), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Miku_F/items/49c20fcbbbfae59cb9a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(평가판 QuantX), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Miku_F/items/49c20fcbbbfae59cb9a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)