4th Street Bar Hive-Bar

Hive-Bar Powered by Hive beta-fdb5b5b

Community post

BTC 交易程序的实现

我花了些时间研究策略,对照各种情况下的K线路,走了一圈,理论上都没有问题,那就开始动手做,开发前我请教了下老聂和表格,说PHP也可以写得出来,OKCOIN有调用接口,PHP我会点,写程序我比半瓶水还半瓶水,什么都会点,但什么又都不会,两个字,我会买,我会改, 呵呵

我学语言都是为了解决问题去学,只要解决问题就好, BTC每个交易所都提供API, 无论是现货交易,还是合约,都有接口和方法调用 , OKCOIN的API调用文档
,目前支持C#、C++、JAVA、PHP、Python 版本, 再看其它交易所接口,基本上都提供这几个语言的开发接口,PHP用得顺手我就先来PHP了.


有了代码样例好解决问题,我需要实现的功能

  1. 读取K线数据
  2. 计算阳线和阴线,买和卖 (如何买和卖在策略已写,低吸高抛,有小赚就可以)
  3. 交易记录 (我用到MYSQL存储和查询每笔交易,如果是高频交易这个表也可以不建,只要调OKCOIN的交易记录再用来分析)

在程序开发前,先要申请个API KEY,每个交易所都有API KEY, 据说这些交易所以前经常出问题,API的开发人员都是@xiaohui调教出来的,所以现在调用都稳定了, 呵呵

样例代码PHP Example.php有各种调用方法,把样例的API KEY,换成自己的,OKCOIN有国际站和中文站,读出的K线数据价格一个是美元,一个是人民币, 在文档中修改调用的网址为 http://www.okcoin.cn, 调出的是中文站数据.

1.) 读取K线

//获取比特币或莱特币的K线数据
$params = array('symbol' => 'btc_cny', 'type' => '5min', 'size' => 5);
result=result =client -> klineDataApi($params);
得到的结果
Array ( [0] => Array ( [0] => 1487075700000 [1] => 6753.9 [2] => 6753.9 [3] => 6726 [4] => 6753.9 [5] => 14.441 ) [1] => Array ( [0] => 1487076000000 [1] => 6749.1 [2] => 6753.9 [3] => 6733.33 [4] => 6733.55 [5] => 32.414 ) [2] => Array ( [0] => 1487076300000 [1] => 6735 [2] => 6748 [3] => 6720.32 [4] => 6720.41 [5] => 17.753 ) [3] => Array ( [0] => 1487076600000 [1] => 6748 [2] => 6748 [3] => 6718.8 [4] => 6718.8 [5] => 135.998 ) [4] => Array ( [0] => 1487076900000 [1] => 6718.8 [2] => 6730 [3] => 6718.8 [4] => 6730 [5] => 0.699 ) )
这组数据 解析很简单, 会写程序的都懂, 解释下每根K线
[1] => Array (
[0] => 1485102600000 时间戳
[1] => 6262.6 开 KK
[2] => 6272.53 高 KH
[3] => 6258.1 低 KL
[4] => 6267.17 收 KS
[5] => 839.07 交易量) )

每根K线的高点,低点,收盘价也有,交易量也有, 有这些数据就好办, 剩下的就是怎样处理.

我需要从这组数据提取5根K线的最高点或者最低点

这需要用到PHP数组的一些方法,我花了几分钟找了一个案例
不懂的GOOGLE 搜呀,会关键字搜就什么都有了, php multidimensional-array max / min
http://stackoverflow.com/questions/17339421/find-highest-value-in-multidimensional-array
解决了问题

改成自己需要的代码:

/* 获取最KH值 */
$max = -9999999; //will hold max val
$found_item = null; //will hold item with max val;
foreach(resultasresult ask=>$v)
{
if(v['2']>v['2']>max)
{
max=max =v['2'];
founditem=found_item =v;
}
}
echo "max value is $max
";
print_r($found_item);

最大值出来了,5根,10根,100根最大值都可计算出来, 最小值的方法相反.

/* 获取最KL值 */
$min = 9999999; //will hold max val
$found_min_item = null; //will hold item with max val;
foreach(resultasresult ask=>v)if(v) { if(v['3']<$min)
{
min=min =v['3'];
foundminitem=found_min_item =v;}
}
echo "min value is $min
";
print_r($found_min_item);


