- Charts and financial information provided by TradingView, a popular - charting & trading platform. Check out even more - advanced features - or grab charts for - your website. -
-From ee9e7c29a8ab92a1d75a583cf77f5fac73cbebb6 Mon Sep 17 00:00:00 2001 From: ddrwode <34234@3来 34> Date: Tue, 3 Feb 2026 17:49:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=20weex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weex/1.html | 212 ---- weex/backtest_trades.html | 7 - weex/database.db | Bin 147456 -> 0 bytes weex/优化开仓方向版本.py | 398 ------- weex/分析开单数据.py | 789 ------------- weex/抓取数据_1.py | 83 -- weex/抓取数据_15.py | 83 -- weex/抓取数据_1小时.py | 83 -- weex/最大回撤计算.py | 866 -------------- weex/框架.py | 327 ++++++ weex/读取数据库分析数据.py | 237 ---- ...读取数据库分析数据2.0-优化信号版-反向版.py | 331 ------ weex/读取数据库分析数据2.0-优化信号版.py | 409 ------- weex/读取数据库分析数据2.0-优化信号版2.0.py | 1011 ----------------- weex/读取数据库分析数据2.0.py | 312 ----- weex/读取数据库数据-1小时版.py | 259 ----- weex/读取数据库数据-1小时版,不判断信号.py | 265 ----- weex/读取文件分析.py | 244 ---- weex/调试信号检测.py | 90 -- 19 files changed, 327 insertions(+), 5679 deletions(-) delete mode 100644 weex/1.html delete mode 100644 weex/backtest_trades.html delete mode 100644 weex/database.db delete mode 100644 weex/优化开仓方向版本.py delete mode 100644 weex/分析开单数据.py delete mode 100644 weex/抓取数据_1.py delete mode 100644 weex/抓取数据_15.py delete mode 100644 weex/抓取数据_1小时.py delete mode 100644 weex/最大回撤计算.py create mode 100644 weex/框架.py delete mode 100644 weex/读取数据库分析数据.py delete mode 100644 weex/读取数据库分析数据2.0-优化信号版-反向版.py delete mode 100644 weex/读取数据库分析数据2.0-优化信号版.py delete mode 100644 weex/读取数据库分析数据2.0-优化信号版2.0.py delete mode 100644 weex/读取数据库分析数据2.0.py delete mode 100644 weex/读取数据库数据-1小时版.py delete mode 100644 weex/读取数据库数据-1小时版,不判断信号.py delete mode 100644 weex/读取文件分析.py delete mode 100644 weex/调试信号检测.py diff --git a/weex/1.html b/weex/1.html deleted file mode 100644 index 1d9a420..0000000 --- a/weex/1.html +++ /dev/null @@ -1,212 +0,0 @@ - - -
- - -- Charts and financial information provided by TradingView, a popular - charting & trading platform. Check out even more - advanced features - or grab charts for - your website. -
-bm!AR_L(Dp$!aZETE;HFyqHO#q09JMB22 zY6c2@FNB>jbcevjS&M8q9>4^?tQ z4#MAQ#@kF&0TFTg_yi?CixMbk;#`J;FaSiv?Pe@gasv{1YAvYA?|?|=-FD@AOSTuL z2Cs!S#wL5gA89?B3$xAky~=df@xJ%q6{f&wF5=cl%G6q(9}AkGstaCZx( `<+^Sc9CBNIymZV Mq2OuIo*Rz+BU!eGH zlKBvf0FWA)6VHwwE#&Z2bA}hV*nJFVqysb;S;e$zU`pBcZi$UUFGxq%g5QOKAIp$K zpIN?4?c`M}L08J(vaY?_H5c*eZClk&zC|x+!6oGe#seTCK6U7zk}pL~9z2A2Fy}Z; z-COh~mY+ZC$mUpMIqLUba0lkFIZR&zBINQOU6lMYu0M~yEGvNAM#INH5+dT0qlP(h za2aj93BhCdYLWmD5tmJ!sN_nVI<+w0%mL04Ktz0ES(YQ4T#_q?f6qL#k$nI}#K*U8 zaAZ@;VW@(sWY)8g2SmiB#ru@Jindl@mYBI%l?f5?v2!Ptybw`fP9gBkI0TUa#EQGO zSMmn#eH7TaDwms$l7H a=-adQfQa~T?ph@u#wuh^&~@9egd0FaeCS|-k}EJ6K_v`^ z*~gg;h=_~N9#e7!N304*@Hm3s0D}7ezyAI6|L3Ot>-+!y`TGC*sSl-ANy$walk)eJ zdMUq5K9{^Mc~tUWlj|hkm~=ELE2&S?fBmG>ps4ea2O qpBgKH={u}ktwsVV>w@!sKG9odwi#4u+eGC5%w zioZjMi1$n$uH*|Wk1C-~HGK0MAyRtnUOXuz+pCe!@vv8f$#v`p&!D+5cWqwen8Bq| zpV^aM$*BI!2@W)xi+E?zMzxmjHw$cmYOhMJNVn#CgowD{Oresi+Z0@C;OfloOLzo8 zthjTzBL~U0PW;9TegSe&3AuOxh=}utb+}08VXMP-bIe*HW&k37*fD9KCENWAQ;hz1 z^~@f`MNmC#F0$>5#)eGmu42}DRl G+xBOx zoj+&T{G8)8n=uB6h_{~J>Bzwy44dCt=MMCO6rL6Y#ELtWD)}=LR!+eeEJCkEHA0Ap zbBDH4a!Yn?2zM-Sw}}@3BH}F*`zU#ErVRiu7(!>gj(7+F5%K1%xRUcQ;{v`EF8C(& ztQP AR^vaxWbVWl`+v1NfMoM3q`;a?*Skp-f$| 0G#LBz`nu{!F zLbs4 ^2BQ#6@Dig0 znu~btzQrL^!aMODW>un?jp`zd5`c(!P5CAzH^Qo(7=qcA;LAS=vEmN u7eno&_7Z@I zc-hHyjvSn02WxVA9w8YJD{jBbk%LnH@)C;qBu7F-yma7kB^QUW zzlp8?$5#7CwO6a%S@l%aRaJ*p{if EvboJIisJ*1Ca+J4@4e_JP>){r{)1kN0y9ht+~q? zrcOUc5*@5Tk`^FM5%J>reO>O7NM;5XLk<%hV;usBh!^Gfj+{sWF;R^<{fUM)_4Wu6 zan_!hjvSn Sbj-vZOsE^NizW9 @v!Cm+>Ht%0K|&hZdP&yc54!sAg|ZPfQWcj{~{$ KF5T*h-LsH;%U3a zE154Q3{LV0yHTSAfQWeN@%c(Vz&TOQ4(@g#6&A}@+$QHD8D=DsNi5{X3?L$&(r>qt zx6ZXlFW`&IgU#$iY4|B2lo^~5a(EJ6E^j!@eSq~J+aE7LbCFG+(*{gA37?Deo53zA zy6iO(>%-X*J0ypmw6>qxnMYP3?abz!MspEQ+-cO#jVO$R9TaDwmI?q7@r2S@N?u9F z7ohwMrcw-u6}Mic z8v!EX@qKqFIS0jiu!l!jg5od$MEo$$90|!%r3Xh` zz=wyA6?p-g3v=x3bY;3QIZye9dd0R{WpfdaS<^$UJ&% l4_Fk{#h9osZ2NSPg1QUQryp4$O3CVU>$n9Kw z7RE$c4KIP_!W=%MOqnmD--%8bhQwoBw9y>(zdZkcL$!Fd@2b6A&A$Kd|E&KXO-qh# z59|NNvETiN`hRh9zvSro|DmU&e r|C{HAXeOBwj-OjP-2<| z{Co{rGa(`#+-tRxUk)oSdD0RRfAb*BAw 6L_Bc%Q6>K! zg|=x0Z QQY@uYlGRiY;DE hLzUbRb-($PqSt1~q2#G-fQY#Jg^5c3K X#kOGr1Q3RLJl_zYIvpr zW}&Is(VFiWG#6Q?Lj%B+hr_w&{?*|C-xtPRtcD!A 3z&Wt LjkFg zIpM;=u9h4|MUSw9u@^n_CD~|xSLTHCXNM{CAC2XR@=Cv9oW rvKQP4G zGjw<>mjOh?=Z0q~xhX@uJBQ&tS`CPZ&raT` Y!EU$6wYJ`4~hn0o{ZtMU1lD_%Z`v2eE{~yHu7ONY(EwwCldFr6l zFH>u!UY)W(WmZa;l=o8}PPsgJYx3CSe df!%?&}HV!{#d4y; #K((TDfx?`C@EVpp}T{hfQY#C zOm8LkWQR7u&*l?WA%IwM=eUx4NJ?z)R2^jxAQkPO*$5C39~(Md$(>kA#_76d%v=Ex zammCLO8yI7Hi4P@*E9 b^j zi1={fIVA_ovfXEMngfW451sC& hKj#X}}5 zc?`+ZS?vy^S%8T6;Dkj=9z$=;=E#jC84wX4Shz{aof)E=cgavnb<>U=1VqF|8w!>D z7lvl9bh|)#<`eoE5E1X+cS_0Mk@N%Wr7w5{Ktx=4s)Lfh<8Zg2&7a?6TX_Z$EABW* z$=~wuKQQW=a6|zS@xH-hmHZJ8+cvCXJo6E~1Bi(Cj-PjtOwr%z=f?CiAR^wgAX~}* zEirFj?$C~nzT`CfHvBH)-RpNL`73%Ootub_=@mdkylZc%lHCSLO9uTr^gAFT-dWyS z$uHHGMNV#7|A3 F7@EacC6c-&paQ^?z|5X3m>;G~7 ze?qKf?2XtxsTK14zj3MQ(fj}GdKvvh9*8^;c_8vY tY|ixmede@)h 5~e;hE;kY}W1>_Z<)`ZrjF@{kfs{JyTl>82gm%q0GP0 zNW^RU_jP2y8 JeUb%LaBgfD1@HJ7D#LKFOMZOP+h*#{~?#S^IIJM~CfR4qtBDW<(#LG*MII=$$ z!|i8EJV_-LpWLzL*K%H(5G!td!IAv{Bj-<}&2eV>fQWcmzaC1?hM)ah3rz9+Q9KeL zB3>GdRPsW^v%e7)ls}hwI3OZkGJA@Wry_p+CCun2v%mmE&TuYXvqZ@DlzVEP=P#ro znFu8x%|*7TU<;U+dj2fTHh&=xJSF^|nkR?OI##51PDa4{OZb^cw{X|oid&sgI}?wK ze{S*o*^D$J;USlv`+$geVc$+lHkfDrWRBiYjG7OKh!>b4N}f!jTrnRWepEFXkwu;l zh=}LU8n0wNtj%A{(HhT~21La3RxeQUbd-hu43>kV*$5C3&&|(K@=S)|Y!sgU7{&!4 zBA!#SN6BksU6IM@Z{QTlq|Ja>amy1*UO^kzve8lw3m`Ifv-`9S$#RXizmyTSHgs9) zZqG+^Vb1dVDRUXE%O;zTjbL*T&zu>kwJSLc>#(x 9`)^iRoz#lXp5D`z>zEsI`IT+cT8*_LhKtw$8NUoA+;?Ir0kgLTw1}Pv` VoPI#b0d1W}*ZFqMs_FTF{BJJBZ>#_S diff --git a/weex/优化开仓方向版本.py b/weex/优化开仓方向版本.py deleted file mode 100644 index 66fd2b7..0000000 --- a/weex/优化开仓方向版本.py +++ /dev/null @@ -1,398 +0,0 @@ -""" -量化交易回测系统 - 优化版 -功能:基于包住形态的交易信号识别和回测分析 -作者:量化交易团队 -版本:2.0 -""" - -import datetime -from typing import List, Dict, Tuple, Optional, Any -from dataclasses import dataclass -from loguru import logger -from peewee import fn -from models.weex import Weex15, Weex1 - - -# =============================================================== -# 📊 配置管理类 -# =============================================================== - -@dataclass -class BacktestConfig: - """回测配置类""" - # 交易参数 - take_profit: float = 8.0 # 止盈点数 - stop_loss: float = -1.0 # 止损点数 - contract_size: float = 10000 # 合约规模 - open_fee: float = 5.0 # 开仓手续费 - close_fee_rate: float = 0.0005 # 平仓手续费率 - - # 回测日期范围 - start_date: str = "2025-7-1" - end_date: str = "2025-7-31" - - # 信号参数 - enable_bear_bull_engulf: bool = True # 涨包跌信号 - enable_bull_bear_engulf: bool = True # 跌包涨信号 - - def __post_init__(self): - """验证配置参数""" - if self.take_profit <= 0: - raise ValueError("止盈点数必须大于0") - if self.stop_loss >= 0: - raise ValueError("止损点数必须小于0") - - -@dataclass -class TradeRecord: - """交易记录类""" - entry_time: datetime.datetime - exit_time: datetime.datetime - signal_type: str - direction: str - entry_price: float - exit_price: float - profit_loss: float - profit_amount: float - total_fee: float - net_profit: float - - -@dataclass -class SignalStats: - """信号统计类""" - signal_name: str - count: int = 0 - wins: int = 0 - total_profit: float = 0.0 - - @property - def win_rate(self) -> float: - """胜率计算""" - return (self.wins / self.count * 100) if self.count > 0 else 0.0 - - @property - def avg_profit(self) -> float: - """平均盈利""" - return self.total_profit / self.count if self.count > 0 else 0.0 - - -# =============================================================== -# 📊 数据获取模块 -# =============================================================== - -def get_data_by_date(model, date_str): - """按天获取指定表的数据""" - try: - target_date = datetime.datetime.strptime(date_str, '%Y-%m-%d') - except ValueError: - logger.error("日期格式不正确,请使用 YYYY-MM-DD 格式。") - return [] - - start_ts = int(target_date.timestamp() * 1000) - end_ts = int((target_date + datetime.timedelta(days=1)).timestamp() * 1000) - 1 - - query = (model - .select() - .where(model.id.between(start_ts, end_ts)) - .order_by(model.id.asc())) - - return [ - {'id': i.id, 'open': i.open, 'high': i.high, 'low': i.low, 'close': i.close} - for i in query - ] - - -def get_future_data_1min(start_ts, end_ts): - """获取指定时间范围内的 1 分钟数据""" - query = (Weex1 - .select() - .where(Weex1.id.between(start_ts, end_ts)) - .order_by(Weex1.id.asc())) - return [{'id': i.id, 'open': i.open, 'high': i.high, 'low': i.low, 'close': i.close} for i in query] - - -# =============================================================== -# 📈 信号判定模块 -# =============================================================== - -def is_bullish(c): return float(c['open']) < float(c['close']) - - -def is_bearish(c): return float(c['open']) > float(c['close']) - - -def check_signal(prev, curr): - """判断是否出现包住形态""" - p_open, p_close = float(prev['open']), float(prev['close']) - c_open, c_close = float(curr['open']), float(curr['close']) - - # 前跌后涨包住 -> 做多 - if is_bullish(curr) and is_bearish(prev) and c_open <= p_close and c_close >= p_open: - return "long", "bear_bull_engulf" - - # 前涨后跌包住 -> 做空 - if is_bearish(curr) and is_bullish(prev) and c_open >= p_close and c_close <= p_open: - return "short", "bull_bear_engulf" - - return None, None - - -# =============================================================== -# 💹 回测模拟模块(使用 1 分钟数据) -# =============================================================== - -# ---------- 替换后的 simulate_trade ---------- -def simulate_trade(direction, entry_price, entry_time, next_15min_time, tp=8, sl=-1): - """ - 返回 (exit_price, profit_diff, exit_time, exit_reason) - exit_reason: 'tp' (触及止盈并以tp价平仓), - 'sl' (触及止损并以sl价平仓), - 'open_tp' (开盘跳空并以开盘价止盈), - 'open_sl' (开盘跳空并以开盘价止损), - 'timeout' (到分析窗口末尾,用最后一根收盘价平仓) - 注意:sl 参数为负数(你的设定),但在计算止损价时已处理方向 - """ - future_candles = get_future_data_1min(entry_time, next_15min_time) - if not future_candles: - return None, 0.0, None, None - - # 计算目标价位(数值) - tp_price = entry_price + tp if direction == "long" else entry_price - tp - sl_price = entry_price + sl if direction == "long" else entry_price - sl # sl 为负数,long 情况为 entry + (负数) -> 小于 entry - - for candle in future_candles: - open_p = float(candle['open']) - high = float(candle['high']) - low = float(candle['low']) - ts = candle['id'] - - if direction == "long": - # 开盘跳空(以开盘价直接触及止盈/止损) - if open_p >= tp_price: - return open_p, open_p - entry_price, ts, 'open_tp' - if open_p <= sl_price: - return open_p, open_p - entry_price, ts, 'open_sl' - # 盘中触及 - if high >= tp_price: - return tp_price, tp, ts, 'tp' - if low <= sl_price: - return sl_price, sl, ts, 'sl' - else: # short - if open_p <= tp_price: - return open_p, entry_price - open_p, ts, 'open_tp' - if open_p >= sl_price: - return open_p, entry_price - open_p, ts, 'open_sl' - if low <= tp_price: - return tp_price, tp, ts, 'tp' - if high >= sl_price: - return sl_price, sl, ts, 'sl' - - # 未触发止盈止损,用最后一根收盘价平仓(视为 timeout) - final = future_candles[-1] - final_price = float(final['close']) - diff = (final_price - entry_price) if direction == "long" else (entry_price - final_price) - return final_price, diff, final['id'], 'timeout' - - -# ---------- 替换后的 backtest_single_position ---------- -def backtest_single_position(dates, tp, sl): - """ - 单笔持仓回测(增强版),加入连续3次止损触发反向开仓(转向单)逻辑 - - 只有当 exit_reason 属于 'sl' 或 'open_sl' 时才算“真实止损” - - 当连续真实止损计数达到 3 时,**下一笔**信号反向开仓(且该转向单不计入连续止损统计) - """ - all_data = [] - for date_str in dates: - all_data.extend(get_data_by_date(Weex15, date_str)) - all_data.sort(key=lambda x: x['id']) - - stats = { - "bear_bull_engulf": {"count": 0, "wins": 0, "total_profit": 0, "name": "涨包跌"}, - "bull_bear_engulf": {"count": 0, "wins": 0, "total_profit": 0, "name": "跌包涨"}, - } - - trades = [] - current_position = None # 当前持仓信息 dict or None - - consec_sl_count = 0 # 连续真实止损计数(只有 exit_reason 为 'sl' 或 'open_sl' 时 +1) - reverse_next_signal = False # 是否需要将下一笔信号取反(由连续3次止损触发) - ignore_next_result = False # 标记下一笔成交的结果是否要被忽略(用于转向单:转向单不计入连续止损计数,也不影响计数) - - for idx in range(1, len(all_data) - 1): - prev, curr = all_data[idx - 1], all_data[idx] - entry_candle = all_data[idx + 1] - - # 原始信号判定 - direction, signal = check_signal(prev, curr) - if not direction: - continue - - # 如果需要反向下一笔信号(由之前三次止损触发),则翻转 direction 并标记为转向单(只对这一次有效) - is_reversal_trade = False - if reverse_next_signal: - direction = 'long' if direction == 'short' else 'short' - is_reversal_trade = True - reverse_next_signal = False - ignore_next_result = True # 这笔成交的平仓结果不影响 consec_sl_count - - # 下一个 15 分钟K线的时间范围(用 idx+50 作为 15min 窗口近似) - next_15min_time = all_data[idx + 50]['id'] if idx + 50 < len(all_data) else all_data[-1]['id'] - entry_price = float(entry_candle['open']) - - # 如果已有持仓 - if current_position: - # 同向信号 -> 跳过(维持现有持仓) - if current_position['direction'] == direction: - continue - # 反向信号 -> 先按当前位置止盈止损平仓,再根据规则决定是否开新仓 - else: - exit_price, diff, exit_time, exit_reason = simulate_trade( - current_position['direction'], - current_position['entry_price'], - current_position['entry_time'], - entry_candle['id'], - tp=tp, - sl=sl - ) - if exit_price is not None: - trades.append({ - "entry_time": datetime.datetime.fromtimestamp(current_position['entry_time'] / 1000), - "exit_time": datetime.datetime.fromtimestamp(exit_time / 1000), - "signal": current_position['signal'], - "direction": "做多" if current_position['direction'] == "long" else "做空", - "entry": current_position['entry_price'], - "exit": exit_price, - "diff": diff, - "exit_reason": exit_reason, - "is_reversal_trade": current_position.get('is_reversal_trade', False) - }) - # 更新统计(只有非转向单会计入统计?按你原逻辑计入) - stats_key = 'bear_bull_engulf' if current_position['signal'] == '涨包跌' else 'bull_bear_engulf' - stats[stats_key]['count'] += 1 - stats[stats_key]['total_profit'] += diff - if diff > 0: - stats[stats_key]['wins'] += 1 - - # 根据 exit_reason 更新 consec_sl_count(但如果当时该仓为被标记为 ignore_result,则不变) - if not current_position.get('ignore_result', False): - if exit_reason in ('sl', 'open_sl'): - consec_sl_count += 1 - else: - consec_sl_count = 0 - - # 如果累计达到 3 次真实止损 -> 标记下一笔反向 - if consec_sl_count >= 3: - reverse_next_signal = True - consec_sl_count = 0 # 触发后清零(下一笔为转向单) - else: - # 如果这笔被标记为 ignore(通常是前面是转向单),则不影响计数 - pass - - current_position = None # 清空持仓 - - # 开新仓(注意:如果这笔是转向单,我们之前已经取反了 direction,并设置了 is_reversal_trade 和 ignore_next_result) - current_position = { - "direction": direction, - "signal": stats[signal]['name'], - "entry_price": entry_price, - "entry_time": entry_candle['id'], - "is_reversal_trade": is_reversal_trade, - "ignore_result": ignore_next_result # 如果为 True,则本仓平仓结果不计入 consec_sl_count - } - - # 如果我们标记了 ignore_next_result(说明这是转向单),只在刚开仓后清除标记,确保仅忽略这笔的**平仓**结果 - if ignore_next_result: - # 清掉,只有这笔仓的平仓结果需要被忽略(记录在 current_position 中), - # 后续在处理平仓时会读取 current_position['ignore_result'] 并决定是否影响计数 - ignore_next_result = False - - # 最后一笔持仓如果未平仓,用最后收盘价平掉 - if current_position: - exit_price, diff, exit_time, exit_reason = simulate_trade( - current_position['direction'], - current_position['entry_price'], - current_position['entry_time'], - all_data[-1]['id'], - tp=tp, - sl=sl - ) - if exit_price is not None: - trades.append({ - "entry_time": datetime.datetime.fromtimestamp(current_position['entry_time'] / 1000), - "exit_time": datetime.datetime.fromtimestamp(exit_time / 1000), - "signal": current_position['signal'], - "direction": "做多" if current_position['direction'] == "long" else "做空", - "entry": current_position['entry_price'], - "exit": exit_price, - "diff": diff, - "exit_reason": exit_reason, - "is_reversal_trade": current_position.get('is_reversal_trade', False) - }) - stats_key = 'bear_bull_engulf' if current_position['signal'] == '涨包跌' else 'bull_bear_engulf' - stats[stats_key]['count'] += 1 - stats[stats_key]['total_profit'] += diff - if diff > 0: - stats[stats_key]['wins'] += 1 - - # 最后一笔是否计入连续止损计数 - if not current_position.get('ignore_result', False): - if exit_reason in ('sl', 'open_sl'): - consec_sl_count += 1 - else: - consec_sl_count = 0 - if consec_sl_count >= 3: - # 可选择记录或告警,这里仅重置计数 - consec_sl_count = 0 - - return trades, stats - - - -# =============================================================== -# 🚀 启动主流程 -# =============================================================== - -if __name__ == '__main__': - dates = [f"2025-9-{i}" for i in range(1, 31)] - - trades, stats = backtest_single_position(dates, tp=50, sl=-10) - - logger.info("===== 每笔交易详情 =====") - for t in trades: - logger.info( - f"{t['entry_time']} {t['direction']}({t['signal']}) " - f"入场={t['entry']:.2f} 出场={t['exit']:.2f} 出场时间={t['exit_time']} " - f"差价={t['diff']:.2f}" - ) - - total_profit = sum(t['diff'] / t['entry'] * 10000 for t in trades) - total_fee = sum(5 + 10000 / t['entry'] * t['exit'] * 0.0005 for t in trades) - - print(f"\n一共交易笔数:{len(trades)}") - print(f"一共盈利:{total_profit:.2f}") - print(f"一共手续费:{total_fee:.2f}") - print(f"净利润:{total_profit - total_fee:.2f}") - print("\n===== 信号统计 =====") - - # =============================================================================================================================== - - # for i in range(1, 16): - # for i1 in range(1, 51): - # trades, stats = backtest_single_position(dates, tp=i1, sl=-i) - # - # total_profit = sum(t['diff'] / t['entry'] * 10000 for t in trades) - # total_fee = sum(5 + 10000 / t['entry'] * t['exit'] * 0.0005 for t in trades) - # - # if total_profit > total_fee * 0.1: - # print("\n===== 信号统计 =====") - # print(f"止盈:{i1}, 止损:{i}") - # print(f"\n一共交易笔数:{len(trades)}") - # print(f"一共盈利:{total_profit:.2f}") - # print(f"一共手续费:{total_fee:.2f}") - # print(f"净利润:{total_profit - total_fee * 0.1}") - -# 需要优化,目前有两种情况,第一种,同向,不如说上一单开单是涨,上一单还没有结束,当前信号来了,就不开单,等上一单到了上一单的止损位或者止盈位在平仓 -# 第二种,方向,上一单是涨,上一单还没有结束,当前信号来了,是跌,然后就按照现在这个信号要开仓的位置,平掉上一单,然后开一单方向的, -# 一笔中可能有好几次信号,都按照上面的规则去判断,要保证同一时间,只会有一笔持仓, -# 打印每笔的交易详细,如果一笔中同向,输入为一条交易记录 diff --git a/weex/分析开单数据.py b/weex/分析开单数据.py deleted file mode 100644 index dc45408..0000000 --- a/weex/分析开单数据.py +++ /dev/null @@ -1,789 +0,0 @@ -import re -from datetime import datetime - -log_data = """ -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 02:00:00号 做空(跌包涨) 入场=4474.69 出场=4476.69 出场时间=1756664100000 差价=-2.00 盈利=-4.47 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 03:15:00号 做空(跌包涨) 入场=4472.09 出场=4474.09 出场时间=1756668600000 差价=-2.00 盈利=-4.47 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 03:45:00号 做多(涨包跌) 入场=4474.15 出场=4472.15 出场时间=1756670400000 差价=-2.00 盈利=-4.47 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 04:00:00号 做空(跌包涨) 入场=4453.24 出场=4455.24 出场时间=1756671300000 差价=-2.00 盈利=-4.49 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 05:45:00号 做多(涨包跌) 入场=4473.88 出场=4471.88 出场时间=1756677600000 差价=-2.00 盈利=-4.47 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 06:45:00号 做空(跌包涨) 入场=4439.92 出场=4441.92 出场时间=1756681200000 差价=-2.00 盈利=-4.50 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 07:15:00号 做空(跌包涨) 入场=4432.11 出场=4402.11 出场时间=1756683000000 差价=30.00 盈利=67.69 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 08:15:00号 做空(跌包涨) 入场=4384.50 出场=4386.50 出场时间=1756686600000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 08:45:00号 做多(涨包跌) 入场=4393.52 出场=4391.52 出场时间=1756688400000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 09:15:00号 做空(跌包涨) 入场=4391.40 出场=4393.40 出场时间=1756690200000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 09:30:00号 做多(涨包跌) 入场=4405.79 出场=4403.79 出场时间=1756692000000 差价=-2.00 盈利=-4.54 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 12:30:00号 做空(跌包涨) 入场=4386.76 出场=4388.76 出场时间=1756702800000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 13:15:00号 做空(跌包涨) 入场=4372.37 出场=4374.37 出场时间=1756704600000 差价=-2.00 盈利=-4.57 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 13:30:00号 做多(涨包跌) 入场=4390.78 出场=4388.78 出场时间=1756706400000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.364 | INFO | __main__: :216 - 2025-09-01 14:30:00号 做多(涨包跌) 入场=4394.00 出场=4392.00 出场时间=1756710000000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 15:30:00号 做多(涨包跌) 入场=4419.10 出场=4449.10 出场时间=1756712700000 差价=30.00 盈利=67.89 开仓手续费=5u 平仓手续费=5.03 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 18:30:00号 做空(跌包涨) 入场=4429.31 出场=4399.31 出场时间=1756723500000 差价=30.00 盈利=67.73 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 19:15:00号 做空(跌包涨) 入场=4399.49 出场=4401.49 出场时间=1756728000000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 20:45:00号 做空(跌包涨) 入场=4395.36 出场=4397.36 出场时间=1756731600000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 21:45:00号 做空(跌包涨) 入场=4384.90 出场=4386.90 出场时间=1756735200000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 22:15:00号 做多(涨包跌) 入场=4396.00 出场=4394.00 出场时间=1756737000000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 22:45:00号 做空(跌包涨) 入场=4389.51 出场=4391.51 出场时间=1756738800000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-01 23:15:00号 做空(跌包涨) 入场=4381.89 出场=4351.89 出场时间=1756741500000 差价=30.00 盈利=68.46 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 00:30:00号 做空(跌包涨) 入场=4358.69 出场=4360.69 出场时间=1756745100000 差价=-2.00 盈利=-4.59 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 01:00:00号 做空(跌包涨) 入场=4353.30 出场=4323.30 出场时间=1756746900000 差价=30.00 盈利=68.91 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 02:15:00号 做多(涨包跌) 入场=4337.86 出场=4335.86 出场时间=1756751400000 差价=-2.00 盈利=-4.61 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 03:00:00号 做多(涨包跌) 入场=4345.08 出场=4343.08 出场时间=1756757700000 差价=-2.00 盈利=-4.60 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 03:45:00号 做多(涨包跌) 入场=4363.92 出场=4361.92 出场时间=1756756800000 差价=-2.00 盈利=-4.58 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 04:15:00号 做空(跌包涨) 入场=4358.28 出场=4328.28 出场时间=1756758600000 差价=30.00 盈利=68.83 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 07:00:00号 做多(涨包跌) 入场=4282.53 出场=4312.53 出场时间=1756770300000 差价=30.00 盈利=70.05 开仓手续费=5u 平仓手续费=5.04 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 08:45:00号 做空(跌包涨) 入场=4291.71 出场=4293.71 出场时间=1756774800000 差价=-2.00 盈利=-4.66 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 09:00:00号 做多(涨包跌) 入场=4302.49 出场=4300.49 出场时间=1756775700000 差价=-2.00 盈利=-4.65 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 09:30:00号 做多(涨包跌) 入场=4308.80 出场=4338.80 出场时间=1756777500000 差价=30.00 盈利=69.62 开仓手续费=5u 平仓手续费=5.03 -2025-10-11 14:00:27.365 | INFO | __main__: :216 - 2025-09-02 11:00:00号 做多(涨包跌) 入场=4359.11 出场=4389.11 出场时间=1756782900000 差价=30.00 盈利=68.82 开仓手续费=5u 平仓手续费=5.03 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 12:00:00号 做空(跌包涨) 入场=4365.21 出场=4367.21 出场时间=1756786500000 差价=-2.00 盈利=-4.58 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 12:15:00号 做多(涨包跌) 入场=4374.91 出场=4372.91 出场时间=1756789200000 差价=-2.00 盈利=-4.57 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 13:15:00号 做空(跌包涨) 入场=4377.72 出场=4379.72 出场时间=1756791000000 差价=-2.00 盈利=-4.57 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 14:45:00号 做多(涨包跌) 入场=4406.35 出场=4404.35 出场时间=1756796400000 差价=-2.00 盈利=-4.54 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 15:15:00号 做空(跌包涨) 入场=4391.65 出场=4393.65 出场时间=1756798200000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 15:45:00号 做空(跌包涨) 入场=4384.00 出场=4386.00 出场时间=1756800900000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 16:30:00号 做多(涨包跌) 入场=4394.20 出场=4392.20 出场时间=1756802700000 差价=-2.00 盈利=-4.55 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 17:00:00号 做空(跌包涨) 入场=4389.98 出场=4391.98 出场时间=1756804500000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 18:15:00号 做空(跌包涨) 入场=4394.30 出场=4364.30 出场时间=1756812600000 差价=30.00 盈利=68.27 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 19:00:00号 做多(涨包跌) 入场=4389.96 出场=4387.96 出场时间=1756811700000 差价=-2.00 盈利=-4.56 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 19:15:00号 做空(跌包涨) 入场=4375.68 出场=4345.68 出场时间=1756813500000 差价=30.00 盈利=68.56 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 20:00:00号 做空(跌包涨) 入场=4346.32 出场=4316.32 出场时间=1756816200000 差价=30.00 盈利=69.02 开仓手续费=5u 平仓手续费=4.97 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-02 20:45:00号 做空(跌包涨) 入场=4300.58 出场=4302.58 出场时间=1756818900000 差价=-2.00 盈利=-4.65 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.366 | INFO | __main__: :216 - 2025-09-03 00:30:00号 做空(跌包涨) 入场=4280.64 出场=4282.64 出场时间=1756831500000 差价=-2.00 盈利=-4.67 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.367 | INFO | __main__: :216 - 2025-09-03 01:15:00号 做空(跌包涨) 入场=4289.63 出场=4291.63 出场时间=1756834200000 差价=-2.00 盈利=-4.66 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 01:30:00号 做多(涨包跌) 入场=4307.71 出场=4305.71 出场时间=1756835100000 差价=-2.00 盈利=-4.64 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 02:00:00号 做多(涨包跌) 入场=4317.18 出场=4315.18 出场时间=1756836900000 差价=-2.00 盈利=-4.63 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 02:15:00号 做空(跌包涨) 入场=4293.70 出场=4295.70 出场时间=1756837800000 差价=-2.00 盈利=-4.66 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 03:00:00号 做多(涨包跌) 入场=4294.57 出场=4292.57 出场时间=1756840500000 差价=-2.00 盈利=-4.66 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 03:15:00号 做空(跌包涨) 入场=4271.11 出场=4273.11 出场时间=1756841400000 差价=-2.00 盈利=-4.68 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 03:45:00号 做多(涨包跌) 入场=4275.15 出场=4273.15 出场时间=1756843200000 差价=-2.00 盈利=-4.68 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 04:15:00号 做多(涨包跌) 入场=4294.16 出场=4324.16 出场时间=1756845000000 差价=30.00 盈利=69.86 开仓手续费=5u 平仓手续费=5.03 -2025-10-11 14:00:27.368 | INFO | __main__: :216 - 2025-09-03 05:15:00号 做多(涨包跌) 入场=4321.16 出场=4319.16 出场时间=1756848600000 差价=-2.00 盈利=-4.63 开仓手续费=5u 平仓手续费=5.00 -2025-10-11 14:00:27.368 | INFO | __main__: