यह मेरे कैंडलस्टिक स्कैनर का कोड है। मेरा उद्देश्य एक साथ कई चर को स्कैन करना है, हालांकि जब मेरा कोड चलता है तो इसका परिणाम केवल एक ही कॉलम में होता है। यदि कोई जानता है कि एक साथ कई टिकर को कैसे स्कैन किया जाता है तो इससे काफी मदद मिलेगी।
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 उत्तर
मुद्दा यह है कि आपके पास कॉलम पर एक मल्टीइंडेक्स है
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 आपको दिखाएगा कि यह कैसे करना है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।