Why Python?
Building complex trading systems requires advanced mathematical models, which can be challenging to design using Amibroker alone. However, with the help of Python, it is possible to build intricate mathematical models more efficiently. Python is an open-source language, similar to C and C++, with a wealth of third-party modules available for financial computing and statistical modeling. These modules, such as numPy, sciPy, and pandas, can be utilized to develop complex models with ease. To learn more about these statistical packages, a quick search online will provide further information.
So if we are able to Integrate Amibroker with Python then probably it is like creating a gateway towards accessing complex mathematical models in Amibroker
What is Python COM Server?
COM (Component Object model) is used to enable interprocess communication and dynamic object creation in a large range of programming languages. Using Python COM we can create an interface between Amibroker and Python where Amibroker passes the variable and the complex computation is done with the help of python programming. The Python COM Server communicates with the Amibroker OLE object for interprocess communication as shown below.

Installing Python
1)Download Python 2.7 Version for Windows and Install Python2.7
2)Set the Environmental Variable,Now Goto Start->My Computer ->Right Click and Select Properties->Advance Settings ->Goto Advance Tab and in System Variable enter the Variable Name : PYTHONPATH and variable value <strong>C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk;</strong>
Integrating Amibroker with Python COM Sever
Here I am going to demonstrate the AFL code by Bruce Peterson on Integrating Amibroker with Python using the IIR Filter example. IIR stands for Infinite impulse response (IIR) is a property applying to many linear time-invariant systems most commonly used in digital and electronic filters.
Steps to Follow
1)Copy iir.py Python Code and store it locally to \\python2.7\\bin\\ folder
# iir.py python file
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 a string 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[0:2]
for index in range(2,len(InList)):
OutList.append(coef0*InList[index]+coef1*InList[index-1]+coef2*InList[index-2])
OutList.append(0)
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
####################################
2)And execute the file with the command python iir.py as shown below
3)Copy the Python AFL.afl file and paste the file in \\Amibroker\\Formulas\\Basic Charts Folder
//Python AFL.afl
_SECTION_BEGIN("Candles");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();
_SECTION_BEGIN("IIR");
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",colorGreen,styleLine|styleThick);
_SECTION_END();
_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();
4)Open a New Blank Chart and apply Python AFL.afl to it. You should be able to see IIR(Infinite Impulse Response) and DEMA lines over the Candlesticks where the IIR is computed with the help of Python COM as shown below

do you offer advisory services. i mean buy sell calls. or whom would you recommend
We are not offering any trading recommendations rather than Educational Content and our own observations on markets.
Hi rajendran sir .I am u r big fan. Watching u r live chart for 1 year learnt lot from it. your free live site is not working today 10-04-2014.kindly resolve them sir…
Check now it is rectified.
excellent knowledge and explanation . how can i contact ?
you can write a mail to [email protected]
Hi, thanks for the post.
I am only able to return string or number back to amibroker. Not able to return the list.
Kindly help. Below is my python return function
outlist = 140
return outlist # it works
outlist = [140,141]
return outlist # Amibroker shows error
I am plotting outlist[0] in both cases.
ignore above comment..its solved..thanks anyway.
Does this Python Integration thing Work with AmiBroker 5.6???? Looking for an affirmative reply!!!!!!!!!
Yes it works on all Amibroker Versions
Thnx for your prompted reply, Bro……..
how do i copy that iir.py file into the Python bin folder pls? I can’t see a bin folder. Only Python27/ DLLS, DOX, Include, Lib, libs, scripts, tcl and Tools. Python2.7 is an application without a bin folder… thank you
Create a bin folder inside your Python27 folder. As simple as that.
brilliant – thank you!
Recd error “Import Error : No module named pythoncom”
Solution here http://stackoverflow.com/questions/4145079/importerror-no-module-named-pythoncom
Now an error “No Module named Numpy”
You need to Install the following Python Libraries.
— numpy-MKL-1.8.2.win-amd64-py2.7.exe
— statsmodels-0.7.0-4b55fa4.win-amd64-py2.7.exe
— pandas-0.13.0.win-amd64-py2.7.exe
— patsy-0.2.1-1_py27.exe
— python-dateutil-1.5.win-amd64-py2.7.exe
— scipy-0.14.0.win-amd64-py2.7.exe
Now where do I get it? Would it be available as a single package, or each needs to be downloaded differently?
go thro the tutorial to install the dependencies http://www.marketcalls.in/python/install-quantopian-zipline-windows.html
But not sure why you are getting numpy error. Anyways we are not using numpy in this tutorial.
May I use Anaconda Python Package instead of Python 2.7 for Windows?
I am sorry. I am not familiar with Windows.
In the code:
_reg_clsid_=”{25F32489-9E84-4D9F-8AEB-44DC9B528405}”
Where do I get this id?
Havent tested with Anaconda Python but if it supports com server then possibly you can do that. I had choosen the id as random however you can use the function
_reg_clsid_ = pythoncom.CreateGuid()
so that the system chooses new GUID for you 🙂
Hi Mr Rajendran
Im getting Com/Handle object is null in the AFL at this line SmValue = MyObj.IIR2(Close,Coef0,Coef1,Coef2);
Ensure that the python COM is registered else you will get such errors.
Hi Rajendran,
Even after registering python com server, I am still getting the error
Com/Handle object is null in the AFL at this line SmValue = MyObj.IIR2(Close,Coef0,Coef1,Coef2); Please help.
I am also getting the same error, even after following all the process.
Any update for python 3.8 or 3.9?
One can consider using AmiPy Plugin if you are python 3.8 or 3.9 user https://www.marketcalls.in/amibroker/access-python-functions-using-amibroker-amipy-plugin.html