海龟交易系统怎么当外汇市场以?具体规则详细解读

1.而你是依据突破前方20日高点入的集市,那么当价格回落破前10日最低点的当儿便出台,空头头寸同理。

先行勾勒及即,欢迎读者为我留言!提出提议以及见解,如果感到好打得享用给重新多热爱程序热爱交易的对象 https://www.botvs.com/m/dashboard。

比如说你当ICM的账户净值是10000美金,那么1%即是100美金,这时候要欧美货币对的ATR=0.0020(20天平均波动20单点),那么您的仓位大小就应有是0.5亲手[100美金/(20*10美金)]。

同老白一起游戏转JavaScript — 创造一个会见召开买卖的伴侣(2)

还要以保证总体仓位的风险最小,如果加仓的话,那么前面仓位的止损点就增强0.5ATR。这就是象征当有着加仓结束后,所有仓位的止损点离最后一笔仓位的去还是2ATR。

落草让沙盒

  • #### 沙盒系统

    当网上搜索各种资料学习的时段发现用电脑程序去做金融证券交易就称程序化交易、量化交易。老白的数学水平也就是大专级别,统计学更是只发生一对基本概念:正态分布、期望、协整
    等等。不敢说好是自办量化的顶多是当读书程序化、量化。在上学程序化、量化的经过中,或者实施备受。沙盒系统是不可少的,这个就是好比是一个模板游戏,里面来各种定义之资源、规则(有点像
    minecraft的社会风气)。写出来的逻辑程序可以在这沙盒系统中各种测试,检验最基本的贸易思路、逻辑、算法的正确性。

    老白感觉一个吓用的沙盒需要具有以下几点:

    • 1、最充分限度模拟真的辰序列,即当沙盒中走程序的时光时间序列要和真实情况尽可能的近乎,要基于tick级别,这样测试出之结果才有参考价值。可能会见招致程序于沙盒中之运作速度有限,不过运行速度也是一个雅关键的要素,总不克自测试一个次一旦一致上时间吧,这样即使针对沙盒系统要求比较大了。(尽可能真实并且还要比方快快。)

    • 2、各种参数选项决定,这个要求的莫是吃测试程序的参数,而是沙盒系统的参数。比如:交易所的设定(期货?A股?外汇?)、测试中交易所的效仿账户信息、
      交易所的手续费率、可能有的滑点率、时间限制控制 等等。

    • 3、程序的参数调优:有时候老白有平等深堆备用参数,想尝试到底谁好一点。好之沙盒系统可接受平等怪堆预设参数,然后自己运行,分析出结果,显示出无限好的。(这个是免是讲求小高..)

    • 4、容错测试:
      程序模拟跑的时光屡次还是顺风、风平浪静,那是以凡在浴盆里面(能出差不多那个浪?),而实质上被可是向不穷的汪洋大海洋,各种未知之大暴雨随时出现。那么沙盒系统将以浴盆里面随机做一些好风浪,最可怜程度模拟出恶劣的环境(就是放走各种不当数据,网络报错,甚至逻辑上不可能的多寡。)

    • 5、图表显示:图表可以记录多有效之数用于分析,比如收入图表、差价曲线等等。

  • #### 正好手头上生一个沙盒系统,我们先行用JS 写有简练的代码 玩一娱乐。

    • 1、CTP商品期货 自动化程序的一般架构
      老白用的底色已经封装了一个函数 exchange.IO("status")
      来识别以及期货公司的放开服务器是否连。这里跑题一下:期货公司之嵌入服务器?不是交易所么?
      老白答:
      商品期货使用的是CTP协议,连接结构是:
      期货公司客户之巅峰程序(老白的代码)——>期货公司置于服务器——->交易所服务器
      回到正题,在商品期货休市底时,是无能为力连接至期货公司前置服务器的(休市一定时间后期货公司之放置服务器就牵涉了)。或者部分情形导致的CTP断开连接。应针对这些状况老白的次序将间隔定时间去判断连状态,避免以非连接的情景下做片操作,导致问题。

      function MainLoop(){  //  处理具体工作的函数
                          //  编写处理具体交易逻辑
      }
      function main() {
          var status = null;
          while(true){
              status = exchange.IO("status");      //  调用API 确定连接状态
              if(status === true){                 //  判断状态
                  LogStatus("已连接!");            //  在回测或者实际运行中显示一些实时数据、信息。
                  MainLoop();                      //  连接上 交易所服务器后,执行主要工作函数。
              }else{                               //  如果没有连接上 即 exchange.IO("status") 函数返回 false
                  LogStatus("未连接状态!");         //  显示 未连接状态。
              }
              Sleep(1000);                         //  封装的睡眠函数,参数是毫秒,1000毫秒 等于 1秒,需要有轮询间隔, 以免访问过于频繁。CTP协议是每秒推送2次数据。
          }
      }
      

      沙盒里面走一下:

