集成Amibroker與Python COM創建複雜的交易系統
本帖最後由 IBM2012 於 14-4-6 16:39 編輯創建複雜的交易系統,我們需要有一個複雜的數學模型但amibroker設計高度複雜的數學模型也不是那麼容易。但是我們仍然可以Python幫助建立複雜的數學模型。Python是類似C,C + +的語言,它具有第三方模塊對金融電腦相連,並實施統計模型。一些第三方模塊NumPy,SciPy使用來構建複雜的模型。
所以,如果我們能夠整合Amibroker與Python那麼很可能它就像創建一個對Amibroker複雜的數學模型。
COM 用於使能在大範圍的編程語言的進程間通信和動態對象創建。使用Python的COM,我們可以創造一個Amibroker傳遞變量和複雜 的計算,用Python編程的幫助下完成Amibroker和Python之間的接口。與Amibroker OLE對象進行進程間通信,如下圖所示Python的COM服務器通信。
http://1-ps.googleusercontent.com/h/www.marketcalls.in/wp-content/uploads/2014/04/Python-Com-Server1.png.pagespeed.ce.yAIAFjYrd9.png
安裝Python1)下載和安裝Python2.72)設置環境變量,現在轉到開始 - > 我的電腦 - >右鍵單擊並選擇屬性 - > 高級設置 - >轉到高級選項,並在系統變量輸入變量名:PYTHONPATH和變量值C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk;http://1-ps.googleusercontent.com/h/www.marketcalls.in/wp-content/uploads/2014/04/Python-Environmental-Settings1.png.pagespeed.ce.PKGFuHR4dI.png
在這裡,由AFL的代碼上集成Amibroker與Python使用IIR濾波器的例子。無限脈衝響應(IIR)是應用在電子濾波器最常用的多線性時不變系統。要執行的步驟1)下載Python-AFL設置並將其解壓縮2)複製文件iir.py到\ \ python2.7 \ \ BIN \\ folder中。並用命令執行該文件的python iir.py如下圖所示3)複製的Python AFL.afl文件,粘貼文件在\\Amibroker\\Formulas\\Basic Charts Folder4)打開一個新的空白圖表和應用的Python AFL。你應該可以看到IIR(無限脈衝響應)和DEMA線,其中IIR被計算與Python的COM,如下圖所示http://1-ps.googleusercontent.com/h/www.marketcalls.in/wp-content/uploads/2014/04/676x343xPython-Com-File-Execution.png.pagespeed.ic.yby4HBO8_N.png
http://1-ps.googleusercontent.com/h/www.marketcalls.in/wp-content/uploads/2014/04/1304x578xNifty-IIR2.png.pagespeed.ic.STWroY8eHw.png
import pythoncom
from win32com.server.exception import COMException
import win32com.server.util
import win32com.client.dynamic
import win32gui
import random
class PythonUtilities(object):
_public_methods_=['IIR2']
#
# Use pythoncom.CreateGuid() 2/1/08
#
_reg_clsid_="{25F32489-9E84-4D9F-8AEB-44DC9B528405}"
_reg_desc_ = "Utilities for Extending Amibroker AFL"
_reg_progid_ = "PyAFL"
_readonly_attrs_ = ['revision']
# class attributes can be defined and used to transfer values from AFL
_public_attrs_=['NDepVar','ArrayLen','ProbArray',
'X_Open','X_High','X_Low','X_Close',
'X_Volume','X_OI','Log']
Log=""# Log may be astring use to pass text to AFL
def IIR2(self,InList,coef0,coef1,coef2):
# example infinite impulse response filter from Amibroker docs
#
self.revision="version 1"
OutList=[]
##
## print type(InList),type(coef0)
## print coef0,coef1,coef2
##
InList=list(InList)
if len(InList)==0:
return OutList
OutList=InList
for index in range(2,len(InList)):
OutList.append(coef0*InList+coef1*InList+coef2*InList)
if OutList is None:
return
else:
return OutList
if __name__=='__main__':
print "Registering COM Server "
import win32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)
# uncomment out if you want to unregister com server
## from win32com.server.register import UnregisterServer
## UnregisterServer(PythonUtilities._reg_clsid_)
## print "Com server unregistered."
#############################################End Python Code
####################################
//----------------------------------------------------------------------------------------Start
AFL Code
--------------------------------------------------------------------------
MyObj=CreateObject("PyAFL");// link to python com server
Coef0=Param("Coef0",0.2,-5,5);
Coef1=Param("Ceof1",1.2,-5,5);
Coef2=Param("Coef2",-0.4,-5);
// COM object interface cannot deal with null value, set to zero to be sure
Close=Nz(Close);
// use IIR2 method in com server to calculate smoothed value
SmValue = MyObj.IIR2(Close,Coef0,Coef1,Coef2);
Plot(C,"Close",Color=colorBlue,style=styleLine);
Plot(SmValue,"IIR2 smooth",Color=colorDarkRed,style=styleLine);
_SECTION_BEGIN("DEMA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 200, 1, 10 );
Plot( DEMA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ),
ParamStyle("Style") );
_SECTION_END();
本帖最後由 heavenweaver 於 14-4-8 13:07 編輯
Python-AFL code
本帖最後由 joshsmi 於 14-4-8 21:01 編輯
@IBM2012, that code you have posted is not your one! FYI, it is from the AmiBroker User Library provided by Bruce Peterson. BTW this "... 但amibroker設計高度複雜的數學模型也不是那麼容易。" is rather nonsense. 如果複雜的數學能夠賺錢那數學家不就都是億萬富翁? 真是強阿~~~~
{:4_113:} 以python的速度... 不要把AB的速度搞慢了喲
頁:
[1]