zoukankan      html  css  js  c++  java
  • 程序化交易策略开发:第1个策略

      学习程序化交易策略开发是一个很简单的事,也就是学习1门简单脚本语言或甚至是一个插件使用那么简单。难的是开发出一个能赚钱的策略,但程序员这么多,也许你能通过程序化交易找到适合你的发展方向呢。下面通过几个简单步骤开发一个交易策略。

      1.选择开发平台,国内的有开拓交易者(期货),国外的MiultiCharts(期货),还有MT4(外汇),这里以开拓交易者(简称TB)为例。

      2.下载、注册与登录,按提示操作即可

      

       3.进入后关闭默认图表后的界面

      

     4.点击左侧的“超级图表”,默认的投资标的不对,需要更换,图表中点右键,选择“插入商品”

    一般选择“××指数”,这里选"股指指数"

    继续在图表中点右键,选择“商品设置”,出现对话框,将默认合约下移后删除

               

    这样,就选择了策略运行的投资标的(股指),最后需要选择你在几分钟上的K线周期上做交易

     这时候可以保存一下工作区了,点工具栏“保存”,按提示操作即可,保存后,多工作区时注意切换

    5.交易标的选择后之后,就是编写策略了。选择导航的“新建公式应用”,按提示输入英文名称,选择模板“交易策略”

    生成默认代码,下面这个编译按钮很重要,没有出现时,随意修改下文件即可,例如输入一个空格。编译后,输出窗口会提示成功与否(默认代码的Condition1、Condition1赋初值错误,编译不通过)

    6.修改代码

    7.代码完成并编译通过后,记住公式名称。回到图表页面,点右键“插入公式应用”,选择编辑的公式。

           

    下面是一个策略范例,大致逻辑是均线之下开空,均线之上开多

    //------------------------------------------------------------------------
    // 简称: eleven
    // 名称: eleven
    // 类别: 公式应用
    // 类型: 用户应用 
    //------------------------------------------------------------------------
    Params 
        Numeric AM_CO(40);//Close-Open
    	Numeric AM_CM(200);//Close-Max(High/low)
    Vars 
    	NumericSeries sum_up(0);
    	NumericSeries sum_down(0);
    	Numeric Am(0);
    	Numeric Am2(0);
    	Numeric Am3(0);
    Begin
    	Am = Close[1] - Open[1];
    	Am2 = Close[1] - Close[2];
    	if ( sum_up[1] > 0 ) {
    		if ( Am >= 0 ) {			
    			sum_up=sum_up[1]+1;
    		} else if ( Abs(Am) <= AM_CO  ) {	
    			if ( Close[2] - Open[2] < 0 ) {
    				sum_down = 2;
    				sum_up = 0;
    			} else {
    				sum_up=sum_up[1]+1;
    			}			
    		} else {			
    				sum_down = 2;
    				sum_up = 0;				
    		}
    		PlotString("num", Text(sum_up));
    		if ( sum_up == 0 ) {
    			
    				if ( MarketPosition != -1 ) {
    					SellShort(1,open);
    				}
    		}
    	
    	} else if ( sum_down[1] > 0 ) {
    		if ( Am <= 0 ) {			
    			sum_down=sum_down[1]+1;			
    		} else if ( Abs(Am) <= AM_CO  ) {	
    			if ( Close[2] - Open[2] > 0 ) {
    				sum_up = 2;
    				sum_down = 0;
    			} else {
    				sum_down=sum_down[1]+1;
    			}
    		} else {				
    				sum_up = 2;
    				sum_down = 0;
    		}
    		if ( sum_down == 0 ) {
    			if ( MarketPosition != 1 ) {
    					Buy(1,open);
    				}
    		}
    		PlotString("num2",Text(sum_down));
    	
    	} else {
    		if ( Am > 0 ) {			
    			sum_up=sum_up[1]+1;
    		} else if ( Am < 0 ) {
    			sum_down = sum_down[1]+1;
    		}
    	}
    
    End
    

      

    8.选择完公式后,对效果进行测试,点击工具栏的测试报告图表,如下:

    出现测试报告

    可以看出总体是净利润为正,选择不同的K线周期效果不同。不过这还不是一个合格的策略。正常的交易不是市价就能成交的,需要考虑增加1-2个滑点。

    暂时就到这里,后面会讲更多的开发问题和一些潜规则,避免大家走弯路。

  • 相关阅读:
    Luckysheet如何初始化含合并单元格的数据
    Luckysheet如何一键导入本地Excel
    又发现一款纯js开源电子表格Luckysheet
    Sublime Text3 注册码(Windows/Build 3176版本)| 开发工具
    Python初学者笔记(4)-简单的通讯录
    Python初学者笔记(3):输出列表中的奇数/奇数项,字符串中的偶数项,字符串大小写转换
    安装wampserver出现“The Program can't start because MSVCR110.dll is missing from your computer. Try reinstalling the program to fix this problem”
    python初学者笔记(2):阿拉伯数字转换成中文大写
    Python初学者笔记:打印出斐波那契数列的前10项
    JavaScript弹出对话框的三种方式
  • 原文地址:https://www.cnblogs.com/ninestates/p/4347701.html
Copyright © 2011-2022 走看看