Heiken Ashi با استفاده از پایتون پاندا

ساخت وبلاگ

enter image description here

من یک تابع Heiken Ashi را تعریف می کردم که یکی از انواع نمودار محبوب در تجزیه و تحلیل فنی است. من در حال نوشتن یک تابع روی آن با استفاده از پاندا بودم اما مشکل کمی پیدا کردم. هایکن اشی [HA] اینگونه به نظر می رسد-

 محاسبات شمع Heikin-Ashi HA_Close = (Open + High + Low + Close) / 4 HA_Open = (قبلی HA_Open + قبلی HA_Close) / 2 HA_Low = حداقل Low، HA_Open، و HA_Close HA_High = حداکثر از High، HA_Close، و HA_Close-محاسبات Ashi در اجرای اول HA_Close = (باز + زیاد + کم + بستن) / 4 HA_Open = (باز + بستن) / 2 HA_Low = کم HA_High = زیاد 

چیزهای زیادی در وب سایت های مختلف وجود دارد که از حلقه و پایتون خالص استفاده می کنند، اما فکر می کنم پانداها نیز می توانند به خوبی کار کنند. این پیشرفت من است -

 def HA(df): df['HA_Close']=(df['Open']+ df['High']+ df['Low']+ df['Close'])/4 ha_o=df['Open']+df['Close'] #ایجاد یک متغیر #(برای ردیف 1) HA_O=df['HA_Open']. shift(1)+df['HA_Close']. shift(1) #متغیر دیگری #(برایردیف های بعدی) df['HA_Open']=[ha_o/2 if df['HA_Open']='nan' else HA_O/2] #(خطا قسمت کجا دارم اشتباه می کنم؟) df['HA_High']=df[['HA_Open','HA_Close','High']]. max(axis=1) df['HA_Low']=df[['HA_Open','HA_Close','Low']]. min(axis=1) retu df 

آیا کسی می تواند در این مورد به من کمک کند لطفا؟من روی این امتحان کردم -

 وارد کردن pandas_datareader. data به عنوان واردات وب HA واردات پانداها به عنوان pd start='2016-1-1' end='2016-10-30' DAX=web. DataReader('^GDAXI','yahoo', start, end) 

این کد جدیدی است که من نوشتم

 def HA(df): df['HA_Close']=(df['Open']+ df['High']+ df['Low']+df['Close'])/4 . ha_o=df['Open']+df['Close']. df['HA_Open']=0. 0. HA_O=df['HA_Open']. shift(1)+df['HA_Close']. shift(1). df['HA_Open']= np. where( df['HA_Open']==np. nan، ha_o/2، HA_O/2). df['HA_High']=df[['HA_Open','HA_Close','High']]. max(axis=1) . df['HA_Low']=df[['HA_Open','HA_Close','Low']]. min(axis=1) . بازگشت df 

اما باز هم نتیجه HA_Open رضایت بخش نبود دنبال کردن 14. 4k 20 20 نشان طلا 71 71 نشان نقره 135 135 نشان برنز پرسیده شده نوامبر 15, 2016 در 15:19 حواس پرت تاکی حواس پرت تاکی 321 1 1 نشان طلا 3 3 نشان نقره 6 6 نشان برنز آیا کار می کند؟اگر نه، مشکل چیست؟لطفا یک دیتافریم نمونه نیز ارائه دهید. نوامبر 15, 2016 در 19:11

این کار نمی کند. من این را امتحان کردم- import pandas_datareader. data را به عنوان واردات وب HA پانداهای وارداتی را به صورت pd start='2016-1-1' end='2016-10-30' DAX=web. DataReader('^GDAXI','yahoo', شروع، پایان)

نوامبر 15, 2016 در 19:43

این خط را برای شما امتحان کنید که به شما خطا می دهد: df['HA_Open']= np. where( df['HA_Open']==np. nan, ha_o/2, HA_O/2 ) , اما فکر می کنم شما نیز موفق نشدیدdf['HA_Open'] را تعریف کنید؟

نوامبر 15, 2016 در 20:28 همچنین اگر قبلا این کار را نکرده اید، numpy را به عنوان np وارد کنید نوامبر 15, 2016 در 20:29

نه شانسی نیستمن df['HA_Open'] =0. 0 را درست قبل از خطی که شما پیشنهاد کردید مقداردهی اولیه کردم، اما همچنان خطا دریافت می کنم-Error Key: 'HA_Open'

نوامبر 15, 2016 در 21:34

12 پاسخ 12

مرتب شده بر اساس: بازنشانی به پیش فرض

در اینجا سریع ترین، دقیق ترین و کارآمدترین پیاده سازی طبق آزمایش های من است:

def HA(df): df['HA_Close']=(df['Open']+ df['High']+ df['Low']+df['Close'])/4 idx = df. index. نام df. reset_index(inplace=True) برای i در محدوده(0, len(df)): اگر i == 0: df. set_value(i، 'HA_Open', ((df. get_value(i، 'Open')+ df. get_value(i، 'Close')) / 2)) else: df. set_value(i، 'HA_Open', ((df. get_value(i - 1, 'HA_Open') + df. get_value(i - 1, 'HA_Close')) / 2)) if idx: df. set_index(idx, inplace=True) df['HA_High']=df[['HA_Open','HA_Close','High']]. max(axis=1) df['HA_Low']=df[['HA_Open','HA_Close','Low']]. min(axis=1) retu df 

در اینجا الگوریتم تست من است (در اصل من از الگوریتم ارائه شده در این پست برای محک زدن نتایج سرعت استفاده کردم):

import quandl زمان واردات df = quandl. get("NSE/NIFTY_50", start_date='1997-01-01') def test_HA(): print('HA Test') start = time. time() HA(df) end= time. time() print('زمان گرفته شده توسط مجموعه و دریافت توابع مقدار برای HA<>'. format(end-start)) start = time. time() df['HA_Close_t']=(df['Open']+ df['High']+ df['Low']+df['Close'])/4 از مجموعه ها import namedtuple nt = namedtuple('nt', ['Open','Close']) previous_row = nt(df. ix[0,'Open'], df. ix[0,'Close']) i = 0 برای ردیف در df. itertuples(): ha_open = (row_previous. Open + previous_row. Close) / 2 df. ix[i,'HA_Open_t'] = ha_open previous_row = nt(ha_open, row. Close) i+= 1 df['HA_High_t']=df[['HA_Open_t','HA_Close_t','High']]. max(axis=1) df['HA_Low_t']=df[['HA_Open_t','HA_Close_t','Low']]. min(axis=1) end = time. time() print('زمان گرفته شده توسط توابع ix (iloc، loc) برای HA<>'. format(پایان-شروع)) 

در اینجا خروجی من در پردازنده i7 است (لطفاً توجه داشته باشید که نتایج ممکن است بسته به سرعت پردازنده شما متفاوت باشد، اما من فرض می کنم که نتایج مشابه خواهند بود):

زمان تست HA توسط توابع مجموعه و دریافت مقدار برای HA 0. 05005788803100586 زمان گرفته شده توسط توابع ix (iloc، loc) برای HA 0. 9360761642456055 

تجربه من با پانداها نشان می دهد که توابعی مانند ix، loc، iloc در مقایسه با توابع set_value و get_value کندتر هستند. علاوه بر این، محاسبه مقدار یک ستون روی خودش با استفاده از تابع shift نتایج اشتباهی را به همراه دارد.

خبرهای فارکس...
ما را در سایت خبرهای فارکس دنبال می کنید

برچسب : نویسنده : شهره لرستانی بازدید : 32 تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 11:37