如何解决用于算法交易的 Python 脚本
寻找有关用于外汇交易的 Python 程序的建议。基本上我想使用空头 sma 和多头 sma 交叉来触发买入多头或空头,但只有在它交叉之后,而不是在它已经高于做多或低于做空时。第二部分是利用短线穿越中线退出仓位。我遇到的问题是,当短线和中线高于或低于长线时,它们会不断触发买入和卖出。我不想使用 sma 短线和中线交叉进行任何交易,只是为了退出头寸,我之前在短线/多头 sma 交叉线上输入过。
这个脚本似乎越来越接近我正在寻找的内容。当它们交叉的确切时间时,它具有短/长信号。它没有 sma 短线和中线交叉来退出头寸,也没有故障保护,因此当它们交叉时不会触发任何买入或卖出进入交易。在我进入长/短 sma 交叉后,我只希望短/中交叉退出交易。
df['position'] = df['SMA_15'] > df['SMA_45']
df['pre_position'] = df['position'].shift(1)
df.dropna(inplace=True) # dropping the NaN values
df['crossover'] = np.where(df['position'] == df['pre_position'],False,True)
解决方法
我可以向您展示一个解决方案,该解决方案仅从重复的每一小串买卖中获取第一个买入信号,但我相信您可能会喜欢一个名为 tulipy 的库。这使您可以轻松制作技术指标(有关更多功能,请参阅文档 https://tulipindicators.org/)。如果您想要其他解决方案,请随时发表评论,我会在此处添加。
pip install tulipy
安装库
利用交叉功能。我们还必须在此处保持列表的长度相同。
import pandas as pd
import numpy as np
import tulipy
def makeListsSameLength(someList,matchThisLengthList):
#make someList the same length as matchThisLengthList by adding None's to the front
for i in range(abs(len(matchThisLengthList) - len(someList))):
someList = np.insert(someList,None,axis=0) #Push a None to the front of the list
return someList
df['SMA_15'] = makeListsSameLength(tulipy.sma(df['close'].values,15),df)
df['SMA_45'] = makeListsSameLength(tulipy.sma(df['close'].values,45),df)
df['crossover'] = makeListsSameLength(tulipy.crossover(df['SMA_15'].values,df['SMA_45'].values),df)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。