程序化交易指标编写完美教程
- 格式:ppt
- 大小:2.90 MB
- 文档页数:4
「100」百篇教程收官篇,关于程序化交易指标的编写前言:大家好!我是股市帅锅。
本篇是100篇免费图文教程的收官之篇,从我们学习第一篇教程开始,我们心里总有个愿望,以后要是能够实现程序化自动交易就好了。
这不仅仅是大家的愿望,也是我自己的愿望,我仍然在这条道路上不断地摸索,希望有一天能够建立比较可行的程序化交易方案。
梦想总要有的,说不定哪天真实现了呢?学习内容:在通达信软件中,功能-公式系统-程序交易评测系统,这个系统是用来做什么的?就是用来评测交易体系的胜率的。
交易体系,则包含了买入规则,卖出规则,仓位资金管理,交易方式等,在设置了各个规则之后,就可以对交易体系的胜率进行评测。
虽然通达信的程序交易评测系统有些鸡肋,但基本功能还是具备的,如果大家有兴趣,也可以自己做一些尝试。
在程序化交易系统的建立过程中,买卖点的设定,和普通的指标公式有所区别,也是之前的教程中,我们没有涉及到的,所以在第100篇教程里,做些简介,因为水平有限,我就不演示了,免得演砸。
今天我们就来解释下程序交易指标的编写方法。
编程和测试:程序交易指标,需要设定买入条件,卖出条件,条件满足时,触发买入交易和触发卖出交易,同时买入和卖出交易交替进行,当然这是最简单的程序交易,复杂的情况,可能有多次的买入,也有可能多次的卖出。
我把系统自带的一个举例程序交易指标MACD交易指标的代码复制过来:------------DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);平空开多:=CROSS(MACD,0);平多开空:=CROSS(0,MACD);BUYSHORT_BUY(平空开多,LOW);SELL_SELLSHORT(平多开空,HIGH);AUTOFILTER;------------在上面的代码中,可以分为三组,第一组是MACD指标各个赋值,共3句代码,我们都很熟悉。
程序化交易运作流程一、模型设计开发利用期货行情系统绘出两个品种的历史价差图,选取历史价差图有一定规律的两个品种进行初步分析。
对于初步分析后的套利品种进行理论分析,从两个品种的价格变动影响因素进行分析,若影响品种价格变动的宏观经济因素、原材料及下游需求等因素有相似,则进一步进行数据分析。
将通过理论分析的套利池中套利品种进行数据分析。
主要利用统计软件,分析各品种与其变动因素的相互关联性,计算相关系数;分析两个相关品种基差变化与其变动因素的相关系数及波动系数,确定基差的波动空间及均衡点。
二、客户分类及资金准备新财富客户按相关评分标准进行分类,风险偏好由高到低进行排位。
以此确定各交易类型及总持仓动用资金比例。
见下图:三、程序化交易流程1、每日交易前ⅰ)每日开盘前,开会交流宏观经济新闻、各套利品种前一日现货市场情况及各套利品种上下游供需变动情况,分析对品种行情走势的影响,结合前一日套利行情,初步判断当日套利主力区间。
ⅱ)由风控专员根据保证金账户的实际情况通报各财富客户可建仓量及止损止盈点,投资亏损达到总资金的10%时则止损,但对于弹性较高、波动较大的投资品种,止损点可适当放开,确保风险保持可控状态以进行正常运转及资金划拨;ⅲ)填写《程序化交易日报》。
2、每日交易进行中开盘后观测套利走势,初步确定当日套利主力区间,经确认后确定程序化交易主力区间。
确认方法可分为时间确认、频率确认及概率确认,若为概率确认,则在胜算在80%以上的情况下入场。
将主力区间输入程序化交易模型中运行;对套利交易进行监控,出现风险时按相关规定计划进行操作;1)程序运行风险ⅰ)建仓时,若套利交易出现单边成交,计算机系统报错,并自动停止,但系统报错前挂单不撤,人工选择是否撤单;ⅱ)撤单后,若已成交的单边持仓处于盈利状态则进行平仓,若处于亏损状态,且以未成交的品种现价计算,基差亏损不超过预设盈利点时,将未成交品种建仓;若基差亏损超过预设盈利点,仍将已成交的单边持仓清仓;ⅲ)平仓时,若套利交易出现单边成交,计算机系统自动将未成交品种以现价成交,成交后报错提醒。
文华程序交易编程指南在15分钟图内,突破开盘后15分钟高低点的交易系统HH:=VALUEWHEN(TIME=0900,HIGH);//每天第一根15分钟K 线的高点LL:=VALUEWHEN(TIME=0900,LOW); //每天第一根15分钟K线的低点CROSS(CLOSE,HH),BK; //只要价格上穿15分钟的高点,买进开仓;CROSS(LL,CLOSE),SK; //只要价格下穿15分钟的低点,卖出开仓;CROSS(CLOSE,HH)||CROSS(TIME,1444),BP; //只要价格上穿15分钟的高点,买入平仓;或时间在14:44之后平仓CROSS(LL,CLOSE)||CROSS(TIME,1444),SP; //只要价格下穿15分钟的低点,卖出平仓;或时间在14:44之后平仓在3分钟图内,突破开盘后15分钟的高低点的交易系统首先先建立一个指标就是HL.fml,然后用引用的方法#IMPORT[,MIN15,HL] AS VARHLHH1:=VARHL.HH;LL1:=VARHL.LL;CROSS(CLOSE,HH1),BK;CROSS(LL1,CLOSE),SK;CROSS(CLOSE,HH1)||CROSS(TIME,1456),BP;CROSS(LL1,CLOSE)||CROSS(TIME,1456),SP;一天只交易一次的编写方法NN:=BARSLAST(DATE<>REF(DATE,1))+1;买入开仓条件&&REF(EXIST(BB,NN),1)<1,BK;BS,SP;卖出开仓条件&&REF(EXIST(BB,NN)<1,1),SK;SS,BP;开盘交易,收盘退出DATE<>REF(DATE,1),BK;TIME>=1455,SP;周间日模型(固定金额止损)NN:=BARSLAST(DATE<>REF(DATE,1))+1;#IMPORT[,MIN15,HL] AS VARHLHH1:=VARHL.HH;LL1:=VARHL.LL;COB:=(WEEKDAY=1);CS:=(WEEKDAY=2||WEEKDAY=4);COB&&REF(EXIST(COB,NN),1)<1&&DATE<>REF(DATE,1),BK;CS&&REF(EXIST(CS,NN),1)<1&&DATE<>REF(DATE,1),SK;CROSS(TIME,1456)||CROSS(CLOSE,VALUEWHEN(TIME=0900, OPEN)+22),BP; CROSS(VALUEWHEN(TIME=0900,OPEN)-22,CLOSE)||CROSS(TIME,1456),SP;低点判断的程序编写方法RIBAO1:=(REF(LOW,1)>REF(LOW,2)&&REF(HIGH,1)REF(LO W,1)&&HIGH<ref(high,1));< bdsfid="99" p=""></ref(high,1));<> 前一个K线低点高于前两个K线低点,同时前一个K线高点低于前两个K线高点(前一根K线被前第二个K线所包含)WAIBAO1:=(REF(LOW,1)<ref(low,2)&&ref(high,1)bdsfid="102">REF(HIGH,2))||(LOWREF(HIGH,1)); 前第二根K线被前第一个K线所包含;</ref(low,2)&&ref(high,1)>LL:VALUEWHEN(NOT(WAIBAO1)&&NOT(RIBAO1)&&LOW> REF(LOW,1)&&REF(LOW,2)>RE F(LOW,1),REF(LOW,1));既非内孕线,也非外孕线,同时已经出现低点拐点,作为最近低点高点判断的程序编写方法RIBAO2:=(REF(LOW,1)>REF(LOW,2)&&REF(HIGH,1)REF(LO W,1)&&HIGH<ref(high,1));< bdsfid="109" p=""></ref(high,1));<> 前一根K线被前第二个K线所包含)WAIBAO2:=(REF(LOW,1)<ref(low,2)&&ref(high,1)bdsfid="112">REF(HIGH,2))||(LOWREF(HIGH,1)); 前第二根K线被前第一个K线所包含;</ref(low,2)&&ref(high,1)>HH:VALUEWHEN(NOT(WAIBAO2)&&NOT(RIBAO2)&&H<ref (h,1)&&ref(h,2)<="" bdsfid="115" p=""></ref(h,1)&&ref(h,2) 既非内孕线,也非外孕线,同时已经出现高点拐点,作为最近高点利润回撤的处理1)系统发出平仓信号是需要平仓条件,没有条件系统无法发信号,2)获利回吐可以使用止赢止损编写,例如:当最高价与开仓收盘价盈利达到20—50点,回撤70%平仓。
程序化交易高级教程注意:本教程适用于Winning Intelligence Wh8目录第一章如何编写复杂模型 (1)1.1如何编写IF ElSE控件.................................................................................................1 1.2如何编写循环计算....................................................................................................2 1.3如何使用停止指令....................................................................................................7第2章如何编译基本编程模型 (11)2.1、在下列情况2.2,............................................................................................................29 2.3,经济数据,紧急情况....................................................................................第三章如何优化你的交易策略. (40)3.1盘整功能,减少盘整市场交易数量..........................................................40 3.2检查信号功能,..........................................................46 3.3实现了具有更优惠进入价格的ULTSIG功能。
条件选股编程教程真正实现股票程序化交易精编Document number:WTT-LKK-GBB-08921-EIGG-22986大智慧公式编写教程大智慧公式编写教程第一节公式入门我们大多数的用户并不是完全了解“公式编辑器”的意义,简单地,我们可以从以下几个角度进行理解:一、指标分析:“公式编辑器”好比是一个工作母床,通过这个工作母床可以制造出所需要的各式各样的零件,同样,在指标分析的工作中,利用编辑器可以编写出相应的分析条件,这种方法是在技术分析当中最为常用的方法之一。
例如,指标KD、指标MA等等,通过对这些指标的观察、分析,找出一些合适的条件作为买入卖出点。
当然,我们也许需要的是一些自己的指标,一些自己的准确的指标,更多的MB、MC、MD等等,这一切我们通过“公式编辑器”可以实现。
二、条件选股:编写公式都要用到什么东西我们留下了许多问题--都是公式编写的基础问题,所以我们这节课来解决这些基础的问题。
什么是技术指标MA均线就是一种技术指标,我们在炒股的时候,经常会将一些行情数据进行数学计算得出一些曲线等等,方便我们掌握股市的变动情况。
什么是条件选股简单讲,就是按照您的设定的条件用电脑帮助您完成一些太多太复杂的挑选--比如您有一些好的心得和方法,可使有1000多只股票,您就是有100双眼睛有时也不一定可以看得过来,这时电脑就派上用场了!什么是参数比如讲:10日均线,您可以把10日当作参数,好处在于,您觉得需要修改成5日的时候,就可以使用一些简单的方法,例如参数精灵来很方便的修改和调整。
参数需要名字,例如M就不错。
还要规定参数的范围,例如1日至260日。
这样我们就可以在1到260之间任意调节M的值了,M 最常用的数填在“缺省”一栏,例如你最喜欢用10日均线,那就填10吧。
什么是周期这么解释吧!我们有的投资者喜欢使用日线图作技术分析;有的喜欢用5分钟的K线;有的喜欢使用长一点时间的,例如周线。
所以在公式设计中,允许不同喜好的使用者选择不同的分析时间--就是可以选择不同的周期。
1、趋势转变如何表示?以均线拐头为例:MA10:=MA(CLOSE,10);//定义10周期均线MA10>REF(MA10,1)&&REF(MA10,1)>REF(MA10,2)&&REF(MA10,3)>REF(MA10,2)&&REF(MA10,4)> REF(MA10,3);//上拐MA10<REF(MA10,1)&&REF(MA10,1)<REF(MA10,2)&&REF(MA10,3)<REF(MA10,2)&&REF(MA10,4)< REF(MA10,3);//下拐2、交*(金*/死*)如何表示?以均线交*为例:MA5:=MA(CLOSE,5);//5个周期收盘价的简单移动平均MA10:=MA(CLOSE,10);//10个周期收盘价的简单移动平均MA20:=MA(CLOSE,20);//20个周期收盘价的简单移动平均CROSS(MA10,MA20),BK;//当MA10上穿MA20,发出买入开仓交易指令CROSS(MA10,MA5),SP;//当MA10上穿MA5,发出卖出平仓交易指令CROSS(MA20,MA10),SK;//当MA20上穿MA10,发出卖出开仓交易指令CROSS(MA5,MA10),BP;//当MA5上穿MA10,发出买入平仓交易指令3、价差如何表示?以最新价和均线价差为例:MA5:=MA(CLOSE,5);//5个周期收盘价的简单移动平均MA10:=MA(CLOSE,10);//10个周期收盘价的简单移动平均CROSS(MA10,MA5)||(CLOSE-MA5)>8,SK;//MA10上穿MA5或收盘价与MA5的差值大于8,发出卖出开仓交易指令(MA5-CLOSE)>6,BP;//MA5与收盘价的差值大于6,发出买入平仓交易指令CROSS(MA5,MA10)||(MA5-CLOSE)>8,BK;//MA5上穿MA10或收盘价与MA5的差值大于8,发出买入开仓交易指令(CLOSE-MA5)>6,SP;//收盘价与MA5的差值大于6,发出卖出平仓交易指令4、如何在模型中限制开平仓时间?MA5:=MA(CLOSE,5);//定义5周期的简单移动平均线MA10:=MA(CLOSE,10);//定义10周期的简单移动平均线TIME>=0905&&TIME<1455&&CROSS(MA5,MA10),BK;//在9点05分之后14点55分之前的时间段内出现5周期线金*10周期线后买开TIME>=1455,SP;//当时间到14点55分时自动发出卖平指令TIME>=0905&&TIME<1455&&CROSS(MA10,MA5),SK;//在9点05分之后14点55分之前的时间段内出现5周期线死*10周期线后卖开TIME>=1455,BP;//当时间到14点55分时自动发出买平指令5、KDJ模型雏形RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//定义RSVK:=SMA(RSV,M1,1); //定义KD:=SMA(K,M2,1); //定义DJ:=3*K-2*D; //定义JJ<30&&CROSS(K,D),BPK;//J值小于30并且K、D金*,买平并买开J>70&&CROSS(D,K),SPK; //J值大于70并且K、D死*,卖平并卖开6、MACD模型雏形DIFF := EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);//定义DIFFDEA := EMA(DIFF,M);//定义DEA(DIFF<0)&&(DEA<0)&&(CROSS(DIFF,DEA)),BPK;//DIFF小于0并且DEA小于0并且DIFF上穿DEA,买平并买开(DIFF>0)&&(DEA>0)&&(CROSS(DEA,DIFF)),SPK;//DIFF大于0并且DEA大于0并且DIFF下穿DEA,卖平并卖开7、MTM模型雏形MTM:=CLOSE-REF(CLOSE,N);//定义MTMCROSS(MTM,0),BPK;//MTM上穿0轴,买平并买开CROSS(0,MTM),SPK;//MTM下穿0轴,卖平并卖开8、RSI模型雏形LC:=REF(CLOSE,1);//定义LCRSI1:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1)*100;//定义RSI1RSI2:=SMA(MAX(CLOSE-LC,0),M,1)/SMA(ABS(CLOSE-LC),M,1)*100;//定义RSI2REF(RSI1,1)<40&&CROSS(RSI1,RSI2),BPK;//上周期的RSI1<40并且RSI1上穿RSI2,买平并买开REF(RSI1,1)>60&&CROSS(RSI2,RSI1),SPK;//上周期的RSI1>60并且RSI1下穿RSI2,卖平并卖开9、WM模型雏形RSV:= (CLOSE-HHV(HIGH,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;//定义RSVLWR1:=SMA(RSV,3,1);//定义LWR1LWR2:=SMA(LWR1,3,1);//定义LWR2CROSS(LWR1,LWR2),BPK;//LWR1上穿LWR2,买平并买开CROSS(LWR2,LWR1),SPK;//LWR1下穿LWR2,卖平并卖开10、SAR模型雏形SARLINE:=ABS(SAR(N,STEP,MVALUE));//定义SARLINECROSS(CLOSE,SARLINE),BPK;//最新价上穿SARLINE,买平并买开CROSS(SARLINE,CLOSE),SPK;//最新价下穿SARLINE,卖平并卖开。
MT4指标编程入门解析MetaTrader 4(MT4)是一种用于外汇和股票交易的流行交易平台,该平台允许用户使用各种技术指标来进行分析和预测市场趋势。
通过编写自定义指标,交易者可以利用MT4的强大功能来制定他们自己的交易策略。
本文将介绍如何编程MT4指标的基本知识和步骤。
在编写指标之前,您需要了解一些MT4指标编程的基本语法和函数。
MT4使用一种名为MQL4的专有编程语言来编写指标和自动化交易脚本。
MQL4类似于C语言,并且有许多内置函数和操作符可供使用。
在编写指标时,您需要熟悉以下一些常用函数和操作符:1.`iMA`:计算移动平均线的函数。
它接受多个参数,包括计算平均线的价格类型、计算平均线的周期等。
2.`iRSI`:计算相对强弱指标(RSI)的函数。
RSI用于测量市场超买和超卖的情况。
3.`iMACD`:计算移动平均收敛/发散指标(MACD)的函数。
MACD用于判断市场的趋势和方向。
4. `iBands`:计算布林带指标的函数。
布林带用于测量市场波动性。
此外,还有其他一些常用的函数和操作符,如数学函数(例如`MathMax`和`MathMin`)、条件语句(例如`if`和`else`)以及循环(例如`for`和`while`)。
一旦您熟悉了这些基本知识,就可以开始编写您自己的指标了。
下面是编写一个简单移动平均线指标的示例代码:```mql4#property indicator_chart_window#property indicator_buffers 1#property indicator_color1 Blueextern int period = 14;double ma_buffer[];void OnInitSetIndexBuffer(0, ma_buffer, INDICATOR_DATA);int start = prev_calculated > 0 ? prev_calculated - 1 : 0;for (int i = start; i < rates_total; i++)ma_buffer[i] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, i);}```在这个示例中,我们定义了一个名为`ma_buffer`的浮点数数组,用于存储移动平均线的值。