有了这两个重要的参数, 剩下的就好办了, 就是 if then else 解决的问题.

2. 计算阳线和阴线

这个比较容易,找出高低点,就知道每根线的是阳线,还是阴线 方法如下

if (k1item[4]>k1_item[4]>k1_item[1]) {k1=0;}elsek1=0;} else {k1=1;}if (k2item[4]>k2_item[4]>k2_item[1]) {k2=0;}elsek2=0;} else {k2=1;}
if (k3item[4]>k3_item[4]>k3_item[1]) {k3=0;}elsek3=0;} else {k3=1;}
if (k4item[4]>k4_item[4]>k4_item[1]) {k4=0;}elsek4=0;} else {k4=1;}
if (k5item[4]>k5_item[4]>k5_item[1]) {k5=0;}elsek5=0;} else {k5=1;}

有了阴线和阳线,剩下的往策略里面套

买入点计算 (对照上一篇文章中的策略)

if ((k4item[2]-k4_item[2]-k4_item[3])>100) //大跌时的买入
{
$type=0;
echo '
K4单根下跌100点
';
buyprice=buy_price=min-50;
$buyorder; // 这是一段函数,执行买入并写入mysql数据记录的一段程序
} else
//if (((k1==0)&&((k1==0) && ((k2==1)&&(k3==1)&&(k3==1)&&(k4==1)))&&((max-max-min)>=50))
if ((((k1==0)&&((k1==0) && ((k2==1)&&(k3==1)&&(k3==1)&&(k4==1)))&&((max-max-min)>=50))&&($k2k1==0)) //小跌V型反弹的买入, 跌幅必须于50点以上, K2的低点必须低于K1的低点(上涨的假跌)
{
$type=1;
echo '
符合条件买入V线
';
buyprice=buy_price=min-10;
$buyorder;
} else
if ((max-max-min)>=100) // 5根K线或者30根K线最高点到最底点跌超过100点的买入
{
$type=2;
echo '
符合条件买入线100点
';
buyprice=buy_price=min-50;
$buyorder;
}

有买就有卖

买的过程有个等待时间,现在不能主动,主动吃单收费,相当于少20个点,这样做就少赚钱了,
每笔交易买入成功后,立即进入卖出程序, 卖出加多少点,也要根据上面三个策略类型决定, BTC经常很疯 快速下跌100, 几分钟内快速回收50-80点,甚至完全吃掉这根阴线也时有发生.
但为了每笔记录都安全, 没买到就放弃,等到下一次机会

代码比较多, 有兴趣讨论我会继续, 目前实时工作表现良好,我抓了几张今天下午跑的截图 (如果改进一下,可以自动截图,存到服务器上)
http://steemit.marketing/wp-content/uploads/2017/02/01-2.jpg

这根K线突然大跌,超过100点,程序启动
if ((k4item[2]-k4_item[2]-k4_item[3])>100) //大跌时的买入
买入价格是最低价-50点

http://steemit.marketing/wp-content/uploads/2017/02/06.jpg

http://steemit.marketing/wp-content/uploads/2017/02/07.jpg

但K6并没有继续往下跌,而是完全吃掉这根阴线,几分钟就是100多点,没买到,程序等待1800秒,就放弃了
http://steemit.marketing/wp-content/uploads/2017/02/04-1.jpg

但更多的情况会连续下跌, 越跌越赚,很容易就买到了, 下一次继续等
http://steemit.marketing/wp-content/uploads/2017/02/02-1.jpg
这是最新的BTC 5分钟,K线图,程序会执行买入的是1和2, 其它的也是K1阳线,K2,K3,K4阴线,但都不符合买入条件,红圈下跌幅度不够,都不执行, 蓝色 1执行K4单根下跌100点, 蓝色2执行 if ((max-max-min)>=100) , 5根K线最高点到最底点跌超过100点的买入
http://steemit.marketing/wp-content/uploads/2017/02/0005.jpg
孩子们都睡了,继续优化K线,有兴趣的朋友,或者已经做过的大王们,欢迎多指教

113 upvotes $0.34

Replies (28)

Review before signing

Posting as . Signing with . Keychain permission: Posting. Hive Keychain will ask you to approve this action next.


  
Technical details

Operation fingerprint: