A. 如何使用Python api 函數寫股票策略
利用context.now可以獲得當前策略運行的時間,返回的是datetime.datetime格式。datetime.datetime格式可以很方便的進行日期、時間操作。
比如timedelta可以很方便的在日期上做日、小時、分鍾、秒的運算。例如,需要策略運行時間1天前的時間,可以這樣寫:context.now+datetime.timedelta(days=-1),返回的便是一天前的時間。
B. 求助引用其它股票數據及板塊函數調用問題
引用任意數據的方法請參考:
1、常規方法不能直接引用。
2、在許多場合下,可以通過計算間接引用,比如在其它股票中,想知道深發展的ma(c,5),可行的公式代碼是:
yyc:="@close";
pyyc:=ma(yyc,5);
3、小結:可以被間接引用的指標,必須是可以由「OPEN、HIGH、LOW、CLOSE、VOL、AMOUNT」計算的指標。其它的不行,比如想引用深發展的流通盤就不行。
4、巧解引用任意個股其它指標A(指不能由OPEN、HIGH、LOW、CLOSE、VOL、AMOUNT」直接計算的指標)方法:
①用一個指標B計算所有個股的指標值,並輸出到一個外部文件。
②設計一個指標C,從外部文件中讀取所需個股的指標A的值,當然在公式代碼中要判斷是否符合條件的個股。
③如果引用時,需要考慮到動態刷新,還需做一個工作,把指標B放入預警條件中,這樣指標B生成的外部文件就會實時更新,指標C引用的數值也是實時更新的。
5、方法4說來簡單,做起來不容易,需藉助於VBS或DLL。此外實時刷新的話,會給系統帶來很大負擔。做成盤後分析的指標比較合適。
6、方法4,適用於個股長周期引用自身的短周期數據的情況,同樣也有實時和盤後的2種調用方式,當然盤後靜態的引用比較適用。
7、第6點所述問題,在飛狐實現了擴展資料庫後,就直接解決了,無需使用外部文件(慢且占空間大)。
C. python 函數被哪個類調用
可以調用,比如下面,common_func被多個函數調用。
class MyClass:
def __init__(self):
pass
def func1(self):
# do something
self.common_func()
def func2(self):
# do something
self.common_func()
def common_func(self):
pass
D. 怎麼用python計算股票
作為一個python新手,在學習中遇到很多問題,要善於運用各種方法。今天,在學習中,碰到了如何通過收盤價計算股票的漲跌幅。
第一種:
讀取數據並建立函數:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import spline
from pylab import *
import pandas as pd
from pandas import Series
a=pd.read_csv('d:///1.csv',sep=',')#文件位置
t=a['close']
def f(t):
s=[]
for i in range(1,len(t)):
if i==1:
continue
else:
s.append((t[i]-t[i-1])/t[i]*100)
print s
plot(s)
plt.show()
f(t)
第二種:
利用pandas裡面的方法:
import pandas as pd
a=pd.read_csv('d:///1.csv')
rets = a['close'].pct_change() * 100
print rets
第三種:
close=a['close']
rets=close/close.shift(1)-1
print rets
總結:python是一種非常好的編程語言,一般而言,我們可以運用構建相關函數來實現自己的思想,但是,眾所周知,python中裡面的有很多科學計算包,裡面有很多方法可以快速解決計算的需要,如上面提到的pandas中的pct_change()。因此在平時的使用中應當學會尋找更好的方法,提高運算速度。
E. 請問股票軟體用哪個函數可以調用概念指數
同花順中有一個功能叫做動態選股,其中搜索相應概念就可以羅列出該概念的股票,然後再把所有股票納入自選裡面,在同花順pc軟體里設置成函數。
F. python怎麼調用另一個函數的值
def change_number0():
global number0
number0 = 1
G. python函數傳參是傳值還是傳引用
python中所有數據都是對象,所以傳參也是傳的對象的引用,這個引用在函數執行前和執行後是不會被改變的,如:
num = 1
def change(num):
print(id(num))
num = 2
print(id(num))
執行change(num)後num的值還是1
可以看到在執行前num的id值(可以理解為內存地址)是某一值
但在執行change後,num的id值改變了,也就是說內部的num指向了另外的對象,而外部的num卻還是指向原來的對象,所以值沒有變;
同理,如:
num_list = [1,2]
def change_list(num_list):
print(id(num_list))
num_list.append(3)
print(id(num_list))
可以看到執行change_list後num_list的id值沒有改變,也就是說num_list是在原來的對象上添加了新的數據,外部的num_list也是指向這一對象,所以外部的num_list數據也添加了新的數據。
H. 已知股票數據,如何用Python繪制k線日對應數據
我沒遇到過 只是自己寫過
有點經驗
先確定時間片
然後再把tick插入就行了
I. python中同一個類的函數怎麼調用另一個函數里的數據
#a()不是return了它么
defc():
dic=a()
#現在列印dic吧
#........
#
#.......
J. Python裡面的函數怎麼按引用傳遞參數
如果你用C給Matlab寫過MEX程序,那麼這個問題是很容易理解的(好像每次討論Python問題時我總是把Matlab搬了出來…… 《在Matlab中把struct當成Python中的Dictionary使用》《Matlab和Python的幾種數據類型的比較》)。
既然提到了MEX,就簡單說一下:
一個Matlab可能形如
function ret=add3(a,b,c)
如果在C的層面實現這個函數,就會看到另一種景象:
void mexFunction(int nlhs,mxArray * plhs[],int nrhs,const mxArray * prhs[])
a,b,c三個參數的地址放在一個指針數組里,然後把這個指針數組的首地址作為參數prhs傳遞給函數,這說明Matlab函數的參數是傳遞指針的,而不是值傳遞。
縱然是傳遞的指針,但是卻不能在函數里改變實參的值,因為標記為「const」了。
Python是開放源碼的,我沒有看。所以下面很多東西是猜的。
Python在函數的參數傳遞時用的什麼手法?實驗一下(使用ActivePython2.5):
首先介紹一個重要的函數:
>>> help(id)
Help on built-in function id in mole __builtin__:
id(...)
id(object) -> integer
Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory address.)
看最後括弧里那句:Hint:it's the object's address.(它是對象的地址)
有了這個函數,下面的事情就方便多了。
>>> a=0
>>> id(a)
3630228
>>> a=1
>>> id(a)
3630216
可以看出,給a賦一次值,a的address就改變了。在C的層面看,(也許真實情況不是下面的樣子,但作為一個類比應該還是可以的):
void * pa;
pa=malloc(sizeof(int));
*(int *)pa=0;
free(pa);
pa=malloc(sizeof(int));
*(int *)pa=1;
Python中每次賦值會改變變數的address,分配新的內存空間,所以Python中對於類型不像C那樣嚴格要求。
下面看看Python函數參數傳遞時到底傳的什麼:
有一個函數:
>>> def changeA(a):
... print id(a)
... a=100
... print id(a)
設定一個變數var1:
>>> var1=10
>>> id(var1)
3630108
>>> changeA(var1)
3630108
3631012
>>> var1
10
調用函數後,從兩次print的結果可以看出,傳遞確實是地址。但是即便如此,在函數內對形參的修改不會對實參造成任何實質的影響,因為對形參的重新賦值,只是改變了形參所指向的內存單元(changeA里兩次調用print id(a)得到不同的結果),卻沒有改變實參的指向。在C的層面看也許類似下面的情節:
void changeA(void * pa)
{
pa=malloc(sizeof(int));
*(int *)pa=100;
free(pa);
}
精通C的你一眼就看出這個函數永遠也改變不了它外面的世界。
也就是說雖然傳遞的是地址,但像changeA這樣的函數改變不了實參的值。
也許會感到困擾?不,我已經在Matlab中習慣了。
一個最典型的例子就是Matlab中刪除結構體成員的rmfield函數(參見《Matlab筆記三則》),
(Matlab版本7.0.1)
如果想刪除結構體patient的name成員,用
rmfield(patient, 'name');
是永遠達不到目的的(就像試圖用雙手抓住自己的領子,把自己提到空中);
迷途知返的做法是:
patient = rmfield(patient, 'name');