1700510725
18.1.9 造市商与点差
1700510726
1700510727
在正式开始分析之前,我们还要补充一个知识点——造市商。造市商(Market Maker)在这里泛指所有为在汇市中交易的人提供报价和交易接口的商人。在具体交易细节上,这些商人彼此之间还有区别,有MM、ECN、STP等多种模式。这些在具体交易的时候再去选择吧,现在我们介绍一下造市商要做哪些事情。
1700510728
1700510729
理论上讲,一个造市商从拥有大交易流量的银行实时拿到报价,并对外提供报价和交易接口。如果忽略银行这个环节,我们能看到什么呢?例如,一个商人向我们报价,当前EUR/USD的价格为ask 1.1260/bid 1.1260,有一个0.0002的差异,这个差异叫作“点差”。点差相当于造市商与交易人进行交易的差价,表示在这一刻将以1.1260的价格购买EUR/USD这个货币对,并以1.1262的价格卖出这个货币对,即在这一刻做多EUR/USD时会以1.1262成交,而做空EUR/USD时会以1.1260成交——与造市商的报价相反。这一点不难理解,就像粮站收粮一样,1元1斤买入,1.1元1斤卖出,赚取差价,绝对不可能是反过来的情况。
1700510730
1700510731
不同的造市商提供的点差是不一样的,而且在不同时刻提供的同一种货币对的点差也是不一样的。在一般情况下,点差都比较低或稳定,而在大行情出现的情况下,点差也会有比较大的波动,有时甚至会有几十个点差的情况。
1700510732
1700510733
点差的存在给造市商的交易提供了利润。当有人交易1手(13)EUR/USD的时候,造市商将在交易人平仓时获得20美元的利润。交易的量越大,造市商所获得的利润就越高。这种利润对交易人来说是一种成本,通常点差越小,对交易人越有利。
1700510734
1700510735
造市商理论上应该把交易人的头寸直接拿到银行去交易,但是由于各方面的原因,他们有时也会自己持有一些和交易人相反的头寸,这种现象就是俗称的造市商与交易人“对赌”。这种造市商会给人非常不安全的感觉,因为交易人赚到的钱就是造市商亏损的钱——如果我们被置于只有自己亏损造市商才会赚钱的境地,后果通常不会太好。在这里我们只讨论这种点差对盈利分析的影响,如果真的想做交易,建议还是选择体量大、监管正规的造市商平台开户。
1700510736
1700510738
18.1.10 科学分析
1700510739
1700510740
1.导入数据
1700510741
1700510742
如果你会使用MT4平台的MQL语言做开发,就可以将MQL作为分析工具。MQL是MT4平台的专用语言工具,对于生成K线图上的各种参考指标,提供了非常多的method。MT4平台使用的自动交易脚本工具EA(Expert Advisor)就是用MQL语言实现的。在这里,我们使用MySQL作为数据载体,使用Python作为分析语言进行数据处理。
1700510743
1700510744
首先,在CentOS平台上安装MySQL和Python,然后挑选一种货币对作为分析对象。从网上可以买到一些1M粒度的外汇交易历史数据,不过数据质量通常一般,中间会有一些丢失的数据点,所以只要在确认缺失比例不太高的情况下就可以使用。
1700510745
1700510746
接着,把数据导入MySQL数据库。以我们研究的EUR/USD数据为例,其格式如图18-10所示。其中,“TICKER”字段为货币对名称,“DTYYYYMMDD”字段为日期,“TIME”字段为时间,“OPEN”字段为开盘价,“HIGH”字段为高点价,“LOW”字段为低点价,“CLOSE”字段为收盘价,“VOL”字段为成交量(在这个文件里没有意义)。
1700510747
1700510748
1700510749
1700510750
1700510751
图18-10 EUR/USD历史数据
1700510752
1700510753
下面我们就编写一段Python代码,将这些输入导入数据库。
1700510754
1700510755
建立数据库。
1700510756
1700510757
mysql> CREATE DATABASE FOREX;
1700510758
1700510759
建立数据表。
1700510760
1700510761
mysql> USE FOREX;mysql> CREATE TABLE EURUSD_1M(DT DATETIME,OPEN DECIMAL(10,4),HIGH DECIMAL(10,4),LOW DECIMAL(10,4),CLOSE DECIMAL(10,4));
1700510762
1700510763
编写Python代码并导入数据,编辑insert.py文件。
1700510764
1700510765
#!/usr/bin/pythonimport os,sys,MySQLdbtry
: db=MySQLdb.connect(host=‘localhost’, user=‘root’, passwd=‘111111’, db=‘FOREX’) cursor=db.cursor() counter=0 input_file=open(‘/ml/EURUSD.txt’,‘r’) cursor.execute(‘USE FOREX;’) for line in input_file
: counter=counter + 1 date=line.split(‘,’)[1] time=line.split(‘,’)[2] open_value=line.split(‘,’)[3] high_value=line.split(‘,’)[4] low_value=line.split(‘,’)[5] close_value=line.split(‘,’)[6] if date !=’<DTYYYYMMDD>’
: datetime=date[0
:4] + ‘-‘ + date[4
:6] + ‘-‘ + date[6
:8] + ‘ ‘ + time[0
:2] + ‘
:’ + time[2
:4] + ‘
:’ + time[4
:6] sql=‘INSERT INTO EURUSD_1M VALUES(‘ + ‘”’ + datetime + ‘”’ + ‘,’ + open_value + ‘,’ + high_value + ‘,’ + low_value + ‘,’ + close_value + ‘);’ cursor.execute(sql) if counter%2000==0
: db.commit() db.commit()except MySQLdb.Error,e
: print “Error %s” %(e.args[0]) exit(1)cursor.close()db.close()
1700510766
1700510767
调用insert.py文件。
1700510768
1700510769
python insert.py
1700510770
1700510771
这个部分需要多花一些时间。在这个文件中有超过544万条数据,建议将MySQL调整到AUTOCOMMIT=0的状态,然后每2000条提交一次。
1700510772
1700510773
wc-l /root/Desktop/EURUSD.txt5447761 /root/Desktop/EURUSD.txt
[
上一页 ]
[ :1.700510724e+09 ]
[
下一页 ]