python - 用于算法交易的 Python 脚本使用
问题描述
寻找用于交易外汇的 Python 程序的建议。基本上我想使用空 sma 和长 sma 交叉来触发买入多头或空头,但只是在它交叉之后而不是在它已经高于做多或低于做空时。第二部分是使用短 sma 穿过中 sma 退出该头寸。我遇到的问题是,当短期和中期 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, 0, 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)
推荐阅读
- javascript - 捕获 Javascript 获取失败,Cloudflare 429 缺少 CORS 标头
- react-native - 您可以使用 setState() 向对象添加属性吗
- javascript - onclick 不适用于动态添加的按钮
- node.js - 为什么在 React 生产构建中未加载 css 说错误的 mime/type
- neural-network - WaveNet 的性能会受到/显然/稀疏信号的训练吗?
- azure - 使用 Windows 身份验证将 Azure 应用服务连接到 Azure SQL 数据库
- xcode - Xcode 分析器抱怨 CFContextRef 存储在“assign”@property 中
- php - 注意:Symfony 中的数组到字符串的转换
- node.js - 错误:(gcloud.run.deploy)解析[服务]时出错。[service] 资源未正确指定。未能找到属性 [服务]
- django - Django:JSONField + 全文搜索 + 索引 -> 序列扫描。如何配置索引工作?