BTC 交易程序的实现

in #cn-programming7 years ago (edited)

我花了些时间研究策略,对照各种情况下的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 = $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($result as $k=>$v)
{
if($v['2']>$max)
{
$max = $v['2'];
$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($result as $k=>$v) { if($v['3']<$min)
{
$min = $v['3'];
$found_min_item = $v;}
}
echo "min value is $min
";
print_r($found_min_item);


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

2. 计算阳线和阴线

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

if ($k1_item[4]>$k1_item[1]) {$k1=0;} else {$k1=1;}if ($k2_item[4]>$k2_item[1]) {$k2=0;} else {$k2=1;}
if ($k3_item[4]>$k3_item[1]) {$k3=0;} else {$k3=1;}
if ($k4_item[4]>$k4_item[1]) {$k4=0;} else {$k4=1;}
if ($k5_item[4]>$k5_item[1]) {$k5=0;} else {$k5=1;}

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

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

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

有买就有卖

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

代码比较多, 有兴趣讨论我会继续, 目前实时工作表现良好,我抓了几张今天下午跑的截图 (如果改进一下,可以自动截图,存到服务器上)


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





但K6并没有继续往下跌,而是完全吃掉这根阴线,几分钟就是100多点,没买到,程序等待1800秒,就放弃了


但更多的情况会连续下跌, 越跌越赚,很容易就买到了, 下一次继续等

这是最新的BTC 5分钟,K线图,程序会执行买入的是1和2, 其它的也是K1阳线,K2,K3,K4阴线,但都不符合买入条件,红圈下跌幅度不够,都不执行, 蓝色 1执行K4单根下跌100点, 蓝色2执行 if (($max-$min)>=100) , 5根K线最高点到最底点跌超过100点的买入

孩子们都睡了,继续优化K线,有兴趣的朋友,或者已经做过的大王们,欢迎多指教

Sort:  

带代码的技术贴终于来了。明天有时间了详细看。

顺便说下,查查 MarkDown 格式,有专门的代码段写法,包含缩进,帖子会好看一点。
```

第一行
   第二行

```

更多格式参考这里: https://guides.github.com/features/mastering-markdown/ 里面 Examples 有各种示例可以点,比如上面说的,点 Code 看。

也可以参考我6个月以前写的一篇向导贴
居然不知不觉在这混半年多了

赞!你这个比我写的强多了。我还没搞清楚怎么在多行代码块里嵌入```

你的这个贴,我昨晚上找了好久,呵呵,印象中7个月以前有两个人写了这个, 而且我还特意保存到了 steemit.marketing howto, 方便自己查工具时好用
@lemooljiang写的
新人生存指南之四 图文编辑三板斧
图文编辑三板斧(更新版)
昨晚我在贴代码时,只看到图文编辑三板斧 “>"介绍, 就学了一招 :)

哇咔咔
你那个网站看起来比steemit界面好看多啦
单独写个帖子英文发布一下,没准也能上个首页呢,哈哈

当时怕steemit关张,赶紧备份,做这个,写这么多文章许多都是有用的, 第二就是steemit如果给钱做宣传,我手工挑选好文,自动转发,带来流量赚点aff
还有一些社交思路,反正都是和流量变现有关 :)

BTC趋势交易有兴趣搞的人不多, 你们几个思路宽点,这个贴我会转发给表格和老聂看下,希望指导一下.
MarkDown 语法只学了几招,你这个链接里更详细,写steemit的应该先从基础入门,学习markdown语法!

其實看不太懂 @@,頭昏了。但是請教一下,我之前看過一個新聞說,有人會去推論交易機器人的規則,再利用其漏洞,把那帳戶裡的btc給洗光。有無這風險不?

如果你把API KEY告诉其它人,那就真提光光了 :) 申请这个KEY是要身份验证的, KEY被别人知道相当于账户资金没了,一个命令,所有btc就转走了.

喔,但我說的是,別人利用你的公式,誘導你的機器式交易發生,最後導致虧損交易不斷出現,造成帳戶虧空。這有可能嗎?

策略没写好,就会亏钱,许多人赚钱策略都不会公开,
在上篇文章中介绍策略,这套程序的策略就是等跌,越跌越好,跌后的快速反弹就是赚的, 在长期运行,能跑赢有赚就是好程序.

年前我测试了交易一段时间, 现在继续,改进了一些可能极端的情况,比如一根5分钟K线跌200点以上被套住遇到过一次,还有一些 工作需要做,下跌深度数据和量能,仓位也要考虑,
目前我把这三种策略的组合一起运行,表现不错, 报表我会在运行一段时间上传到这里

我最好在标题加上

投资需谨慎,入市有风险

我写这套程序也是有目的,将来可以应用到不同的交易所或者24X7交易的其它品种交易, 比如poloniex其它币种,还有我不知道的其它交易.
这个程序就是交易性格, 等跌,没机会就不做

说点题外话。任何策略都可以被针对。市场参与者性格决定交易策略性格,众多参与者共同作用决定市场性格,不同的市场性格下有不同的较优策略。要在市场中赚钱,就要持续观察市场变化、快速反应调整策略。

没错,道高一尺魔高一丈
武术一样,你招式被人看透了,就会有专门克制你招式的招式出现。
比谁信息量大,比谁反应快速,比谁技术高超,当然了还有谁设备先进

举例说,我写个程序跑在家里电脑上
读到的交易数据已经延迟了好久,不新鲜了,那么据此得出的结论有可能已经过时了,这是其一。

其二,策略没问题,数据没问题,通过分析数据发现机会,然后下单,因为网慢,等下单生效,机会已经过去鸟

所以,没有谁随随便便成功,当然裹足不前、或者因噎废食也不可取。

赞 "任何策略如果不变都会被针对,持续观察市场变化、快速反应调整策略"

API KEY你可以设置权限,比如说只要交易权限,不要提币权限
这样即使泄露,别人多说帮你写程序交易

至于提币,说实话,即使泄露了,现在还能提币吗?
这个不妨试试啊,看看OKCOIN有没有把API提币堵上,哈哈哈哈

表格调教出来的程序员,都不太傻,API提币肯定堵上了

非常有可能!

偷偷的说一下,smoo......在steemit内部市场玩机器人呢
分析他的策略应该很简单
然后你针对他的策略来做程序诱骗他,你就有机会发家了

说到内盘交易,要说回到7月份你们刚来那段时间。那时候币价高,内盘做市有奖,那个火爆啊。排行榜上天天有关于内盘交易的分析和报道。
先是我写了个机器人偷偷跑了几天,然后 smooth 针对我的机器人写了个策略,坑了我 5000 多STEEM;然后我改;后来 complexring 又弄了个策略坑了我 2w 多,都是趁我睡觉没时间盯的时候搞的。。 @smarketing 有兴趣的可以翻翻那段时间的帖子。

哈哈哈,这么有意思
okcoin btc交易还好,除非网站所有者可以有权限查别人的交易数据并分析策略
普通用户应该是没法分析到别的用户的具体数据,只能从全站的公开数据着手

而steemit,所有的数据都是公开的,所以想分析谁的策略太容易了
当然,分析出来,能不能做出有针对的策略是另外一回事了

7月份那时候币价嗷嗷高啊,我记得4-6美元,因为我记得我4美元那段时间写文收入都power up了。2.5W*4, 10W美元啊,白花花的银子啊,哭。话说,你坑到别人没有啊?:)

呃,当年勇,本不该提的。既然问到了,就说说吧。

当时那个“做市”奖,大部分是我拿了,一共有50W STEEM左右。其中大概一半用来填这些坑,我剩一半。不过,当初拿到奖后大部分没有套现,不然真的是一大笔银子呢。一部分当时Power up了,一部分当时转成 Steem Dollar 了然后在11月份Power up了,剩下一部分在11月卖掉的,没剩几个钱。

这里有几个链接:

你这才是真正的好汉啊
仰望啊
白花花的银子啊,给我晃晕了

我也想笑,哈哈哈,趁你睡觉 :)

场内交易波动太小,不好赚,
今天我在okcoin交易了一天BTC, 只赚了53块钱,手工模拟策略,然后我发现很有意思的事情,也是机器人在干,也就是你说的 “任何策略如果不变都会被针对”, 也许这可以写成一个新的策略,但晚上我回来发现就变了,也许明天上午就又可以玩了, 一会我把截图重新发个贴,很有意思

簡單的話你快做吧... 發家的機會還留給我?:)

狡诈用来形容你,那是极其恰当的,哈哈哈哈哈哈

是你叫我去誘騙人,怎麼又變成我狡詐了,路過的看倌們,評評理啊... (話說如果真能發家,一起狡詐吧,@@)

场内的交易,我目前还没有观察,但poloniex许多币都是机器在做,跳动非常非常快,可以研究

机器人太疯了,能看懂中文

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.027
BTC 64187.97
ETH 3476.17
USDT 1.00
SBD 2.49