图片 1

1.png

图片 2

2.png

##### 看到图中,我们设置的回测账户资金了么,100W。

图片 3

3.png

  • 在先后中怎么抱自己的账户信息数量为,由于包裹了底层,做成了一个函数exchange.GetAccount()
    来尝试看就是这大概的等同句子。

    function MainLoop(){  //  处理具体工作的函数
        exchange.GetAccount();    
    }
    

    仅当斯自定义的 MainLoop()函数中描写入 exchange.GetAccount();

    结果什么还尚未亮。
    哦!对了函数是运行了,但是并未调用日志打印函数。这个吧是包装好之日记输出函数
    Log()
    函数参数就是若出口的各种变量,可以传递多只用逗号间隔。(写代码的当儿除了字符串里面可以用汉语输入法输入,其余写代码的下肯定要是记得切换英文,老白就掉了这个坑,浪费广大光阴才发觉凡是用汉语输入法写符号了。)

    function MainLoop(){                     // 处理具体工作的函数
        Log(exchange.GetAccount());          // 写法1
        var Account = exchange.GetAccount(); // 写法2
    }
    

图片 4

4.png

##### MainLoop 不停被执行(间隔1秒 全靠Sleep函数)所以回测系统日志全部输出的是 模拟账户信息。
  • 连通下当沙盒中呼吁一些别的数据,老白以前常关注 螺纹钢
    这个商品期货品种,因为以也关注房价~嘿嘿。言归正题,既然要叫程序为人开买卖,那么市场之物价指数是不行少的(老白去菜市场购买菜而若出卖比三家之哦!)。

    率先要懂得如果了解哪个品种的物价指数,比如就是 “螺纹钢1705合约”
    吧,交易所中该合同编码: rb1705 (期货知识我吗是百度自行补脑的),
    就用 exchange.SetContractType("rb1705")
    除此以外我思知道现在时刻是 rb1705合同的
    行情(回测系统被便运行时之时间点)。 可以调用
    exchange.GetTicker()
    继而我思了解下该合同的历史价格周期统计。 函数为:
    exchange.GetRecords()
    MainLoop 函数开一下改动:

    var index = 0;                                                // 声明一个全局变量 用来记录循环次数
    function MainLoop(){
        var ContractInfo = exchange.SetContractType("rb1705");    // 设置我要操作的 商品期货合约类型 即 螺纹钢1705合约。
        if(!ContractInfo){
            return;                                               // 如果设置合约没有成功,即返回函数,再次进入重试。
        }
        Log("rb1705 Info:", ContractInfo);                        // 显示一下合约详细信息。
        var ticker = exchange.GetTicker();                        // 通过CTP协议请求 此刻行情数据
        var records = exchange.GetRecords();                      // 通过CTP协议请求 历史K线数据,K线的周期默认周期是在沙盒系统上设置的。
        Log("ticker:", ticker);                                   // 打印出来 此刻行情数据
        Log("records:", records);                                 // 打印出来 历史K线数据
        Log("index:", index++, "#FF0000");                        // 打印循环次数, 在最后参数传入 "#FF0000" 可以使打印的日志显示为红色。
    }
    

图片 5

5.png

节选一部分records 变量的值(数组类型): 
[
{"Time":1486083600000,"Open":3354,"High":3358,"Low":3071,"Close":3272,"Volume":328708.00000000006},{"Time":1486083900000,"Open":3272,"High":3272,"Low":3228,"Close":3228,"Volume":133542}, ...]
Time : 时间戳,毫秒级时间。
Open : 开盘价 、High : 最高价 、 Low : 最低价 、 Close :收盘价 、 Volume : 成交量 

打印出的ticker 变量的值(对象):
{"High":3090.5,"Low":3088.5,"Sell":3090.5,"Buy":3088.5,"Last":3089.5,"Volume":100}
High : 当前最高价 、 Low : 当前最低价 、 Sell : 卖一价 、 Buy : 买一价 、 Last : 最后成交价 , Volume : 最近成交量

