程序员的量化世界量化交易量化

和老白一起玩转JavaScript -- 创造一个会做买卖的小伙

2017-03-06  本文已影响56人  发明者量化FMZ

和老白一起玩转JavaScript -- 创造一个会做买卖的小伙伴(2)

诞生于沙盒

1.png 2.png
##### 看到图中,我们设置的回测账户资金了么,100W。
3.png 4.png
##### MainLoop 不停被执行(间隔1秒 全靠Sleep函数)所以回测系统日志全部输出的是 模拟账户信息。
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.png
##### 开始的账户信息 和 最后一次开仓 前的账户信息比较,可见不能胡乱开仓平仓。 >_<

先写到这,欢迎读者给我留言!提出建议和意见,如果感觉好玩可以分享给更多热爱程序热爱交易的朋友 https://www.botvs.com/m/dashboard

程序员 littleDream 原创

上一篇 下一篇

猜你喜欢

热点阅读