TradingView简易教程(二) —— UDF接口
2018-10-01
6,091 views
6 min read
本教程仅限于实现最基础功能,更详细精进的功能请绕道(ノ≧∀≦)ノ・‥…━━━★ ピキューン!
上一篇教程介绍了如何配置TradingView的图表,这篇教程讲述如何通过UDF实现数据的传输。
UDF接口文档
UDF介绍
Universal Data Feed 通用数据饲料,基于HTTP协议的旨在以简单有效的方式向图表库提供数据。
以上为官方介绍,你只需要根据官方给出的接口文档写一份接口就行了,接口的调用图表自身会去完成。
必须接口
- GET
/config
返回一个数组对象用于配置图表,详细属性参照文档
public function config()
{
$config = array(
'supports_search' => true,
'supports_group_request' => false,
'supported_resolutions' => ["1", "5", "15", "30", "60", "1D", "1W"],
'supports_marks' => false,
'supports_time' => true,
"exchanges" => [["value" => "", "name" => "All Exchanges", "desc" => ""]]
);
exit(json_encode($config));
}
- GET
/symbols?symbol=<symbol>
解析某个商品(虚拟币,股票),返回该商品的属性(比如name),返回对象为SymbolInfo
public function symbols()
{
$input = I('get.');
$market = strtolower(trim($input['symbol']));
$data = [];
if (is_array(C('market')[$market])) {
$marketData = C('market')[$market];
// $data['market'] = $marketData;
$data['description'] = $marketData['title'];
// $data['exchange-listed'] = '';
// $data['exchange-traded'] = '';
$data['has_intraday'] = true;
$data['has_no_volume'] = false;
$data['minmov'] = 1;
$data['minmov2'] = 0;
// $data['name'] = $marketData['title'];
$data['name'] = $market;
$data['pricescale'] = 100;
$data['session'] = substr(str_replace(':', '', $marketData['begintrade']), 0, 4) . '-' . substr(str_replace(':', '', $marketData['endtrade']), 0, 4) . ':1234567';
$data['supported_resolutions'] = ["1", "5", "15", "30", "60", "1D", "1W"];
$data['ticker'] = $market;
$data['timezone'] = 'Asia/Shanghai';
$data['type'] = 'stock';
}
exit(json_encode($data));
}
- GET
/history?symbol=<ticker_name>&from=<unix_timestamp>&to=<unix_timestamp>&resolution=<resolution>
最关键的一个接口,通过这个接口获取K线数据,并更新K线数据
symbol
是商品名,from
和to
是俩时间戳,表示K线的时间段,resolution
代表K线刻度
public function history()
{
$input = I('get.');
$market = (is_array(C('market')[$input['symbol']]) ? trim($input['symbol']) : C('market_mr'));
$from = intval($input['from']);
$to = intval($input['to']);
$resolution = $input['resolution'];
$allResolutions = array(
'1' => 1,
'5' => 5,
'15' => 15,
'30' => 30,
'60' => 60,
'1D' => 1440,
'1W' => 10080,
// '1M' => 302400,
);
$key = $market . $resolution . $from . $to;
$resolution = key_exists($resolution, $allResolutions) ? $allResolutions[$resolution] : 1;
$lastUpdateTime = (APP_DEBUG ? null : S('UdfHistoryUpdateTime' . $key));
if (($lastUpdateTime + 60) < time()) {
S('UdfHistoryData' . $key, null);
S('UdfHistoryUpdateTime' . $key, time());
}
$tradeJson = (APP_DEBUG ? null : S('UdfHistoryData' . $key));
if (!$tradeJson) {
$tradeJson = M('TradeJson')->where(array(
'market' => $market,
'type' => $resolution,
'data' => array('neq', ''),
'addtime' => array(array('egt', $from), array('elt', $to), 'and'),
))->order('id asc')->select();
S('UdfHistoryData' . $key, $tradeJson);
}
$json_data = array();
foreach ($tradeJson as $k => $v) {
$json_data[] = json_decode($v['data'], true);
}
$data = array(
's' => 'ok',
't' => array(),
'c' => array(),//收盘
'o' => array(),//开盘
'h' => array(),//高
'l' => array(),//低
'v' => array(),//量
);
foreach ($json_data as $k => $v) {
$data['t'][$k] = $v[0];
$data['o'][$k] = $v[2];
$data['c'][$k] = $v[5];
$data['h'][$k] = $v[3];
$data['l'][$k] = $v[4];
$data['v'][$k] = $v[1];
}
exit(json_encode($data));
}
- GET
/time
返回服务器时间
public function time()
{
echo time();
}
完成以上4个接口就已经可以实现K线图了,如果需要更多的功能,请查询文档,按照需求添加接口。
配置数据源
var datafeed = new Datafeeds.UDFCompatibleDatafeed("https://mydeemo.com");
把url换成自己接口的地址就完成了
Previous Post
原生安卓管理后台应用又一神器 —— 冰箱
Next Post
safari浏览器输入法遮挡input解决方案
Or you can contact me by Email