यह मेरे कैंडलस्टिक स्कैनर का कोड है। मेरा उद्देश्य एक साथ कई चर को स्कैन करना है, हालांकि जब मेरा कोड चलता है तो इसका परिणाम केवल एक ही कॉलम में होता है। यदि कोई जानता है कि एक साथ कई टिकर को कैसे स्कैन किया जाता है तो इससे काफी मदद मिलेगी।

import datetime as dt 
import pandas_datareader as web
import pandas as pd

start = dt.datetime(2020,12,31)
end = dt.datetime.now()
Stock = ('ANZ.AX','APT.AX','FMG.AX')

df = web.DataReader(Stock, 'yahoo', start, end)

# Change data to omit volume and adjusted close (can change later to display volume)
data = df[['Open', 'High', 'Low', 'Close']]

for i in range(2, df.shape[0]):
    current = df.iloc[i, :]
    prev = df.iloc[i - 1, :]
    prev_2 = df.iloc[i - 2, :]

    realbody = abs(current['Open'] - current['Close'])
    candle_range = current['High'] - current['Low']

    idx = df.index[i]

    # Bullish engulfing
    df.loc[idx, 'Bullish Engulfing'] = (prev['Open'] > prev['Close']) & (current['Close'] > current['Open']) \
    & (current['High'] > prev['High']) & (current['Low'] < prev['Low'])

df.fillna(False, inplace=True)

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
print(df['Bullish Engulfing'])

परिणामी कोड:

Date
2020-12-30    False
2021-01-03    False
2021-01-05    False
Name: Bullish Engulfing, dtype: bool
1
Mikey_Scali 5 जिंदा 2021, 09:12

1 उत्तर

सबसे बढ़िया उत्तर

मुद्दा यह है कि आपके पास कॉलम पर एक मल्टीइंडेक्स है

import datetime as dt 
import pandas_datareader as web
import pandas as pd

start = dt.datetime(2020,12,31)
end = dt.datetime.now()
Stock = ('ANZ.AX','APT.AX','FMG.AX')

df = web.DataReader(Stock, 'yahoo', start, end)

df.columns

देता है

MultiIndex([('Adj Close', 'ANZ.AX'),
            ('Adj Close', 'APT.AX'),
            ('Adj Close', 'FMG.AX'),
            (    'Close', 'ANZ.AX'),
            (    'Close', 'APT.AX'),
            (    'Close', 'FMG.AX'),
            (     'High', 'ANZ.AX'),
            (     'High', 'APT.AX'),
            (     'High', 'FMG.AX'),
            (      'Low', 'ANZ.AX'),
            (      'Low', 'APT.AX'),
            (      'Low', 'FMG.AX'),
            (     'Open', 'ANZ.AX'),
            (     'Open', 'APT.AX'),
            (     'Open', 'FMG.AX'),
            (   'Volume', 'ANZ.AX'),
            (   'Volume', 'APT.AX'),
            (   'Volume', 'FMG.AX')],
           names=['Attributes', 'Symbols'])

जहां आपके कोड में आप जाते हैं current = df.iloc[i, :] यह आपको वह नहीं दे रहा है जो आप सोचते हैं क्योंकि आपके पास अभी भी एक बहु अनुक्रमणिका है

current = df.iloc[1, :]

उदाहरण के लिए उपज

Attributes  Symbols
Adj Close   ANZ.AX     2.304000e+01
            APT.AX     1.190000e+02
            FMG.AX     2.480000e+01
Close       ANZ.AX     2.304000e+01
            APT.AX     1.190000e+02
            FMG.AX     2.480000e+01
High        ANZ.AX     2.314000e+01
            APT.AX     1.223000e+02
            FMG.AX     2.480000e+01
Low         ANZ.AX     2.276000e+01
            APT.AX     1.190000e+02
            FMG.AX     2.370000e+01
Open        ANZ.AX     2.276000e+01
            APT.AX     1.196800e+02
            FMG.AX     2.371000e+01
Volume      ANZ.AX     3.207879e+06
            APT.AX     9.625380e+05
            FMG.AX     6.402739e+06
Name: 2021-01-03 00:00:00, dtype: float64

इसलिए जब आप वापस df.loc[idx, 'Bullish Engulfing'] लिखते हैं तो यह स्टॉक विशिष्ट नहीं होता है।

आप ग्रुपबी के साथ बेहतर होंगे और स्टॉक द्वारा यह सब स्टॉक करेंगे।

Pandas Multiindex Groupby on Columns आपको दिखाएगा कि यह कैसे करना है।

1
Paul Brennan 5 जिंदा 2021, 13:14
शुक्रिया! यह उत्तर बहुत मददगार था।
 – 
Mikey_Scali
6 जिंदा 2021, 22:18