QuantX에서 브린 테이프를 사용한 시스템 거래
자기 소개
이번에 스마트트레이드에서 인턴으로 일한 제이입니다.
샤오제에 대해서 알고 싶은 사람이 여기 있어요.
첫 번째 문장이 여기 있다(QuantX를 처음 본다)
https://qiita.com/investor-gon/items/2b1952ae5c2c88334c74
뭘 만들지(목표 달성)
일경 평균 기여율 상위 10개 품목 사용(2018년 12월 25일), 브린대-2σ근처에서 사다σ할 때 팔고, 제작해서 넣는 알고리즘!!!
일단 움직이면 돼.
공식적으로 쓰면 이런 느낌이에요.
買い(buy)= \frac{lowerband(-2σ)}{価格} >1.002
\\
売り(sell) =\frac{価格}{upperband(+2σ)} >0.99
브린대는 이동평균선과 그 위에 파동폭을 나타내는 선을 더한 지표다.
이것은 1980년 존 브린그가 설계한 지표로 통계학을 응용하는 기술 지표 중의 하나이다.
1회 표준 편차, 1σ=약 68.3%
2차 표준 편차, 2σ=약 95.5%
3회 표준 편차, 3σ=약 99.7%
우선 완성 코드(복사 붙여넣기,) ############################################################################
# 日経225 ボリンジャーバンド
#ライブラリーの設定
import pandas as pd
import talib as ta
import numpy as np
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
"volume_adj", # 出来高
"txn_volume", # 売買代金
]
}
}
)
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
결과는 다음과 같다.
3년간 36% 증가했다.어?너무 긍정적이고 즐거웠어요.
겸사겸사 말씀드리겠습니다.
알파치는 알고리즘의 수익률에서 시장 전체 운동(기준)과 연동된 수익을 뺀 것으로, 이 수치가 높을수록 기준 수익률이 높을수록 그에 상응하는 수익이 높다는 뜻이다.
베타값은 알고리즘의 수익이 증권시장 전체의 운동에 얼마나 민감하게 반응하고 변동하는지를 나타내는 수치다.이 수치가 높을수록 전체 증시의 변동폭(증감폭)이 크다는 의미다.
해설
총서 선택
#총서 목록 설정import pandas as pd
import talib as ta
import numpy as np
사용할 장서를 미리 설정하다.
일본 주식의 선택
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
#"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
#"volume_adj", # 出来高
#"txn_volume", # 売買代金
]
}
}
)
이번 사용을 가져온 일경 평균 공헌률 상위 10개 품종.
또 사용된 값은 일족의 종가(주식분할 조정 후)다.
거래 방법
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
이번에 사용한 값을cp,블린대에 대입(+2)σ및 - 2σ)제발
이번엔 족히 25일, +-2σ구문을 생성합니다.
(코드는 여기입니다.timeperiod=25,nbdevup=2,nbdevdn=2,)
그리고 주식 가격과 브린치의 비율을 찾는 것이 매매를 결정한다.
보답으로 브린벨트의 가격, 구매 신호와 판매 신호를 설정한다.
신호를 등록해.
브린대는 이동평균선과 그 위에 파동폭을 나타내는 선을 더한 지표다.
이것은 1980년 존 브린그가 설계한 지표로 통계학을 응용하는 기술 지표 중의 하나이다.
1회 표준 편차, 1σ=약 68.3%
2차 표준 편차, 2σ=약 95.5%
3회 표준 편차, 3σ=약 99.7%
수량 선택
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
그리고 아까 설정한 구매 신호로 매매를 하는 거예요.
상세한 상황은 여기에 있으며, 이번에 사용한 것만 열거합니다.
order_target_percent(amount, comment): void
이 주식의 총보유액과 총자산평가액(현금+보유위치평가액)을 지정비율로 하기 위해 주문을 진행한다.amount에서 비율을 지정합니다(예를 들어 5%면 0.05).
이번 경우 총자산의 15%를 매입해 자금이 없어지면 끝인 것처럼 느껴졌다는 것이다.
상당히 공격적인 무역이 성과를 높였다는 느낌입니다.
그럼 이번엔 여기까지.
Reference
이 문제에 관하여(QuantX에서 브린 테이프를 사용한 시스템 거래), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/investor-gon/items/2373527e140335105def
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
일경 평균 기여율 상위 10개 품목 사용(2018년 12월 25일), 브린대-2σ근처에서 사다σ할 때 팔고, 제작해서 넣는 알고리즘!!!
일단 움직이면 돼.
공식적으로 쓰면 이런 느낌이에요.
買い(buy)= \frac{lowerband(-2σ)}{価格} >1.002
\\
売り(sell) =\frac{価格}{upperband(+2σ)} >0.99
브린대는 이동평균선과 그 위에 파동폭을 나타내는 선을 더한 지표다.이것은 1980년 존 브린그가 설계한 지표로 통계학을 응용하는 기술 지표 중의 하나이다.
1회 표준 편차, 1σ=약 68.3%
2차 표준 편차, 2σ=약 95.5%
3회 표준 편차, 3σ=약 99.7%
우선 완성 코드(복사 붙여넣기,) ############################################################################
# 日経225 ボリンジャーバンド
#ライブラリーの設定
import pandas as pd
import talib as ta
import numpy as np
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
"volume_adj", # 出来高
"txn_volume", # 売買代金
]
}
}
)
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
결과는 다음과 같다.
3년간 36% 증가했다.어?너무 긍정적이고 즐거웠어요.
겸사겸사 말씀드리겠습니다.
알파치는 알고리즘의 수익률에서 시장 전체 운동(기준)과 연동된 수익을 뺀 것으로, 이 수치가 높을수록 기준 수익률이 높을수록 그에 상응하는 수익이 높다는 뜻이다.
베타값은 알고리즘의 수익이 증권시장 전체의 운동에 얼마나 민감하게 반응하고 변동하는지를 나타내는 수치다.이 수치가 높을수록 전체 증시의 변동폭(증감폭)이 크다는 의미다.
해설
총서 선택
#총서 목록 설정import pandas as pd
import talib as ta
import numpy as np
사용할 장서를 미리 설정하다.
일본 주식의 선택
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
#"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
#"volume_adj", # 出来高
#"txn_volume", # 売買代金
]
}
}
)
이번 사용을 가져온 일경 평균 공헌률 상위 10개 품종.
또 사용된 값은 일족의 종가(주식분할 조정 후)다.
거래 방법
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
이번에 사용한 값을cp,블린대에 대입(+2)σ및 - 2σ)제발
이번엔 족히 25일, +-2σ구문을 생성합니다.
(코드는 여기입니다.timeperiod=25,nbdevup=2,nbdevdn=2,)
그리고 주식 가격과 브린치의 비율을 찾는 것이 매매를 결정한다.
보답으로 브린벨트의 가격, 구매 신호와 판매 신호를 설정한다.
신호를 등록해.
브린대는 이동평균선과 그 위에 파동폭을 나타내는 선을 더한 지표다.
이것은 1980년 존 브린그가 설계한 지표로 통계학을 응용하는 기술 지표 중의 하나이다.
1회 표준 편차, 1σ=약 68.3%
2차 표준 편차, 2σ=약 95.5%
3회 표준 편차, 3σ=약 99.7%
수량 선택
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
그리고 아까 설정한 구매 신호로 매매를 하는 거예요.
상세한 상황은 여기에 있으며, 이번에 사용한 것만 열거합니다.
order_target_percent(amount, comment): void
이 주식의 총보유액과 총자산평가액(현금+보유위치평가액)을 지정비율로 하기 위해 주문을 진행한다.amount에서 비율을 지정합니다(예를 들어 5%면 0.05).
이번 경우 총자산의 15%를 매입해 자금이 없어지면 끝인 것처럼 느껴졌다는 것이다.
상당히 공격적인 무역이 성과를 높였다는 느낌입니다.
그럼 이번엔 여기까지.
Reference
이 문제에 관하여(QuantX에서 브린 테이프를 사용한 시스템 거래), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/investor-gon/items/2373527e140335105def
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
############################################################################
# 日経225 ボリンジャーバンド
#ライブラリーの設定
import pandas as pd
import talib as ta
import numpy as np
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
"volume_adj", # 出来高
"txn_volume", # 売買代金
]
}
}
)
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
3년간 36% 증가했다.어?너무 긍정적이고 즐거웠어요.
겸사겸사 말씀드리겠습니다.
알파치는 알고리즘의 수익률에서 시장 전체 운동(기준)과 연동된 수익을 뺀 것으로, 이 수치가 높을수록 기준 수익률이 높을수록 그에 상응하는 수익이 높다는 뜻이다.
베타값은 알고리즘의 수익이 증권시장 전체의 운동에 얼마나 민감하게 반응하고 변동하는지를 나타내는 수치다.이 수치가 높을수록 전체 증시의 변동폭(증감폭)이 크다는 의미다.
해설
총서 선택
#총서 목록 설정import pandas as pd
import talib as ta
import numpy as np
사용할 장서를 미리 설정하다.
일본 주식의 선택
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
#"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
#"volume_adj", # 出来高
#"txn_volume", # 売買代金
]
}
}
)
이번 사용을 가져온 일경 평균 공헌률 상위 10개 품종.
또 사용된 값은 일족의 종가(주식분할 조정 후)다.
거래 방법
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
이번에 사용한 값을cp,블린대에 대입(+2)σ및 - 2σ)제발
이번엔 족히 25일, +-2σ구문을 생성합니다.
(코드는 여기입니다.timeperiod=25,nbdevup=2,nbdevdn=2,)
그리고 주식 가격과 브린치의 비율을 찾는 것이 매매를 결정한다.
보답으로 브린벨트의 가격, 구매 신호와 판매 신호를 설정한다.
신호를 등록해.
브린대는 이동평균선과 그 위에 파동폭을 나타내는 선을 더한 지표다.
이것은 1980년 존 브린그가 설계한 지표로 통계학을 응용하는 기술 지표 중의 하나이다.
1회 표준 편차, 1σ=약 68.3%
2차 표준 편차, 2σ=약 95.5%
3회 표준 편차, 3σ=약 99.7%
수량 선택
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
그리고 아까 설정한 구매 신호로 매매를 하는 거예요.
상세한 상황은 여기에 있으며, 이번에 사용한 것만 열거합니다.
order_target_percent(amount, comment): void
이 주식의 총보유액과 총자산평가액(현금+보유위치평가액)을 지정비율로 하기 위해 주문을 진행한다.amount에서 비율을 지정합니다(예를 들어 5%면 0.05).
이번 경우 총자산의 15%를 매입해 자금이 없어지면 끝인 것처럼 느껴졌다는 것이다.
상당히 공격적인 무역이 성과를 높였다는 느낌입니다.
그럼 이번엔 여기까지.
Reference
이 문제에 관하여(QuantX에서 브린 테이프를 사용한 시스템 거래), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/investor-gon/items/2373527e140335105def
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
import talib as ta
import numpy as np
def initialize(ctx):
# 設定
ctx.logger.debug("initialize() called")
ctx.configure(
target="jp.stock.daily",
channels={ # 利用チャンネル
"jp.stock": {
"symbols": [
"jp.stock.9983", #ファーストリテイリング
"jp.stock.9984", #ソフトバンク
"jp.stock.6954", #ファナック
"jp.stock.9433", #KDDI
"jp.stock.8028", #ファミリーマート
"jp.stock.8035", #東京エレクトロン
"jp.stock.4543", #テルモ
"jp.stock.6367", #ダイキン
"jp.stock.6971", #京セラ
"jp.stock.9735", #セコム
],
"columns": [
#"open_price_adj", # 始値(株式分割調整後)
#"high_price_adj", # 高値(株式分割調整後)
#"low_price_adj", # 安値(株式分割調整後)
#"close_price", # 終値
"close_price_adj", # 終値(株式分割調整後)
#"volume_adj", # 出来高
#"txn_volume", # 売買代金
]
}
}
)
#売買シグナル生成部分
def _TALIB_CALL(data):
#各銘柄の終値(株式分割調整後)を取得、欠損データの補完
cp = data["close_price_adj"].fillna(method="ffill")
upperband = {}
middleband = {}
lowerband = {}
buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
uband = pd.DataFrame(data=0,columns=[], index=cp.index)
lband = pd.DataFrame(data=0,columns=[], index=cp.index)
for (sym,val) in cp.items():
upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
timeperiod=25,
nbdevup=2,
nbdevdn=2,
matype=0)
lband[sym] = lowerband[sym]
uband[sym] = upperband[sym]
#-2σに近いときに買い
buy_sig[sym] = lowerband[sym] / cp[sym]
#+2σに近いときに売り
sell_sig[sym] = cp[sym] / upperband[sym]
return {
"upperband:price": uband,
"lowerband:price": lband,
"bb_buy:sig": (buy_sig >= 1.002),
"bb_sell:sig": (sell_sig >= 0.99),
}
# シグナル登録
ctx.regist_signal("TALIB", _TALIB_CALL)
def handle_signals(ctx, date, current):
done_syms = set([])
ratio = current["bb_buy:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0.15, comment="シグナル買(%f)" % val)
pass
ratio = current["bb_sell:sig"]
df = ratio[ratio == 1.0]
for (sym,val) in df.items():
if sym in done_syms:
continue
sec = ctx.getSecurity(sym)
sec.order_target_percent(0, comment="シグナル売(%f)" % val)
pass
pass
Reference
이 문제에 관하여(QuantX에서 브린 테이프를 사용한 시스템 거래), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/investor-gon/items/2373527e140335105def텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)