rb1705合约的信息:(可以查看CTP协议中关于字段的描述。)
{
"CombinationType":0,
"CreateDate":20160414,
"DeliveryMonth":5,
"DeliveryYear":1705,
"EndDelivDate":20170522,
"ExchangeID":"SHFE",
"ExchangeInstID":"rb1705",
"ExpireDate":20170515,
"InstLifePhase":49,
"InstrumentID":"rb1705",
"InstrumentName":"rb1705",
"IsTrading":1,
"LongMarginRatio":0.06,
"MaxLimitOrderVolume":500,
"MaxMarginSideAlgorithm":48,
"MaxMarketOrderVolume":30,
"MinLimitOrderVolume":1,
"MinMarketOrderVolume":1,
"OpenDate":20160517,
"OptionsType":0,
"PositionDateType":49,
"PositionType":50,
"PriceTick":1,
"ProductClass":49,
"ProductID":"rb",
"ShortMarginRatio":0.06,
"StartDelivDate":20170516,
"StrikePrice":0,
"UnderlyingInstrID":"",
"UnderlyingMultiple":0,
"VolumeMultiple":10
}
  • 说到底我们受机器人在沙盒里面走一下

    此处介绍一些货物期货的概念,期货里面无论是买多仓合约(看涨合约)
    还是 买入空仓合约(看跌合约)
    都被开仓,为了区别:买入多仓合约为起多仓库,买入空仓合约为开空仓。同样
    平掉(对基于消除义务) 持有的基本上仓合约 和
    平掉所有的空仓合约都受平仓,为了区别:平掉多仓合约为平多仓,平掉空仓合约于平空仓。

