-
Notifications
You must be signed in to change notification settings - Fork 1
/
检查代码运行前的K线中 如果过去一段时间 K线最大波动率小于0.2% 则不开仓交易 直到波动率大于这一水平 再进行接下来的开仓操作.py
58 lines (45 loc) · 2.15 KB
/
检查代码运行前的K线中 如果过去一段时间 K线最大波动率小于0.2% 则不开仓交易 直到波动率大于这一水平 再进行接下来的开仓操作.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 添加一个计算过去K线波动率的函数,并在主函数中增加相关逻辑。
# 计算过去K线波动率
def calculate_kline_volatility(close_prices, period):
"""
计算K线波动率
:param close_prices: 收盘价序列
:param period: 计算波动率所用的时间窗口大小
:return: 价格波动率
"""
try:
# 计算每个周期内价格变化率
price_returns = np.abs(np.diff(close_prices)) / close_prices[:-1]
# 计算波动率
volatility = np.sqrt(np.sum(price_returns ** 2) / (period - 1)) * np.sqrt(period)
except Exception as e:
# 发生错误时返回0
print(f'计算波动率时发生错误: {e}')
volatility = 0.0
# 返回波动率
return volatility
# 实例化OKXTrader类
trader = OKXTrader(api_key, secret_key, passphrase)
# 获取历史K线数据
times, high_prices, low_prices, close_prices = trader.get_historical_klines(symbol, interval, limit=200)
# 计算过去K线波动率
kline_volatility = calculate_kline_volatility(close_prices, period=20)
# 如果波动率小于0.2%,则不开仓交易,直到波动率大于这一水平再进行接下来的开仓操作
if kline_volatility > 0.002:
# 计算超级趋势指标
upper_bound, lower_bound, buy_signal, sell_signal = trader.calculate_super_trend(close_prices, period=10, multiplier=3)
# 执行交易策略
if buy_signal or sell_signal:
# 获取最新成交价作为下单价格
price = float(trader.future_api.get_last_trade(symbol)['price'])
# 计算下单数量
account_data = trader.account_api.get_account_info()
available_balance = float(account_data['data'][0]['details']['available_balance'])
quantity = min(quantity, int(available_balance / price))
# 执行交易策略并打印订单结果
order_result = trader.execute_trade_strategy(symbol, quantity, price, buy_signal, sell_signal, stop_loss_pct, take_profit_pct)
print(f'执行交易策略,订单结果: {order_result}')
else:
print('没有发出买入或卖出信号')
else:
print('过去K线波动率小于0.2%,不开仓交易')