当前位置:文档之家› 最初的程序化交易策略编写

最初的程序化交易策略编写

最初的程序化交易策略编写
作者:杨清婉
一般人第一眼看到程序交易,总觉得太困难又复杂。

其实,在避免人性干扰时又可以24hr执行监测,彻底执行设定好的策略,在投入真正资金前可以回测自己交易策略的绩效,即是自动化程序交易的目的。

程序交易的基础其实一点都不难,If A happens, then buy. If B happens, then sell.用中文来解释就是:当符合某种情形时,就买进。

当符合某种情形时,就卖出。

所以我们只要去定义A、B,以及更明确地把Buy 、Sell的模式定义出来就好。

这已经几乎快要变成咱们MC 认得的easy language 程序语言了。

难道一定要有工程背景的人才能写出程序吗?其实在交易领域里面所使用的程序语言与英文很像,而且使用的都是很简单的英文。

其实,电脑的执行也是依据K棒的价格变化,K棒上最重要的四个价位显示了价格的变化:Low 最低价,Open 开盘价,High 最高价,Close 收盘价。

语法中Close > 100 (表示收盘价大于100 ),Low < 100 (最低价小于100 ),High > Open (最高价大于开盘价)。

上面是平铺直述的直述句,若是加上一点简单的if ...then ...(假如...发生,就....),就可以变成一个可执行的策略,
举例:(先不考虑marketposition目前手中部位的情形)
if High > Open then buy next bar at market;
//当最高价高于开盘价时,买进1手市价。

if Low < Open then sell next bar at market;
//当最低价低于开盘价时,卖出1手市价。

备注: next bar是指下一根K棒,market是指市价。

再进阶一些可以开始使用一些技术分析的指标来协助。

例如RSI,中文名称是相对强弱指标Relative Strength Index ,是一个0~100 的指标,50以下代表目前偏空,50以上代表目前偏多。

我们来一起写一个简单的策略:
RSI 大于52 买进1口(做多),RSI 小于48 卖出1口(做空or 平仓),(意思是,趋势转向上,我就跟跟看,趋势转向下就快跑),
首先我们得知道什么是变数,望文生义,就像开车时的时速表,就是在程序执行中,会一直变动的数字。

所以我们得先告诉电脑,RSI的定义。

这个动作叫做宣告。

所以在策略一开头,
inputs: Price(close), Len(12);
//input 是未来可以在MC里调整的参数,price(收盘价)以及时间周期Len(在这边是12根K棒),
vars: var1(0);
//vars 告诉系统我们要宣告变数了,定义一下var1 变数(variable) ,告诉电脑我们有这个变数要侦测。

var1=RSI(Price,len);
//定义,var1=RSI 让var1 这个变数等于指标RSI,而且是用上面定义的时间以及价格参数去计算RSI,此例为12根K棒的收盘价。

if marketposition=0 and var1 >52 then begin
buy("buy") next bar at market;
end;
//假如目前没有部位(marketposotion=0) 而且var1(RSI)大于52,就在下一根K棒开始时(next bar),市价(market)买进(buy)。

多单进场!没有写手数就1手。

并在图上标记buy ("buy")。

记得尾巴要写end; 告诉电脑这部分策略的结尾。

marketposotion是指您在市场的部位,
Marketposition=0 没有部位,
Marketposition=1 手上多单,
Marketposition=-1 手上空单。

继续
if marketposition=0 and var1 < 48 then begin
sellshort("sell") next bar at market;
end;
// 空单进场!sellshort 是空单的进场的语法并标记sell 在图上。

if marketposition>0 and var1 <48 then begin
sell("exit_buy") next bar at market;
end;
//假如手上是多单而且RSI小于48,就把手中的多单市价平仓。

if marketposition<0 and var1 > 52 then begin
buytocover("exit_sell") next bar at market;
end;
//假如手上是空单而且RSI大于52,就把手中的空单市价平仓。

MultiCharts RSI 策略完整程序码
inputs: Price(close), Len(12);
vars: var1(0);
var1=RSI(Price,len);
if marketposition=0 and var1 >52 then begin buy("buy") next bar at market;
end;
if marketposition=0=0 and var1 < 48 then begin sellshort("sell") next bar at market;
end;
if marketposition>0 and var1 <48 then begin sell("exit_buy") next bar at market;
end;
if marketposition<0 and var1 > 52 then begin buytocover("exit_sell") next bar at market; end;。

相关主题