gfrdegdergr
This commit is contained in:
@@ -117,4 +117,11 @@ if __name__ == '__main__':
|
||||
然后我需要预测出胜率,当前一笔是涨的,两笔后的结算价格大于当前一笔的结算价格,就是赚,
|
||||
当前一笔是跌的,两笔后的结算价格小于当前一笔的结算价格,就是赚,
|
||||
|
||||
这样就是当前价格从k线图中看,就是前一笔的开盘价和结盘价处于当前一笔的开盘价和结盘价中间包裹住的情况,然后需要查询出来
|
||||
这样就是当前价格从k线图中看,就是前一笔的开盘价和结盘价处于当前一笔的开盘价和结盘价中间包裹住的情况,然后需要查询出来
|
||||
|
||||
|
||||
ui:8000
|
||||
前端:15000
|
||||
一次性,
|
||||
|
||||
|
||||
|
||||
11
回测数据/test.py
11
回测数据/test.py
@@ -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))
|
||||
|
||||
119
回测数据/通过止盈止损策略.py
119
回测数据/通过止盈止损策略.py
@@ -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}')
|
||||
|
||||
Reference in New Issue
Block a user