平仓是依赖期货交易者购买或卖掉与那所持有期货合约的种类代码、数量与交割月份一模一样而市方向相反的期货合约,了结头寸的表现。
期货交易者在终极交易日结束前择机将请的期货合约卖出,或以贩卖来的期货合约买掉,是为了通过平等笔画数量相等、
动向相反的期货交易来冲销原有的期货合约,以此了结期货交易,解除到期进行实物交割的义务。
“`

##### 所以在期货市场做买卖就有4个方向:

用 ```SetDirection()``` 函数来 确定操作的方向

- 开多仓:SetDirection("buy") ,传入参数 "buy" 字符串,明确 exchange.Buy() 函数为 开多仓 操作, Buy 函数稍后讲到。

- 开空仓:SetDirection("sell"), 传入参数 "sell" 字符串,明确 exchange.Sell() 函数为 开空仓 操作,Sell 函数稍后讲到。

- 平多仓:SetDirection("closebuy"), 传入参数 "closebuy" 字符串, 明确 exchange.Sell()函数为 平多仓操作。

- 平空仓:SetDirection("closesell"), 传入参数 "closesell" 字符串,明确 exchange.Buy()函数为 平空仓操作。

下个单试试!继续改写 MainLoop 函数,我们让程序在沙盒里面每隔10分钟 交易一次,开多仓平多仓交替进行。
```
var index = 0;
var isFirst = true;
function MainLoop(){
    if(isFirst){
        Log(exchange.GetAccount());
        isFirst = false;
    }
    var ContractInfo = exchange.SetContractType("rb1705");
    if(!ContractInfo){
        return;                                               // 如果设置合约没有成功,即返回函数,再次进入重试。
    }
    var ticker = exchange.GetTicker();
    if(index % 2 === 0){
        exchange.SetDirection("buy");
        exchange.Buy(ticker.Last + 1, 1, ticker); // exchange.Buy 函数有2个必要参数,第一个参数为下单价格,
                                          // 第二个参数为下单数量(希望交易的数量),之后还可以跟一些参数输出在日志信息。 
                                          //ticker.Last + 1 是为了让单子能成交,意思是在最后成交价的基础上多出1块钱。
    }else if(index % 2 === 1){
        exchange.SetDirection("closebuy");
        exchange.Sell(ticker.Last - 1, 1, ticker); // ticker.Last - 1 是为了在最后成交价的基础上减去1元 卖出。
    }
    index++;
    Sleep(1000 * 60 * 10 - 1000);         // 这里暂停10分钟 ,减去的1000 即1秒是 main 函数循环中的1秒。
    Log(exchange.GetAccount());
}
```

图片 6

6.png

##### 开始的账户信息 和 最后一次开仓 前的账户信息比较,可见不能胡乱开仓平仓。 >_<

止损-承受多很的风险?

程序员 littleDream 原创

2.冲天相关市场6独单位。

(图片源于:ICM Capital英国艾森)

2.突破(跌破)50日均线。夫属于入场的尽量规范,也就是说要价格突破了50日统统线虽无脑进场做多,跌破50日都线便管脑做空,不管而前面起没出仓位。

那这指标是呀意思呢?她象征的凡价格在一定时间外之平均波动范围(上图下的20,这个参数可以改,现在常用之是14)。从达成图我们得以看来ATR(20)=0.0065,也就是说在接近20天里,欧美货币对每日平均的动乱幅度是0.0065美金,怎么换算成点数大家应该都知,所以再次好的晓就是是欧美货币对在邻近20龙里平均每天的不定幅度是65单标准点。

2.若您是依据突破50日净线入的集市,那么当价格回落破前20日最低价的当儿便出台,空头头寸同理。

除此之外上述以外,丹尼斯还传了另外一样栽止损策略,这种政策相对既定盈利之图景下亏损会再要命,称之为双重损失。

理解了海龟交易系统里之波动性,接下去我们即便来仔细看同样押一切交易系统的平整组织。我们理解同样效仿成型的交易系统需要建立建仓、仓位、加仓、止损、平仓这五独元素,那以海龟交易系统里他们还是何等的也?

1.突破(跌破)前20日高(低)点。一个月份交易时一般是22龙,所以多是创办一个月份新大(低)就进场,而且是因实时价格为主,不管有没产生收盘或者出现跳空。在此处要顾的是,如果此信号连续出现了累累赖,但若早已冲同样信号建了仓的言语,可以忽略不计。

4.单向市多头或者空头12单单位。

章来源公众号“ICMCapital”,转载请注明来源!

以不同之商海建仓的限定不同,其中各种情形下最为可怜的仓位限制为:

尚盖点ICM的账户为条例,你曾经生了了0.5亲手欧美多但了,ATR还是0.0020,这时候价格去你的下单位置腾了10触及(0.5*20),那么即便延续加0.5亲手,这时候若到底的仓位就是1亲手。

海龟交易系统里生零星单入场信号:

仓位-下多特别之只?

理查德·丹尼斯是交易界的传奇人物,他已经创造了用400美金最后盈利2亿美金的偶然。但越是大众所熟识的凡他同老朋友的一律庙会赌局,老友认为做交易而倚重原,而异确信伟大交易员是得经后天养要成的,为这他开展了一个交易史上顶闻名的实验-海龟实验。实验招募了扳平批新手交易员进行培养,通过传授交易策略并贯彻淘汰制,这批学生当随着的季年里实现了均匀复利80%底进项。

海龟交易系统的本质是来势交易,振荡行情中那行的要起个大大的问号,不了那个珍惜波动性和分批建仓的见识非常值得借鉴。

未雨绸缪止损策略-双重损失

海龟交易策略要求另外一样笔画交易的高风险不克超出账户净值的2%。盖价格波动1ATR表示账户净值的1%,也就是说最酷止损是价格波动的2ATR。比如在ATR=0.0020的时刻,你的欧美单子的止损点就该去入场位40触及。

建仓-什么时入场?

1.单一模一样市面4只单位。

平仓-什么时候离场?

聪慧之您应当发现了,振荡行情遭若这样止损可能只要赔惨。但值得一提的凡设是断章取义行情的语句,你尽管不挪窝止损,加仓过后有着的风险吗非会见跨2%。

总结

万一欧元兑美元大强势,那是无是可无限次加仓呢?不要遗忘了纯市场最深之仓位限制是4只单位,也就是说你当欧美及极度多只能下2手。

3.低度相关市场10独单位。

图片 7

本条方针的止损设于0.5ATR处,如果某个一个单位的仓位扫损了,等重突破之时候再进场。比如欧美正突破了20日底最高点,ATR=0.0020,你就是0.5手很了上,止损则为10个点。杀进后欧美即掉头了,扫了而的止损点,再突破后若又挺上。

加仓-怎么增单量?

每当解读这套系统之前,我们用了解丹尼斯就套策略的核心-波动性,与当下风靡的VIX指数不同,丹尼斯凭的波动性是恃单个产品价格的骚乱范围,他就此符号“N”来代表。其实这个“N”就是现行之ATR指标,计算公式就不排了,因为MT4里面就是出。

先是软进场后,以后每次价格浮盈0.5ATR就加同破仓,加仓大小是一个单位。

难忘,止损就是亏损平仓,所以接下去的平仓主要对盈利平仓,海龟交易对不同的入市信号则发例外之平仓标准。

这就是说丹尼斯底市策略到底是怎样的?因“海龟”们透露来之政策细节,我们不难窥见海龟交易系统是卓越的动向交易,而且只有做突破单,不过最紧要之是丹尼斯用风险管理和价格的波动性进行了于完美的结合。

在这边,丹尼斯以1N(ATR)为单位建仓,价格波动1N(ATR)代表账户净值的1%。

发表评论

电子邮件地址不会被公开。 必填项已用*标注