【问题标题】:creating new features with certain percentile of price以一定的价格百分比创建新功能
【发布时间】:2021-01-17 12:38:45
【问题描述】:

我正在研究一个外汇分类问题,需要帮助来创建以下详细功能,我在下面分享了我的代码,并附上了图片以供手头问题的视觉参考。

功能:opensimilarclose (如果开盘 = 收盘正负 2 点,则为 1,否则为 0)

特点:opencloselow (如果开盘和收盘都大于蜡烛大小的 90%,则为 1,否则为 0)

功能:openclosehigh (如果开盘和收盘均小于蜡烛大小的 10%,则为 1,否则为 0)

我的代码:

data['opensimilarclose'] = np.where(data.Open-data.Close<=0.02, 1,0)

data['openclosehigh'] = np.where((abs(data.Close-data.Low)>=abs(data.High-data.Low)*0.9 and ()), 1, 0)

data['opencloselow'] = np.where(abs(data.Close-data.Low)<=abs(data.High-data.Low)*0.1, 1, 0)

请在下面找到数据样本:

Date    Timestamp   Open    High    Low Close   Volume
2004-01-01  00:00:00    414.92199999999997  414.92199999999997  414.23199999999997  414.55800000000005  0.738269000896253
2004-01-02  00:00:00    414.32199999999995  416.098 413.86699999999996  415.395 3.82642700810902
2004-01-04  00:00:00    414.278 414.69800000000004  414.096 414.444 0.0564850000591832
2004-01-05  00:00:00    415.376 423.981 414.23400000000004  421.89300000000003  10.4188560213806
2004-01-06  00:00:00    422.332 430.17800000000005  420.07800000000003  421.777 11.182643023759699
2004-01-07  00:00:00    420.773 424.121 418.974 419.626 11.956311026187901
2004-01-08  00:00:00    419.574 424.798 416.27  423.298 12.439296027514501
2004-01-09  00:00:00    423.298 426.897 419.42699999999996  425.404 9.2499640192309
2004-01-11  00:00:00    426.49800000000005  426.49800000000005  425.876 426.23  0.0673800002332428
2004-01-12  00:00:00    425.853 428.459 422.219 424.598 10.6995250192995
2004-01-13  00:00:00    424.598 426.395 421.651 423.69800000000004  11.1990780260712
2004-01-14  00:00:00    423.389 424.397 416.78  419.298 10.835633025399101
2004-01-15  00:00:00    418.98  421.098 406.906 408.44699999999995  12.266192030985598
2004-01-16  00:00:00    408.546 410.398 404.43300000000005  406.298 9.26100601695725
2004-01-18  00:00:00    405.842 406.098 405.543 405.75300000000004  0.0658050001220545
2004-01-19  00:00:00    407.18800000000005  408.68300000000005  405.402 406.751 5.688531011830491
2004-01-20  00:00:00    406.449 412.69699999999995  404.417 411.921 10.6885030245794
2004-01-21  00:00:00    411.99800000000005  412.91  406.721 409.832 10.672994028404
2004-01-22  00:00:00    410.043 412.69800000000004  407.216 409.033 9.949593026152801
2004-01-23  00:00:00    409.398 412.29699999999997  405.461 407.398 8.921345019130971

【问题讨论】:

  • 你能解释一下“蜡烛”和“点子”是什么吗? 10% / 90% 什么?所有打开/关闭/低/高值?只有相关的列?
  • 问题是??
  • @AlbertoCastillo 在计算上述 3 列时需要帮助
  • @Roim 2pips 在这种情况下是 0.02 或价格价值百分比处于高低范围

标签: python pandas classification feature-engineering forex


【解决方案1】:

更好地投资 您可以使用以下代码可视化蜡烛...您可以看到红色和绿色蜡烛...蜡烛的颜色由之前的收盘价决定...但是这里我没有使用之前的收盘价...

import matplotlib.pyplot as plt
import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df.index,
            open=df['Open'],
            high=df['High'],
            low=df['Low'],
            close=df['Close'])],
            layout={'height':500,'width':1000})
fig.update_layout(xaxis_rangeslider_visible=False)

fig.show()

这是行业标准。我了解您采取先前的关闭并计算其他功能....

【讨论】:

    【解决方案2】:

    您的代码中有一些小错误:

    1. 您只检查 Open-Close 是否小于 0.02,而忘记检查绝对值(如果 open=5 和 close=8 并且仍然小于 0.02)
    2. “openclosehigh”和“opencloselow”在您的代码中与您所说的不同。仅考虑收盘价。

    我个人更喜欢直接使用 pandas 而不是 where,因为它不需要 - 你有一个简单的条件。

    检查以下示例:

    import pandas as pd
    
    df = pd.DataFrame({"Open": [4, 3.6, 7, 6], "Close": [4.1, 3.5, 6.7, 6.8], "High": [4.12, 3.6, 7.02, 6.8], "Low":[4, 3.498, 6.7, 5.7]})
    df["opensimilarclose"] = (abs(df["Open"] - df["Close"]) <= 0.02).astype(int)
    df["relative_open"] = (df["Open"] - df["Low"]) / (df["High"] - df["Low"]) 
    df["relative_close"] = (df["Close"] - df["Low"]) / (df["High"] - df["Low"]) 
    
    df["openclosehigh"] = ((df["relative_open"] > 0.9) & (df["relative_close"] > 0.9)).astype(int)
    df["opencloselow"] = ((df["relative_open"] < 0.1) & (df["relative_close"] < 0.1)).astype(int)
    

    第 3 行通过直接询问 open 和 close 之间的绝对差值是否小于 0.02 来计算 opensimiliarclose。这是一个条件,所以结果是真/假。要更改为 1/0,我添加了 .astype(int)。在我看来,这种直接在所有列上应用条件的格式比使用where 更方便。

    然后对于您的第二列和第三列,我认为先计算百分比然后检查条件更方便。 “relative_open”和“relative_close”列包含打开/关闭的百分比,并且仅在接下来的两行中,我同时填写“opencloselow”和“openclosehigh”。您可以通过droploc 在所有其他列上删除额外的列。您也可以将结果作为临时系列而不是额外的列 (tmp_series = (df["Close"]...)。

    【讨论】:

    • 谢谢@Roim,稍作修正,我们不得不将代码交换为 openclosehigh 和 opencloselow。非常感谢您的见解。
    • 我更正了它,但请注意这是你一开始要求的...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2016-03-14
    • 2018-02-02
    • 2013-03-16
    • 2016-05-09
    • 2021-10-14
    相关资源
    最近更新 更多