首页 > 解决方案 > 用于算法交易的 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)

标签: pythonalgorithmic-trading

解决方案


我可以向您展示一个解决方案,该解决方案仅从重复的每一小串买卖中获取第一个买入信号,但我相信您可能会喜欢一个名为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)


推荐阅读