添加本地数据源,以后就可以直接用本地数据了
This commit is contained in:
+42
-38
@@ -16,6 +16,25 @@
|
||||
<script defer src="{{ url_for('static', filename='js/indicators.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', filename='js/charts.js') }}"></script>
|
||||
<!-- TradingView Widget END -->
|
||||
<script>
|
||||
window.AVAILABLE_TIMEFRAMES = {{ timeframe_keys_json | safe }};
|
||||
window.DEFAULT_MAIN_TIMEFRAME = "{{ default_main_timeframe }}";
|
||||
window.DEFAULT_ELEMENT_TIMEFRAME = "{{ default_element_timeframe }}";
|
||||
window.timeframeToMs = function(tf) {
|
||||
if (!tf) return null;
|
||||
var unit = tf.slice(-1);
|
||||
var value = parseInt(tf.slice(0, -1), 10);
|
||||
if (isNaN(value)) return null;
|
||||
var unitMap = {
|
||||
m: 60 * 1000,
|
||||
h: 60 * 60 * 1000,
|
||||
d: 24 * 60 * 60 * 1000,
|
||||
w: 7 * 24 * 60 * 60 * 1000,
|
||||
M: 30 * 24 * 60 * 60 * 1000
|
||||
};
|
||||
return unitMap[unit] ? value * unitMap[unit] : null;
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
font-family: "Helvetica Neue", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
|
||||
@@ -765,7 +784,7 @@
|
||||
<label for="symbol" class="form-label">交易对:</label>
|
||||
<select id="symbol" class="form-select">
|
||||
{% for symbol in symbols %}
|
||||
<option value="{{ symbol }}" {% if symbol == 'BTC/USDT:USDT' %}selected{% endif %}>{{ symbol }}</option>
|
||||
<option value="{{ symbol }}" {% if symbol == default_symbol %}selected{% endif %}>{{ symbol }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
@@ -861,7 +880,7 @@
|
||||
<div class="form-check form-check-inline">
|
||||
<select id="timeframe" class="form-select form-select-sm me-2" style="width: 100px;">
|
||||
{% for value, label in timeframes.items() %}
|
||||
<option value="{{ value }}" {% if value == '5m' %}selected{% endif %}>{{ label }}</option>
|
||||
<option value="{{ value }}" {% if value == default_main_timeframe %}selected{% endif %}>{{ label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
@@ -899,7 +918,7 @@
|
||||
<div class="form-check form-check-inline">
|
||||
<select id="elementTimeframe" class="form-select form-select-sm me-2" style="width: 100px;">
|
||||
{% for value, label in timeframes.items() %}
|
||||
<option value="{{ value }}" {% if value == '1m' %}selected{% endif %}>{{ label }}</option>
|
||||
<option value="{{ value }}" {% if value == default_element_timeframe %}selected{% endif %}>{{ label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
@@ -1144,11 +1163,7 @@
|
||||
// 周期变化时,自动填充当前时间回溯300根K线的时间范围
|
||||
$('#trendTimeframe').on('change', function(){
|
||||
const tf = $(this).val();
|
||||
const tfToMs = {
|
||||
'1m': 60*1000, '5m': 5*60*1000, '15m': 15*60*1000, '30m': 30*60*1000,
|
||||
'1h': 60*60*1000, '4h': 4*60*60*1000, '1d': 24*60*60*1000
|
||||
};
|
||||
const step = tfToMs[tf] || (60*60*1000);
|
||||
const step = window.timeframeToMs(tf) || (60*60*1000);
|
||||
const now = new Date();
|
||||
const endMs = now.getTime();
|
||||
const startMs = endMs - 300 * step;
|
||||
@@ -1177,11 +1192,7 @@
|
||||
|
||||
// 前端必须提供时间范围:若为空,自动以当前时间回溯300根
|
||||
if (!start || !end) {
|
||||
const tfToMs = {
|
||||
'1m': 60*1000, '5m': 5*60*1000, '15m': 15*60*1000, '30m': 30*60*1000,
|
||||
'1h': 60*60*1000, '4h': 4*60*60*1000, '1d': 24*60*60*1000
|
||||
};
|
||||
const step = tfToMs[timeframe] || (60*60*1000);
|
||||
const step = window.timeframeToMs(timeframe) || (60*60*1000);
|
||||
const now = Date.now();
|
||||
const startMsAuto = now - 300 * step;
|
||||
const toLocal = (ms) => new Date(ms - new Date(ms).getTimezoneOffset()*60000).toISOString().slice(0,16);
|
||||
@@ -1777,30 +1788,17 @@
|
||||
|
||||
// 比较两个时间周期的大小
|
||||
function compareTimeframes(tf1, tf2) {
|
||||
const tfValues = {
|
||||
'1m': 1,
|
||||
'3m': 3,
|
||||
'5m': 5,
|
||||
'15m': 15,
|
||||
'30m': 30,
|
||||
'1h': 60,
|
||||
'2h': 120,
|
||||
'4h': 240,
|
||||
'6h': 360,
|
||||
'8h': 480,
|
||||
'12h': 720,
|
||||
'1d': 1440,
|
||||
'3d': 4320,
|
||||
'1w': 10080,
|
||||
'1M': 43200
|
||||
};
|
||||
|
||||
return tfValues[tf1] - tfValues[tf2];
|
||||
const v1 = window.timeframeToMs(tf1);
|
||||
const v2 = window.timeframeToMs(tf2);
|
||||
if (v1 === null || v2 === null) {
|
||||
return 0;
|
||||
}
|
||||
return v1 - v2;
|
||||
}
|
||||
|
||||
// 设置比主周期小的最大周期
|
||||
function setSmallestLargerTimeframe(mainTimeframe) {
|
||||
const timeframes = ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1M'];
|
||||
const timeframes = window.AVAILABLE_TIMEFRAMES || [];
|
||||
const mainIndex = timeframes.indexOf(mainTimeframe);
|
||||
|
||||
if (mainIndex > 0) {
|
||||
@@ -1812,7 +1810,7 @@
|
||||
|
||||
// 设置小于或等于主周期的时间周期
|
||||
function setSmallerOrEqualTimeframe(mainTimeframe) {
|
||||
const timeframes = ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1M'];
|
||||
const timeframes = window.AVAILABLE_TIMEFRAMES || [];
|
||||
const mainIndex = timeframes.indexOf(mainTimeframe);
|
||||
|
||||
// 默认选择相同的时间周期
|
||||
@@ -1973,9 +1971,9 @@
|
||||
symbol = $('#astockSymbol').val() || '000001';
|
||||
}
|
||||
|
||||
const timeframe = $('#timeframe').val() || '5m';
|
||||
const timeframe = $('#timeframe').val() || window.DEFAULT_MAIN_TIMEFRAME || '5m';
|
||||
const timezone = $('#timezone').val() || 'Asia/Shanghai';
|
||||
const elementTimeframe = $('#elementTimeframe').val() || '1m';
|
||||
const elementTimeframe = $('#elementTimeframe').val() || window.DEFAULT_ELEMENT_TIMEFRAME || '1m';
|
||||
|
||||
// 确保时区参数有效
|
||||
console.log('更新图表使用时区:', timezone);
|
||||
@@ -7166,8 +7164,14 @@
|
||||
// 初始化交易对下拉菜单
|
||||
$('#symbol').val('BTC/USDT:USDT');
|
||||
$('#astockSymbol').val('000001');
|
||||
$('#timeframe').val('5m');
|
||||
$('#elementTimeframe').val('1m');
|
||||
const mainDefault = window.DEFAULT_MAIN_TIMEFRAME || $('#timeframe option:first').val();
|
||||
const elementDefault = window.DEFAULT_ELEMENT_TIMEFRAME || $('#elementTimeframe option:first').val();
|
||||
if (mainDefault) {
|
||||
$('#timeframe').val(mainDefault);
|
||||
}
|
||||
if (elementDefault) {
|
||||
$('#elementTimeframe').val(elementDefault);
|
||||
}
|
||||
|
||||
// 测试打印时区偏移量
|
||||
console.log('当前时区偏移量 (UTC+8):', getTimezoneOffset('Asia/Shanghai'));
|
||||
|
||||
Reference in New Issue
Block a user