Changeset 3346660
- Timestamp:
- 08/18/2025 10:00:46 PM (7 months ago)
- Location:
- tradejournal/trunk
- Files:
-
- 4 edited
-
includes/csv-import.php (modified) (2 diffs)
-
includes/logs/plugin-log.log (modified) (1 diff)
-
readme.txt (modified) (3 diffs)
-
tradejournal.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
tradejournal/trunk/includes/csv-import.php
r3205179 r3346660 50 50 $post_id = wp_insert_post($post_data); 51 51 52 // Check if "Merge Accounts" is enabled53 $merge_accounts = get_option('tradejournal_merge_accounts', 0);54 55 52 if ($post_id) { 56 53 $trade_data = []; 57 54 58 // Process each row and merge trades if necessary 59 foreach ($csv_data as $index => $row) { 60 if ($index == 0) continue; // Skip header row 61 62 $trade = array_combine($headers, $row); 63 64 $instrument = isset($trade['instrument']) ? esc_html($trade['instrument']) : ''; 65 $account = isset($trade['account']) ? explode('!', $trade['account'])[0] : ''; 66 67 68 $entry_time = isset($trade['entry time']) ? esc_html($trade['entry time']) : ''; 69 70 // Extract only the time part (e.g., '2:30 PM' from '2024-10-02 14:30') 71 if (!empty($entry_time)) { 72 $timestamp = strtotime($entry_time); // Convert to timestamp 73 $entry_time = gmdate('g:i A', $timestamp); // Format to 12-hour time with AM/PM 74 } 75 76 77 $qty = isset($trade['qty']) ? intval($trade['qty']) : 1; 78 $entry_price = isset($trade['entry price']) ? floatval($trade['entry price']) : 0; 79 $exit_price = isset($trade['exit price']) ? floatval($trade['exit price']) : 0; 80 $side = isset($trade['market pos.']) ? strtolower($trade['market pos.']) : ''; 81 82 // Retrieve instrument settings from plugin options 83 $multipliers_and_commissions = get_option('tradejournal_instrument_multipliers', []); 84 85 // Default to empty array if settings are not found 86 if (empty($multipliers_and_commissions)) { 87 $multipliers_and_commissions = [ 88 'ES' => ['multiplier' => 50, 'commission' => 5], 89 'MES' => ['multiplier' => 5, 'commission' => 0.5], 90 ]; 91 } 92 93 // Set instrument multiplier and commission dynamically 94 $multiplier = 1; // Default multiplier 95 $commission = 0; // Default commission 96 97 foreach ($multipliers_and_commissions as $key => $values) { 98 if (strpos($instrument, $key) === 0) { 99 $multiplier = $values['multiplier']; 100 $commission = $values['commission']; 55 // Normalize headers to lowercase/trim 56 $headers = array_map(function ($h) { 57 return strtolower(trim((string)$h)); 58 }, $csv_data[0] ?? []); 59 $rows = array_slice($csv_data, 1); 60 61 // Helper: safe row map by header name 62 $map_row = function (array $headers, array $row) { 63 $out = []; 64 foreach ($headers as $i => $h) { 65 $out[$h] = isset($row[$i]) ? trim((string)$row[$i]) : ''; 66 } 67 return $out; 68 }; 69 70 // Detect formats 71 $has_ex_flag = in_array('e/x', $headers, true); // NT8 split row format 72 $has_entry_col = in_array('entry time', $headers, true); // summary/combined format 73 74 // Merge behavior 75 // Merge behavior 76 $merge_accounts = (int) get_option('tradejournal_merge_accounts', 0); 77 // If the Free version flag is present anywhere in the runtime, force disable merging 78 if (defined('TJWP_FREE_VERSION') && TJWP_FREE_VERSION) { 79 $merge_accounts = 0; 80 } 81 $merge_time_tolerance = (int) get_option('tradejournal_merge_time_tolerance', 10); // seconds 82 $merge_round_to_minute = (int) get_option('tradejournal_merge_round_to_minute', 0); // 1 = round to minute 83 84 // Instrument settings (fallback defaults) 85 $instrument_opts = get_option('tradejournal_instrument_multipliers', []); 86 if (empty($instrument_opts)) { 87 $instrument_opts = [ 88 'ES' => ['multiplier' => 50, 'commission' => 5], 89 'MES' => ['multiplier' => 5, 'commission' => 0.5], 90 'NQ' => ['multiplier' => 20, 'commission' => 5], 91 'MNQ' => ['multiplier' => 2, 'commission' => 0.5], 92 ]; 93 } 94 $get_mult_comm = function ($instrument) use ($instrument_opts) { 95 $mult = 1.0; 96 $comm = 0.0; 97 foreach ($instrument_opts as $sym => $vals) { 98 if (stripos($instrument, $sym) === 0) { 99 $mult = isset($vals['multiplier']) ? (float)$vals['multiplier'] : $mult; 100 $comm = isset($vals['commission']) ? (float)$vals['commission'] : $comm; 101 101 break; 102 102 } 103 103 } 104 105 // Calculate P&L based on side, multiplier, and subtract commission 106 $pnl = 0; 107 if ($entry_price && $exit_price) { 108 if ($side === 'long') { 109 $pnl = ($exit_price - $entry_price) * $qty * $multiplier; 110 } elseif ($side === 'short') { 111 $pnl = ($entry_price - $exit_price) * $qty * $multiplier; 112 } 113 // Subtract commission 114 $pnl -= $commission; 115 $pnl = number_format($pnl, 2); 116 } 117 118 // Check if we should merge accounts 119 if ($merge_accounts == 1 && !defined('TJWP_FREE_VERSION')) { 120 $found_match = false; 121 foreach ($trade_data as &$existing_trade) { 122 if ($existing_trade['Instrument'] === $instrument && $existing_trade['Entry Time'] === $entry_time) { 123 // Merge accounts, qty, and P&L 124 $existing_accounts = explode(', ', $existing_trade['Account']); 125 if (!in_array($account, $existing_accounts)) { 126 $existing_accounts[] = $account; 127 } 128 129 // Remove duplicates and sort accounts alphabetically 130 $existing_accounts = array_unique($existing_accounts); 131 sort($existing_accounts); 132 133 // Join accounts back into a string 134 $existing_trade['Account'] = implode(', ', $existing_accounts); 135 136 $existing_trade['Qty'] += $qty; 137 $existing_trade['P&L'] += $pnl; 138 $found_match = true; 104 return [$mult, $comm]; 105 }; 106 107 // Common helpers 108 $fmt_time = function ($ts) { 109 return date('g:i:s A', (int)$ts); 110 }; 111 $floor_min = function ($ts) { 112 $ts = (int)$ts; 113 return $ts - ($ts % 60); 114 }; 115 116 // === Path A: NT8 split entry/exit (robust pairing with partials) === 117 if ($has_ex_flag) { 118 $entries = []; 119 $exits = []; 120 121 foreach ($rows as $row) { 122 if (!is_array($row) || empty($row)) continue; 123 $g = $map_row($headers, $row); 124 125 $instrument = $g['instrument'] ?? ''; 126 if ($instrument === '') continue; 127 $accountRaw = $g['account'] ?? ''; 128 $account = $accountRaw ? explode('!', $accountRaw)[0] : ''; 129 if ($account === '') $account = $accountRaw; 130 131 $qty = (int)($g['quantity'] ?? 0); 132 $price = (float)($g['price'] ?? 0); 133 $action = strtolower($g['action'] ?? ''); 134 $flag = strtolower($g['e/x'] ?? ''); // 'entry' or 'exit' 135 $pos = strtolower($g['position'] ?? ''); 136 $ts = isset($g['time']) && $g['time'] !== '' ? strtotime($g['time']) : 0; 137 if ($ts <= 0 || $qty <= 0) continue; 138 139 // Derive side 140 $side = ''; 141 if ($flag === 'entry') { 142 $side = ($action === 'buy') ? 'long' : (($action === 'sell') ? 'short' : $side); 143 if ($side === '') $side = (strpos($pos, 'l') !== false) ? 'long' : ((strpos($pos, 's') !== false) ? 'short' : ''); 144 } elseif ($flag === 'exit') { 145 $side = ($action === 'sell') ? 'long' : (($action === 'buy') ? 'short' : $side); 146 if ($side === '') $side = (strpos($pos, 'l') !== false) ? 'long' : ((strpos($pos, 's') !== false) ? 'short' : ''); 147 } 148 if ($side === '') continue; 149 150 if ($flag === 'entry') { 151 $entries[] = [ 152 'Instrument' => $instrument, 153 'Account' => $account, 154 'Qty' => $qty, 155 'Entry Price' => $price, 156 'ts' => $ts, 157 'Side' => $side, 158 'rem' => $qty, 159 ]; 160 } elseif ($flag === 'exit') { 161 $exits[] = [ 162 'Instrument' => $instrument, 163 'Account' => $account, 164 'Qty' => $qty, 165 'Exit Price' => $price, 166 'ts' => $ts, 167 'Side' => $side, 168 'rem' => $qty, 169 ]; 170 } 171 } 172 173 usort($entries, fn($a, $b) => $a['ts'] <=> $b['ts']); 174 usort($exits, fn($a, $b) => $a['ts'] <=> $b['ts']); 175 176 $slices = []; 177 for ($ei = 0; $ei < count($entries); $ei++) { 178 if (($entries[$ei]['rem'] ?? 0) <= 0) continue; 179 for ($xi = 0; $xi < count($exits) && ($entries[$ei]['rem'] ?? 0) > 0; $xi++) { 180 if (($exits[$xi]['rem'] ?? 0) <= 0) continue; 181 $e = $entries[$ei]; 182 $x = $exits[$xi]; 183 if ($x['Instrument'] !== $e['Instrument'] || $x['Side'] !== $e['Side'] || $x['ts'] < $e['ts']) continue; 184 // Per-account pairing unless merge later 185 if (!$merge_accounts && ($x['Account'] !== $e['Account'])) continue; 186 $match = min((int)$e['rem'], (int)$x['rem']); 187 if ($match <= 0) continue; 188 189 [$mult, $comm] = $get_mult_comm($e['Instrument']); 190 $pnl = 0.0; 191 if ($e['Side'] === 'long') $pnl = ($x['Exit Price'] - $e['Entry Price']) * $match * $mult; 192 if ($e['Side'] === 'short') $pnl = ($e['Entry Price'] - $x['Exit Price']) * $match * $mult; 193 $pnl -= $comm * $match; 194 $pnl = round($pnl, 2); 195 196 $slices[] = [ 197 'Instrument' => $e['Instrument'], 198 'Account' => $e['Account'], 199 'Entry Time' => $fmt_time($e['ts']), 200 'Exit Time' => $fmt_time($x['ts']), 201 'EntryTS' => $e['ts'], 202 'ExitTS' => $x['ts'], 203 'Qty' => $match, 204 'Entry Price' => (float)$e['Entry Price'], 205 'Exit Price' => (float)$x['Exit Price'], 206 'P&L' => $pnl, 207 'Side' => $e['Side'], 208 ]; 209 210 $entries[$ei]['rem'] -= $match; 211 $exits[$xi]['rem'] -= $match; 212 } 213 } 214 215 // Merge across accounts if enabled 216 if ($merge_accounts) { 217 foreach ($slices as $rec) { 218 $found = false; 219 foreach ($trade_data as &$e2) { 220 // Ensure TS fields exist for comparison 221 if (!isset($e2['EntryTS']) && isset($e2['Entry Time'])) $e2['EntryTS'] = strtotime($e2['Entry Time']); 222 if (!isset($e2['ExitTS']) && isset($e2['Exit Time'])) $e2['ExitTS'] = strtotime($e2['Exit Time']); 223 224 $same_instr = ($e2['Instrument'] === $rec['Instrument']); 225 $same_side = ($e2['Side'] === $rec['Side']); 226 $same_prices = ((float)$e2['Entry Price'] === (float)$rec['Entry Price'] && (float)$e2['Exit Price'] === (float)$rec['Exit Price']); 227 if (!$same_instr || !$same_side || !$same_prices) continue; 228 229 if ($merge_round_to_minute) { 230 $close_entry = ($floor_min($e2['EntryTS']) === $floor_min($rec['EntryTS'])); 231 $close_exit = ($floor_min($e2['ExitTS']) === $floor_min($rec['ExitTS'])); 232 } else { 233 $tol = max(0, (int)$merge_time_tolerance); 234 $close_entry = (abs($e2['EntryTS'] - $rec['EntryTS']) <= $tol); 235 $close_exit = (abs($e2['ExitTS'] - $rec['ExitTS']) <= $tol); 236 } 237 if (!($close_entry && $close_exit)) continue; 238 239 // Merge 240 $e2['Qty'] += $rec['Qty']; 241 $e2['P&L'] += $rec['P&L']; 242 if ($rec['EntryTS'] < $e2['EntryTS']) { 243 $e2['EntryTS'] = $rec['EntryTS']; 244 $e2['Entry Time'] = $rec['Entry Time']; 245 } 246 if ($rec['ExitTS'] > $e2['ExitTS']) { 247 $e2['ExitTS'] = $rec['ExitTS']; 248 $e2['Exit Time'] = $rec['Exit Time']; 249 } 250 // Accounts label 251 $accs = array_filter(array_map('trim', explode(', ', (string)($e2['Account'] ?? '')))); 252 if (!in_array($rec['Account'], $accs, true)) $accs[] = $rec['Account']; 253 $e2['Account'] = implode(', ', $accs); 254 $found = true; 139 255 break; 140 256 } 141 } 142 143 if (!$found_match) { 144 $trade_data[] = array( 145 'Instrument' => $instrument, 146 'Account' => $account, 147 'Entry Time' => $entry_time, 148 'Qty' => $qty, 149 'Entry Price' => $entry_price, 150 'Exit Price' => $exit_price, 151 'P&L' => $pnl, 152 'Side' => $side 153 ); 257 unset($e2); 258 if (!$found) $trade_data[] = $rec; 154 259 } 155 260 } else { 156 // No merging, just add the trade 157 $trade_data[] = array( 158 'Instrument' => $instrument, 159 'Account' => $account, 160 'Entry Time' => $entry_time, 161 'Qty' => $qty, 162 'Entry Price' => $entry_price, 163 'Exit Price' => $exit_price, 164 'P&L' => $pnl, 165 'Side' => $side 166 ); 261 $trade_data = $slices; // per-account only 262 } 263 } 264 // === Path B: Summary/combined rows already present === 265 elseif ($has_entry_col) { 266 foreach ($rows as $row) { 267 if (!is_array($row) || empty($row)) continue; 268 $g = $map_row($headers, $row); 269 270 $instrument = $g['instrument'] ?? ''; 271 $accountRaw = $g['account'] ?? ''; 272 $account = $accountRaw ? explode('!', $accountRaw)[0] : $accountRaw; 273 $qty = (int)($g['qty'] ?? ($g['quantity'] ?? 0)); 274 $entry_p = (float)($g['entry price'] ?? 0); 275 $exit_p = (float)($g['exit price'] ?? 0); 276 $side = strtolower($g['market pos.'] ?? ($g['side'] ?? '')); 277 278 $entry_ts = isset($g['entry time']) && $g['entry time'] !== '' ? strtotime($g['entry time']) : 0; 279 $exit_ts = isset($g['exit time']) && $g['exit time'] !== '' ? strtotime($g['exit time']) : 0; 280 if ($instrument === '' || $account === '' || $qty <= 0 || $entry_ts <= 0) continue; 281 282 [$mult, $comm] = $get_mult_comm($instrument); 283 $pnl = 0.0; 284 if ($entry_p && $exit_p) { 285 if ($side === 'long') $pnl = ($exit_p - $entry_p) * $qty * $mult; 286 if ($side === 'short') $pnl = ($entry_p - $exit_p) * $qty * $mult; 287 $pnl -= $comm * $qty; 288 $pnl = round($pnl, 2); 289 } 290 291 $rec = [ 292 'Instrument' => $instrument, 293 'Account' => $account, 294 'Entry Time' => $fmt_time($entry_ts), 295 'Exit Time' => $exit_ts ? $fmt_time($exit_ts) : '', 296 'EntryTS' => $entry_ts, 297 'ExitTS' => $exit_ts, 298 'Qty' => $qty, 299 'Entry Price' => (float)$entry_p, 300 'Exit Price' => (float)$exit_p, 301 'P&L' => $pnl, 302 'Side' => $side, 303 ]; 304 305 if ($merge_accounts) { 306 $found = false; 307 foreach ($trade_data as &$e2) { 308 if (!isset($e2['EntryTS']) && isset($e2['Entry Time'])) $e2['EntryTS'] = strtotime($e2['Entry Time']); 309 if (!isset($e2['ExitTS']) && isset($e2['Exit Time'])) $e2['ExitTS'] = strtotime($e2['Exit Time']); 310 311 $same_instr = ($e2['Instrument'] === $rec['Instrument']); 312 $same_side = ($e2['Side'] === $rec['Side']); 313 $same_prices = ((float)$e2['Entry Price'] === (float)$rec['Entry Price'] && (float)$e2['Exit Price'] === (float)$rec['Exit Price']); 314 if (!$same_instr || !$same_side || !$same_prices) continue; 315 316 if ($merge_round_to_minute) { 317 $close_entry = ($floor_min($e2['EntryTS']) === $floor_min($rec['EntryTS'])); 318 $close_exit = ($floor_min($e2['ExitTS']) === $floor_min($rec['ExitTS'])); 319 } else { 320 $tol = max(0, (int)$merge_time_tolerance); 321 $close_entry = ($rec['EntryTS'] && $e2['EntryTS'] && abs($e2['EntryTS'] - $rec['EntryTS']) <= $tol); 322 $close_exit = ($rec['ExitTS'] && $e2['ExitTS'] && abs($e2['ExitTS'] - $rec['ExitTS']) <= $tol); 323 } 324 if (!($close_entry && $close_exit)) continue; 325 326 $e2['Qty'] += $rec['Qty']; 327 $e2['P&L'] += $rec['P&L']; 328 if ($rec['EntryTS'] < $e2['EntryTS']) { 329 $e2['EntryTS'] = $rec['EntryTS']; 330 $e2['Entry Time'] = $rec['Entry Time']; 331 } 332 if ($rec['ExitTS'] > $e2['ExitTS']) { 333 $e2['ExitTS'] = $rec['ExitTS']; 334 $e2['Exit Time'] = $rec['Exit Time']; 335 } 336 $accs = array_filter(array_map('trim', explode(', ', (string)($e2['Account'] ?? '')))); 337 if (!in_array($rec['Account'], $accs, true)) $accs[] = $rec['Account']; 338 $e2['Account'] = implode(', ', $accs); 339 $found = true; 340 break; 341 } 342 unset($e2); 343 if (!$found) $trade_data[] = $rec; 344 } else { 345 $trade_data[] = $rec; 346 } 347 } 348 } 349 // === Fallback: unknown format, keep original minimal behavior === 350 else { 351 foreach ($rows as $row) { 352 $g = $map_row($headers, $row); 353 $instrument = $g['instrument'] ?? ''; 354 $account = $g['account'] ?? ''; 355 $qty = (int)($g['qty'] ?? 1); 356 $entry_p = (float)($g['entry price'] ?? 0); 357 $exit_p = (float)($g['exit price'] ?? 0); 358 $side = strtolower($g['market pos.'] ?? ''); 359 $entry_ts = isset($g['entry time']) && $g['entry time'] !== '' ? strtotime($g['entry time']) : 0; 360 [$mult, $comm] = $get_mult_comm($instrument); 361 $pnl = 0.0; 362 if ($entry_p && $exit_p) { 363 if ($side === 'long') $pnl = ($exit_p - $entry_p) * $qty * $mult; 364 if ($side === 'short') $pnl = ($entry_p - $exit_p) * $qty * $mult; 365 $pnl -= $comm * $qty; 366 $pnl = round($pnl, 2); 367 } 368 $trade_data[] = [ 369 'Instrument' => $instrument, 370 'Account' => $account, 371 'Entry Time' => $entry_ts ? $fmt_time($entry_ts) : '', 372 'EntryTS' => $entry_ts, 373 'Exit Time' => '', 374 'ExitTS' => 0, 375 'Qty' => $qty, 376 'Entry Price' => (float)$entry_p, 377 'Exit Price' => (float)$exit_p, 378 'P&L' => $pnl, 379 'Side' => $side, 380 ]; 167 381 } 168 382 } … … 170 384 // Save trade data as post meta (as an array of trades) 171 385 update_post_meta($post_id, 'trade_repeater', $trade_data); 172 173 // Output saved data for debugging174 // echo '<h2>Saved Meta Data (Debug)</h2>';175 // echo '<pre>';176 // echo wp_json_encode($trade_data, JSON_PRETTY_PRINT);177 // echo '</pre>';178 386 } 179 387 } -
tradejournal/trunk/includes/logs/plugin-log.log
r3205179 r3346660 1 [2024-11-15 20:44:44] Retrieved license key: D984C8B46A5D0869 2 [2024-11-15 20:45:04] Retrieved license key: test 3 [2024-11-15 20:46:34] Retrieved license key: test 4 [2024-11-15 20:46:47] Retrieved license key: D984C8B46A5D0869 5 [2024-11-15 20:55:23] Retrieved license key: D984C8B46A5D0869 6 [2024-11-15 20:55:27] Retrieved license key: D984C8B46A5D0869 7 [2024-11-16 00:36:27] Retrieved license key: D984C8B46A5D0869 8 [2024-11-16 00:36:35] Retrieved license key: test 9 [2024-11-16 00:36:47] Retrieved license key: D984C8B46A5D0869 10 [2024-11-16 14:33:12] Retrieved license key: D984C8B46A5D0869 11 [2024-11-16 17:45:39] Retrieved license key: D984C8B46A5D0869 12 [2024-11-16 23:15:33] Retrieved license key: D984C8B46A5D0869 13 [2024-11-16 23:15:44] Retrieved license key: D984C8B46A5D0869 14 [2024-11-16 23:28:51] Retrieved license key: D984C8B46A5D0869 15 [2024-11-23 17:26:46] Retrieved license key: D984C8B46A5D0869 16 [2024-11-23 17:53:02] Retrieved license key: 111AA34A9441CA37 17 [2024-11-23 17:53:21] Retrieved license key: 111AA34A9441CA37 18 [2024-11-23 18:02:34] Retrieved license key: 111AA34A9441CA37 19 [2024-11-23 18:02:45] Retrieved license key: 111AA34A9441CA37 20 [2024-11-23 18:03:14] Retrieved license key: 111AA34A9441CA37 21 [2024-11-23 18:03:25] Retrieved license key: 111AA34A9441CA37 22 [2024-11-23 18:03:32] Retrieved license key: 111AA34A9441CA37 23 [2024-11-23 18:10:18] Retrieved license key: 111AA34A9441CA37 24 [2024-11-23 18:10:39] Retrieved license key: 111AA34A9441CA37 25 [2024-11-23 18:11:04] Retrieved license key: test 26 [2024-11-23 18:14:05] Retrieved license key: test 27 [2024-11-23 18:14:17] Retrieved license key: test 28 [2024-11-23 18:15:08] Retrieved license key: test 29 [2024-11-23 18:15:18] Retrieved license key: test 30 [2024-11-23 18:15:38] Retrieved license key: 111AA34A9441CA37 31 [2024-11-23 18:22:33] Retrieved license key: 111AA34A9441CA37 32 [2024-11-23 18:22:49] Retrieved license key: test 33 [2024-11-23 18:24:15] Retrieved license key: test 34 [2024-11-23 18:24:17] Retrieved license key: test 35 [2024-11-23 18:24:17] Retrieved license key: test 36 [2024-11-23 18:25:32] Retrieved license key: 111AA34A9441CA37 37 [2024-11-23 18:25:33] Retrieved license key: 111AA34A9441CA37 38 [2024-11-23 18:25:34] Retrieved license key: 111AA34A9441CA37 39 [2024-11-23 18:25:46] Retrieved license key: 111AA34A9441CA37 40 [2024-11-23 18:29:39] Retrieved license key: 111AA34A9441CA37 41 [2024-11-23 18:29:55] Retrieved license key: 111AA34A9441CA37 42 [2024-11-23 18:30:12] Retrieved license key: 111AA34A9441CA37 43 [2024-11-23 18:30:13] Retrieved license key: 111AA34A9441CA37 44 [2024-11-23 18:30:21] Retrieved license key: 111AA34A9441CA37 45 [2024-11-23 18:33:03] Retrieved license key: 111AA34A9441CA37 46 [2024-11-23 18:33:05] Retrieved license key: 111AA34A9441CA37 47 [2024-11-23 18:33:22] Retrieved license key: 111AA34A9441CA37 48 [2024-11-23 18:35:11] Retrieved license key: 111AA34A9441CA37 49 [2024-11-23 18:35:27] Retrieved license key: test 50 [2024-11-23 18:35:51] Retrieved license key: 111AA34A9441CA37 51 [2024-11-23 18:40:44] Retrieved license key: 111AA34A9441CA37 52 [2024-11-23 18:40:58] Retrieved license key: test 53 [2024-11-23 18:41:00] Retrieved license key: test 54 [2024-11-23 18:41:17] Retrieved license key: 111AA34A9441CA37 55 [2024-11-23 18:43:30] Retrieved license key: 111AA34A9441CA37 56 [2024-11-23 18:43:44] Retrieved license key: test 57 [2024-11-23 18:44:03] Retrieved license key: 111AA34A9441CA37 58 [2024-11-23 18:48:13] Retrieved license key: 111AA34A9441CA37 59 [2024-11-23 18:48:24] Retrieved license key: test 60 [2024-11-23 18:48:53] Retrieved license key: test 61 [2024-11-23 18:48:56] Retrieved license key: test 62 [2024-11-23 18:49:20] Retrieved license key: 111AA34A9441CA37 63 [2024-11-23 18:53:20] Retrieved license key: 111AA34A9441CA37 64 [2024-11-23 19:14:59] Retrieved license key: 111AA34A9441CA37 65 [2024-11-24 14:55:25] Retrieved license key: 111AA34A9441CA37 66 [2024-11-24 14:55:31] Retrieved license key: 111AA34A9441CA37 67 [2024-11-24 15:38:49] Retrieved license key: 111AA34A9441CA37 68 [2024-11-24 15:39:02] Retrieved license key: 111AA34A9441CA37 69 [2024-11-24 18:35:04] Retrieved license key: 111AA34A9441CA37 70 [2024-11-24 18:49:25] Retrieved license key: 111AA34A9441CA37 71 [2024-11-24 18:49:28] Retrieved license key: 111AA34A9441CA37 72 [2024-11-24 18:49:58] Retrieved license key: 111AA34A9441CA37 73 [2024-11-29 16:14:07] Retrieved license key: 111AA34A9441CA37 74 [2024-11-29 16:14:39] Retrieved license key: 111AA34A9441CA37 75 [2024-11-29 16:42:17] Retrieved license key: 111AA34A9441CA37 76 [2024-11-29 16:42:43] Retrieved license key: 111AA34A9441CA37 77 [2024-11-29 17:16:53] Retrieved license key: 111AA34A9441CA37 78 [2024-11-29 17:17:14] Retrieved license key: 111AA34A9441CA37 79 [2024-11-29 17:18:50] Retrieved license key: 111AA34A9441CA37 80 [2024-11-29 17:19:13] Retrieved license key: 111AA34A9441CA37 81 [2024-11-29 17:20:05] Retrieved license key: 111AA34A9441CA37 82 [2024-11-29 17:20:23] Retrieved license key: 111AA34A9441CA37 83 [2024-11-29 17:20:51] Retrieved license key: 111AA34A9441CA37 84 [2024-11-29 17:21:06] Retrieved license key: 111AA34A9441CA37 85 [2024-11-29 22:15:36] Retrieved license key: 111AA34A9441CA37 86 [2024-11-29 22:15:49] Retrieved license key: 111AA34A9441CA37 87 [2024-11-29 22:21:00] Retrieved license key: 111AA34A9441CA37 88 [2024-11-29 22:21:21] Retrieved license key: 111AA34A9441CA37 89 [2024-11-29 22:21:33] Retrieved license key: 111AA34A9441CA37 90 [2024-11-29 22:24:41] Retrieved license key: 111AA34A9441CA37 91 [2024-11-29 22:24:54] Retrieved license key: 111AA34A9441CA37 92 [2024-11-29 22:25:55] Retrieved license key: 111AA34A9441CA37 93 [2024-11-29 22:26:11] Retrieved license key: 111AA34A9441CA37 94 [2024-11-29 22:35:47] Retrieved license key: 111AA34A9441CA37 95 [2024-11-29 22:36:05] Retrieved license key: 111AA34A9441CA37 96 [2024-11-29 22:38:46] Retrieved license key: 111AA34A9441CA37 97 [2024-11-29 22:39:06] Retrieved license key: 111AA34A9441CA37 98 [2024-11-29 22:53:56] Retrieved license key: 111AA34A9441CA37 99 [2024-11-29 22:54:22] Retrieved license key: 111AA34A9441CA37 100 [2024-11-29 23:09:09] Retrieved license key: 111AA34A9441CA37 101 [2024-11-29 23:20:31] Retrieved license key: 111AA34A9441CA37 102 [2024-11-29 23:21:14] Retrieved license key: 111AA34A9441CA37 103 [2024-11-29 23:21:26] Retrieved license key: 111AA34A9441CA37 104 [2024-11-29 23:26:17] Retrieved license key: 111AA34A9441CA37 105 [2024-11-29 23:26:29] Retrieved license key: 111AA34A9441CA37 106 [2024-11-29 23:27:33] Retrieved license key: 111AA34A9441CA37 107 [2024-11-30 00:19:55] Retrieved license key: 111AA34A9441CA37 108 [2024-11-30 00:20:04] Retrieved license key: 111AA34A9441CA37 109 [2024-11-30 00:40:11] Retrieved license key: 111AA34A9441CA37 110 [2024-11-30 00:40:33] Retrieved license key: 111AA34A9441CA37 111 [2024-11-30 00:41:22] Retrieved license key: 111AA34A9441CA37 112 [2024-11-30 00:41:32] Retrieved license key: 111AA34A9441CA37 113 [2024-11-30 00:42:13] Retrieved license key: 111AA34A9441CA37 114 [2024-11-30 00:44:17] Retrieved license key: 111AA34A9441CA37 115 [2024-11-30 00:44:27] Retrieved license key: 111AA34A9441CA37 116 [2024-11-30 00:47:04] Retrieved license key: 111AA34A9441CA37 117 [2024-11-30 02:34:35] Retrieved license key: 111AA34A9441CA37 118 [2024-11-30 02:34:44] Retrieved license key: 111AA34A9441CA37 119 [2024-11-30 02:35:00] Retrieved license key: 111AA34A9441CA37 120 [2024-11-30 02:37:38] Retrieved license key: 111AA34A9441CA37 121 [2024-11-30 15:04:20] Retrieved license key: 111AA34A9441CA37 122 [2024-11-30 15:04:37] Retrieved license key: 111AA34A9441CA37 123 [2024-11-30 15:06:54] Retrieved license key: 111AA34A9441CA37 124 [2024-11-30 15:07:24] Retrieved license key: 111AA34A9441CA37 125 [2024-11-30 15:58:34] Retrieved license key: 111AA34A9441CA37 126 [2024-11-30 15:58:45] Retrieved license key: 111AA34A9441CA37 127 [2024-11-30 16:00:08] Retrieved license key: 111AA34A9441CA37 128 [2024-11-30 16:00:11] Retrieved license key: 111AA34A9441CA37 129 [2024-11-30 16:00:14] Retrieved license key: 111AA34A9441CA37 130 [2024-11-30 16:05:45] Retrieved license key: 111AA34A9441CA37 131 [2024-11-30 16:05:48] Retrieved license key: 111AA34A9441CA37 132 [2024-11-30 16:17:01] License key is empty or not set. 133 [2024-11-30 16:17:05] License key is empty or not set. 134 [2024-11-30 16:17:57] License key is empty or not set. 135 [2024-11-30 16:21:58] License key is empty or not set. 136 [2024-11-30 16:22:00] License key is empty or not set. 137 [2024-11-30 16:22:07] License key is empty or not set. 138 [2024-11-30 16:22:22] License key is empty or not set. 139 [2024-11-30 16:22:41] License key is empty or not set. 140 [2024-11-30 16:23:27] License key is empty or not set. 141 [2024-11-30 17:39:15] Retrieved license key: 111AA34A9441CA37 142 [2024-11-30 17:49:07] Retrieved license key: 111AA34A9441CA37 143 [2024-11-30 17:49:21] Retrieved license key: 111AA34A9441CA37 144 [2024-11-30 21:33:03] Retrieved license key: 111AA34A9441CA37 145 [2024-11-30 21:34:58] Retrieved license key: 111AA34A9441CA37 146 [2024-11-30 21:35:14] Retrieved license key: 111AA34A9441CA37 147 [2024-11-30 21:35:18] Retrieved license key: 111AA34A9441CA37 148 [2024-11-30 21:38:41] Retrieved license key: 111AA34A9441CA37 149 [2024-11-30 21:41:25] Retrieved license key: 111AA34A9441CA37 150 [2024-11-30 21:41:39] Retrieved license key: 111AA34A9441CA37 151 [2024-11-30 21:44:52] Retrieved license key: 111AA34A9441CA37 152 [2024-11-30 21:46:20] Retrieved license key: 111AA34A9441CA37 153 [2024-11-30 21:46:31] Retrieved license key: 111AA34A9441CA37 154 [2024-11-30 22:02:17] Retrieved license key: 111AA34A9441CA37 155 [2024-11-30 22:06:54] Retrieved license key: 111AA34A9441CA37 156 [2024-11-30 22:07:02] Retrieved license key: 111AA34A9441CA37 157 [2024-11-30 22:14:38] Retrieved license key: 111AA34A9441CA37 158 [2024-11-30 22:14:42] Retrieved license key: 111AA34A9441CA37 159 [2024-11-30 22:15:10] Retrieved license key: 111AA34A9441CA37 160 [2024-11-30 22:19:01] Retrieved license key: test 161 [2024-11-30 22:22:59] Retrieved license key: 111AA34A9441CA37 162 [2024-11-30 22:23:37] Retrieved license key: 111AA34A9441CA37 163 [2024-11-30 22:23:49] Retrieved license key: 111AA34A9441CA37 164 [2024-11-30 22:25:52] Retrieved license key: 111AA34A9441CA37 165 [2024-11-30 22:29:07] Retrieved license key: test 166 [2024-11-30 22:29:38] Retrieved license key: 111AA34A9441CA37 167 [2024-11-30 22:31:16] Retrieved license key: 111AA34A9441CA37 168 [2024-11-30 22:34:10] Retrieved license key: 111AA34A9441CA37 169 [2024-11-30 22:34:27] Retrieved license key: test 170 [2024-11-30 22:38:21] Retrieved license key: 111AA34A9441CA37 171 [2024-11-30 22:40:28] Retrieved license key: 111AA34A9441CA37 172 [2024-11-30 22:40:42] Retrieved license key: 111AA34A9441CA37 173 [2024-11-30 22:42:50] Retrieved license key: 111AA34A9441CA37 174 [2024-11-30 22:43:04] Retrieved license key: 111AA34A9441CA37 175 [2024-11-30 22:46:21] Retrieved license key: 111AA34A9441CA37 176 [2024-11-30 22:46:37] Retrieved license key: 111AA34A9441CA37 177 [2024-11-30 22:47:24] Retrieved license key: 111AA34A9441CA37 178 [2024-11-30 22:47:37] Retrieved license key: 111AA34A9441CA37 179 [2024-11-30 22:48:14] Retrieved license key: 111AA34A9441CA37 180 [2024-11-30 22:48:20] Retrieved license key: 111AA34A9441CA37 181 [2024-11-30 22:54:16] Retrieved license key: 111AA34A9441CA37 182 [2024-11-30 22:54:25] Retrieved license key: 111AA34A9441CA37 183 [2024-11-30 22:54:34] Retrieved license key: 111AA34A9441CA37 184 [2024-11-30 23:02:22] Retrieved license key: 111AA34A9441CA37 185 [2024-11-30 23:02:31] Retrieved license key: 111AA34A9441CA37 186 [2024-11-30 23:05:46] Retrieved license key: 111AA34A9441CA37 187 [2024-11-30 23:05:51] Retrieved license key: 111AA34A9441CA37 188 [2024-11-30 23:05:58] Retrieved license key: 111AA34A9441CA37 189 [2024-11-30 23:09:33] Retrieved license key: 111AA34A9441CA37 190 [2024-11-30 23:09:47] Retrieved license key: 111AA34A9441CA37 191 [2024-11-30 23:12:29] Retrieved license key: 111AA34A9441CA37 192 [2024-11-30 23:12:36] Retrieved license key: 111AA34A9441CA37 193 [2024-11-30 23:18:40] Retrieved license key: 111AA34A9441CA37 194 [2024-11-30 23:18:50] Retrieved license key: 111AA34A9441CA37 195 [2024-11-30 23:24:07] Retrieved license key: 111AA34A9441CA37 196 [2024-11-30 23:24:15] Retrieved license key: 111AA34A9441CA37 197 [2024-11-30 23:24:22] Retrieved license key: 111AA34A9441CA37 198 [2024-11-30 23:27:40] Retrieved license key: 111AA34A9441CA37 199 [2024-11-30 23:27:42] Retrieved license key: 111AA34A9441CA37 200 [2024-11-30 23:27:49] Retrieved license key: 111AA34A9441CA37 201 [2024-11-30 23:27:54] Retrieved license key: 111AA34A9441CA37 202 [2024-11-30 23:34:13] Retrieved license key: D984C8B46A5D0869 203 [2024-11-30 23:34:13] Retrieved license key: D984C8B46A5D0869 204 [2024-11-30 23:34:34] Retrieved license key: test 205 [2024-11-30 23:34:44] Retrieved license key: test 206 [2024-11-30 23:35:35] Retrieved license key: 111AA34A9441CA37 207 [2024-11-30 23:57:30] Retrieved license key: 111AA34A9441CA37 208 [2024-12-01 00:04:55] Retrieved license key: 111AA34A9441CA37 209 [2024-12-01 00:06:03] Retrieved license key: 111AA34A9441CA37 210 [2024-12-01 00:06:09] Retrieved license key: 111AA34A9441CA37 211 [2024-12-01 00:09:06] Retrieved license key: 111AA34A9441CA37 212 [2024-12-01 00:23:42] Retrieved license key: 111AA34A9441CA37 213 [2024-12-01 00:26:54] Retrieved license key: test 214 [2024-12-01 00:31:18] Retrieved license key: test 215 [2024-12-01 00:31:54] Retrieved license key: test 216 [2024-12-01 00:32:07] Retrieved license key: 111AA34A9441CA37 1 [2025-01-21 22:58:44] Retrieved license key: 111AA34A9441CA37 2 [2025-01-21 22:59:16] Retrieved license key: 111AA34A9441CA37 3 [2025-01-22 23:10:35] Retrieved license key: 111AA34A9441CA37 4 [2025-01-22 23:11:05] Retrieved license key: 111AA34A9441CA37 5 [2025-01-22 23:14:10] Retrieved license key: 111AA34A9441CA37 6 [2025-01-22 23:14:20] Retrieved license key: 111AA34A9441CA37 7 [2025-08-05 22:10:38] Retrieved license key: 111AA34A9441CA37 8 [2025-08-05 22:11:05] Retrieved license key: 111AA34A9441CA37 9 [2025-08-05 22:19:35] Retrieved license key: 111AA34A9441CA37 10 [2025-08-05 22:19:52] Retrieved license key: 111AA34A9441CA37 11 [2025-08-05 22:21:11] Retrieved license key: 111AA34A9441CA37 12 [2025-08-05 22:21:25] Retrieved license key: 111AA34A9441CA37 13 [2025-08-05 22:21:40] Retrieved license key: 111AA34A9441CA37 14 [2025-08-05 22:21:56] Retrieved license key: 111AA34A9441CA37 15 [2025-08-05 22:28:44] Retrieved license key: 111AA34A9441CA37 16 [2025-08-05 22:28:53] Retrieved license key: 111AA34A9441CA37 17 [2025-08-05 22:40:51] Retrieved license key: 111AA34A9441CA37 18 [2025-08-05 22:41:06] Retrieved license key: 111AA34A9441CA37 19 [2025-08-05 22:44:01] Retrieved license key: 111AA34A9441CA37 20 [2025-08-05 22:44:13] Retrieved license key: 111AA34A9441CA37 21 [2025-08-05 23:43:42] Retrieved license key: 111AA34A9441CA37 22 [2025-08-05 23:43:53] Retrieved license key: 111AA34A9441CA37 23 [2025-08-06 18:50:46] Retrieved license key: 111AA34A9441CA37 24 [2025-08-06 18:51:00] Retrieved license key: 111AA34A9441CA37 25 [2025-08-06 20:36:23] Retrieved license key: 111AA34A9441CA37 26 [2025-08-06 20:36:34] Retrieved license key: 111AA34A9441CA37 27 [2025-08-06 20:38:03] Retrieved license key: 111AA34A9441CA37 28 [2025-08-06 20:38:17] Retrieved license key: 111AA34A9441CA37 29 [2025-08-18 20:37:50] Retrieved license key: 111AA34A9441CA37 30 [2025-08-18 20:37:58] Retrieved license key: 111AA34A9441CA37 31 [2025-08-18 20:38:27] Retrieved license key: 111AA34A9441CA37 32 [2025-08-18 20:38:50] Retrieved license key: 111AA34A9441CA37 33 [2025-08-18 20:39:08] Retrieved license key: 111AA34A9441CA37 34 [2025-08-18 20:39:23] Retrieved license key: 111AA34A9441CA37 35 [2025-08-18 20:39:39] Retrieved license key: 111AA34A9441CA37 36 [2025-08-18 20:39:54] Retrieved license key: 111AA34A9441CA37 37 [2025-08-18 20:49:41] Retrieved license key: 111AA34A9441CA37 38 [2025-08-18 20:50:06] Retrieved license key: 111AA34A9441CA37 39 [2025-08-18 20:54:40] Retrieved license key: 111AA34A9441CA37 40 [2025-08-18 20:54:50] Retrieved license key: 111AA34A9441CA37 41 [2025-08-18 20:57:59] Retrieved license key: 111AA34A9441CA37 42 [2025-08-18 20:58:10] Retrieved license key: 111AA34A9441CA37 43 [2025-08-18 20:58:49] Retrieved license key: 111AA34A9441CA37 44 [2025-08-18 20:58:58] Retrieved license key: 111AA34A9441CA37 45 [2025-08-18 21:00:13] Retrieved license key: 111AA34A9441CA37 46 [2025-08-18 21:00:21] Retrieved license key: 111AA34A9441CA37 47 [2025-08-18 21:01:03] Retrieved license key: 111AA34A9441CA37 48 [2025-08-18 21:01:44] Retrieved license key: 111AA34A9441CA37 49 [2025-08-18 21:01:56] Retrieved license key: 111AA34A9441CA37 50 [2025-08-18 21:06:44] Retrieved license key: 111AA34A9441CA37 51 [2025-08-18 21:06:54] Retrieved license key: 111AA34A9441CA37 -
tradejournal/trunk/readme.txt
r3269231 r3346660 3 3 Tags: trade journal, trading, NinjaTrader, csv import, trading platform 4 4 Requires at least: 5.0 5 Tested up to: 6.8 6 Stable tag: 1.2 5 Tested up to: 6.8.2 6 Stable tag: 1.2.0 7 7 Requires PHP: 7.0 8 8 License: GPLv2 or later … … 86 86 87 87 == Changelog == 88 89 = 1.2.0 = 90 * Added NT8.1+ CSV format support 88 91 89 92 = 1.1.1 = … … 155 158 == Upgrade Notice == 156 159 160 = 1.2.0 = 161 * Added NT8.1+ CSV format support 162 157 163 = 1.1.1 = 158 164 * Fixed: Screenshot removal button not working as expected. -
tradejournal/trunk/tradejournal.php
r3276894 r3346660 3 3 Plugin Name: TradeJournal WP 4 4 Description: TradeJournal WP imports trades from NinjaTrader CSV files, creating detailed journal entries for each trading day. Includes trade management, P&L calculation, responsive tables, lightbox for screenshots, and compatibility with custom post types and block-based themes. Track performance, analyze setups, and organize screenshots easily within WordPress. 5 Version: 1. 1.15 Version: 1.2.0 6 6 Author: Laith Sinawi 7 7 Author URI: https://sinawiwebdesign.com 8 8 License: GPL2 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 Tested up to: 6.8 10 Tested up to: 6.8.2 11 11 */ 12 12
Note: See TracChangeset
for help on using the changeset viewer.