gfrdegdergr

This commit is contained in:
27942
2025-09-30 18:36:57 +08:00
parent 5f0c14c9ef
commit dea758323f
3 changed files with 80 additions and 59 deletions

View File

@@ -117,4 +117,11 @@ if __name__ == '__main__':
然后我需要预测出胜率,当前一笔是涨的,两笔后的结算价格大于当前一笔的结算价格,就是赚,
当前一笔是跌的,两笔后的结算价格小于当前一笔的结算价格,就是赚,
这样就是当前价格从k线图中看就是前一笔的开盘价和结盘价处于当前一笔的开盘价和结盘价中间包裹住的情况然后需要查询出来
这样就是当前价格从k线图中看就是前一笔的开盘价和结盘价处于当前一笔的开盘价和结盘价中间包裹住的情况然后需要查询出来
ui:8000
前端15000
一次性,

View File

@@ -1,5 +1,6 @@
print(4000 * 1.001)
print(3954.11 * 1.002)
print(4000 * 0.998)
print(4000 * 0.998)
print(4000 * 0.998)
print(10000 * 0.0005)
print(10000 * 0.001)
print(40)
print(100 + 350 - (2120 * 0.1) + (2120 * 0.9))

View File

@@ -1,4 +1,8 @@
import datetime
import itertools
import random
import time
import requests
from loguru import logger
@@ -21,13 +25,13 @@ headers = {
}
def fetch_kline(day: int):
def fetch_kline(yue, day: int, ):
"""
获取某一天的分钟K线数据
:param day: 日期中的“日”比如27表示2025-09-27
:return: 按时间顺序排序后的K线数据
"""
time_ser = datetime.datetime(2025, 9, day)
time_ser = datetime.datetime(2025, yue, day)
# 当天 0点
start_of_day = time_ser.replace(hour=0, minute=0, second=0, microsecond=0)
@@ -84,24 +88,14 @@ def backtest_kline(sorted_data, day):
):
trade_signal = "long"
# ======================== 做空条件 ========================
elif (
curr_close < curr_open and prev_close < prev_open and # 连续两根阴线
curr_open > prev_open and curr_close < prev_close # 当前包住前一根
):
trade_signal = "short"
# ======================== 执行交易 ========================
if trade_signal:
signals += 1
# 设定止盈止损
if trade_signal == "long":
take_profit = entry_open * 1.002
stop_loss = entry_open * 0.998
else:
take_profit = entry_open * 0.9985
stop_loss = entry_open * 1.001
take_profit = entry_open + 4
stop_loss = entry_open - 2
exit_price = None # 出场价格
exit_time = None # 出场时间
@@ -119,15 +113,6 @@ def backtest_kline(sorted_data, day):
exit_price = stop_loss
exit_time = future["id"]
break
else: # short
if low <= take_profit: # 触发止盈
exit_price = take_profit
exit_time = future["id"]
break
if high >= stop_loss: # 触发止损
exit_price = stop_loss
exit_time = future["id"]
break
# 如果没触发止盈止损,用最后一根收盘价离场
if exit_price is None:
@@ -159,45 +144,73 @@ if __name__ == '__main__':
zh_project = 0
all_trades = []
total_profit = 0 # 总利润
total_handling_fee = 0 # 总手续费
# 回测 9月27日的数据
for i in range(27, 28):
sorted_data = fetch_kline(i)
for i, j in itertools.product(range(9, 10), range(1, 30)):
sorted_data = fetch_kline(i, j)
signals, wins, lig_price, low_price, trades = backtest_kline(sorted_data, i)
# 输出当天结果
if signals > 0:
logger.info(
f"日期:{i}号,信号数={signals}, 胜率={wins / signals * 100:.2f}%"
f"上涨方向:{lig_price:.2f},下跌方向:{low_price:.2f}"
f"综合价格:{(lig_price + low_price):.2f}"
)
else:
logger.info(f"日期:{i}号,没有信号")
# # 输出当天结果
# if signals > 0:
# logger.info(
# f"日期:{i}号,信号数={signals}, 胜率={wins / signals * 100:.2f}%"
# f"上涨方向:{lig_price:.2f},下跌方向:{low_price:.2f}"
# f"综合价格:{(lig_price + low_price):.2f}"
# )
# else:
# logger.info(f"日期:{i}号,没有信号")
zh_project += (lig_price + low_price)
all_trades.extend(trades)
# ======================== 汇总输出 ========================
logger.success(f"综合价格:{zh_project:.2f}")
n = n1 = 0 # n: 总盈利, n1: 总手续费
for trade in trades:
date, time_str, direction, entry, exit, diff, end_time = trade
logger.info("===== 每笔交易详情 =====")
n = n1 = 0 # n: 总盈利, n1: 总手续费
for trade in all_trades:
date, time_str, direction, entry, exit, diff, end_time = trade
fee_open = 5 # 固定开仓手续费
fee_close = 10000 / entry * exit * 0.0005 # 平仓手续费
fee_open = 5 # 固定开仓手续费
fee_close = 10000 / entry * exit * 0.0005 # 平仓手续费
logger.info(
f"{date} {time_str} {direction} 入场={entry:.2f} 出场={exit:.2f} 出场时间:{end_time} "
f"差价={diff:.2f} 盈利:{diff / entry * 10000:.2f} "
f"开仓手续费:{fee_open:.2f} 平仓手续费:{fee_close:.2f}"
)
logger.info(
f"{date} {time_str} {direction} 入场={entry:.2f} 出场={exit:.2f} 出场时间:{end_time} "
f"差价={diff:.2f} 盈利:{diff / entry * 10000:.2f} "
f"开仓手续费:{fee_open:.2f} 平仓手续费:{fee_close:.2f}"
)
n1 += fee_open + fee_close
n += (diff / entry) * 10000
n1 += fee_open + fee_close
n += (diff / entry) * 10000
# 输出汇总结果
logger.warning(f'一共笔数:{len(trades)} 一共盈利:{n:.2f} 一共手续费:{n1:.2f}')
# 输出汇总结果
print(f'一共笔数:{len(all_trades)}')
print(f"一共盈利:{n:.2f}")
print(f'一共手续费:{n1:.2f}')
total_profit += n
total_handling_fee += n1
# time.sleep(random.random() * 2)
print(f"总利润:{total_profit} 总手续费:{total_handling_fee}")
# # ======================== 汇总输出 ========================
# logger.success(f"综合价格:{zh_project:.2f}")
#
# logger.info("===== 每笔交易详情 =====")
# n = n1 = 0 # n: 总盈利, n1: 总手续费
# for trade in all_trades:
# date, time_str, direction, entry, exit, diff, end_time = trade
#
# fee_open = 5 # 固定开仓手续费
# fee_close = 10000 / entry * exit * 0.0005 # 平仓手续费
#
# logger.info(
# f"{date} {time_str} {direction} 入场={entry:.2f} 出场={exit:.2f} 出场时间:{end_time} "
# f"差价={diff:.2f} 盈利:{diff / entry * 10000:.2f} "
# f"开仓手续费:{fee_open:.2f} 平仓手续费:{fee_close:.2f}"
# )
#
# n1 += fee_open + fee_close
# n += (diff / entry) * 10000
#
# # 输出汇总结果
# print(f'一共笔数:{len(all_trades)}')
# print(f"一共盈利:{n:.2f}")
# print(f'一共手续费:{n1:.2f}')