用python写一段QMT代码,实现股价下跌偏离20日均线10%时买入,上涨过程回调跌破5日均线时卖出的功能
时间: 2024-05-24 16:12:16 浏览: 176
As an AI language model, I do not have emotions and opinions as humans do. "Null" is a term used in programming to represent a value that is undefined or unknown.
相关问题
根据下列条件用python写一段完善的运行在qmt上的代码:买入条件:可转债溢价率小于20且五分钟周期的kdj的k大于d且五分钟周期时k线突破五日均线且大于十日二十日均线且换手率大于上一周期三倍且。卖出条件:五分钟周期下K线小于十日均线
首先需要安装 QMT SDK,可以通过以下命令进行安装:
```
!pip install qmt-sdk
```
然后,可以使用以下代码框架实现该策略:
```python
import time
from qmt import QMTClient
from qmt.utils import get_current_minute, get_previous_minute
# 初始化 QMT 客户端
client = QMTClient(access_key='your_access_key', secret_key='your_secret_key', passphrase='your_passphrase')
# 交易对名称
symbol = 'your_symbol'
# 定义买入条件函数
def buy_condition():
# 获取 K 线数据
klines = client.get_klines(symbol=symbol, interval='5m', limit=7)
# 获取转债溢价率
premium_ratio = client.get_premium_ratio(symbol=symbol)
# 获取换手率
turnover_rate = client.get_turnover_rate(symbol=symbol, interval='5m')
# 获取五日均线、十日均线、二十日均线
ma5 = sum(klines[-6:-1]['close']) / 5
ma10 = sum(klines[-11:-1]['close']) / 10
ma20 = sum(klines[-21:-1]['close']) / 20
# 获取当前 K 线的 K/D 值
current_k, current_d, _ = client.get_kdj(symbol=symbol, interval='5m', limit=2)
# 判断是否符合买入条件
if premium_ratio < 20 \
and current_k > current_d \
and klines[-1]['close'] > ma5 > ma10 > ma20 \
and turnover_rate > klines[-2]['turnover_rate'] * 3:
return True
else:
return False
# 定义卖出条件函数
def sell_condition():
# 获取 K 线数据
klines = client.get_klines(symbol=symbol, interval='5m', limit=7)
# 获取十日均线
ma10 = sum(klines[-11:-1]['close']) / 10
# 获取当前 K 线的 K/D 值
current_k, _, _ = client.get_kdj(symbol=symbol, interval='5m', limit=2)
# 判断是否符合卖出条件
if current_k < ma10:
return True
else:
return False
# 主循环
while True:
# 获取当前时间
current_time = get_current_minute()
# 获取上一个时间点
previous_time = get_previous_minute(current_time)
# 判断是否为五分钟的倍数时间点
if current_time.minute % 5 == 0:
# 判断是否符合买入条件
if buy_condition():
# 下单买入
client.create_order(symbol=symbol, side='buy', type='market', size='0.01')
print(f'[{current_time}] 买入')
# 判断是否符合卖出条件
if sell_condition():
# 下单卖出
client.create_order(symbol=symbol, side='sell', type='market', size='0.01')
print(f'[{current_time}] 卖出')
# 等待到下一个时间点
while get_current_minute() == current_time:
time.sleep(1)
```
需要注意的是,该代码只是一个示例,实际使用时需要根据自己的需求进行修改和完善,并且需要根据实际情况调整交易对名称、下单数量等参数。同时,也需要注意交易风险,谨慎操作。
请帮忙用python代码写一个带5%止损及20%止盈的QMT实盘交易事件网格策略,触发事件的条件是:1、K线阳包阴买入,2、K线阴包阳卖出
以下是一个简单的带5%止损及20%止盈的QMT实盘交易事件网格策略,它会在满足触发条件时自动买入或卖出,同时设置止损和止盈:
```
import qmt
# 连接QMT实盘交易API
qmt.connect("your_api_key", "your_secret_key")
# 定义止损和止盈比例
stop_loss_ratio = 0.05
take_profit_ratio = 0.2
# 定义网格交易策略
def grid_strategy(kline):
# 判断K线阳包阴的情况
if kline.close > kline.open and kline.close < kline.high:
# 计算买入价格和止损/止盈价格
buy_price = kline.close
stop_loss_price = buy_price * (1 - stop_loss_ratio)
take_profit_price = buy_price * (1 + take_profit_ratio)
# 下单买入
qmt.buy("symbol", "amount", buy_price)
# 设置止损和止盈
qmt.stop_loss("symbol", stop_loss_price)
qmt.take_profit("symbol", take_profit_price)
# 判断K线阴包阳的情况
elif kline.close < kline.open and kline.close > kline.low:
# 计算卖出价格和止损/止盈价格
sell_price = kline.close
stop_loss_price = sell_price * (1 + stop_loss_ratio)
take_profit_price = sell_price * (1 - take_profit_ratio)
# 下单卖出
qmt.sell("symbol", "amount", sell_price)
# 设置止损和止盈
qmt.stop_loss("symbol", stop_loss_price)
qmt.take_profit("symbol", take_profit_price)
# 订阅K线数据,并执行网格交易策略
qmt.subscribe_kline("symbol", "interval", grid_strategy)
```
需要注意的是,这段代码仅提供一个简单的示例,实际应用中还需要考虑更多的因素,比如交易手续费、资金管理、市场风险等。同时,也需要根据实际情况调整止损和止盈比例,以及其他参数。
阅读全文