CORE TERMINAL
올드보이 & 마리아 백업
바이비트 API 실시간 플렛폼 수집 데몬 Ver.2.4 - 1차 개선판 완성 버전
DATE: 2026-03-03 10:48
핵심 항목
라벨LABEL
테마2.0
내용
4. '로그(Log) 기록' 병목 (Synchronous I/O)
기어다니는 이유: file_put_contents나 error_log를 루프 안에서 무식하게 쓴다면?
기술적 팩트: 하드디스크(SSD)에 글자 적는 속도는 네트워크보다 느릴 때가 많습니다. 로그 적느라 데이터 수집을 못 하는 배보다 배꼽이 더 큰 상황이 생기죠.
해결: 로그는 진짜 에러 날 때만 적거나, 메모리에 쌓아뒀다 나중에 한 번에 적어야 합니다.
* 현재 우리 데몬은 로그를 싸지 않는다. 디비를 쓴다.
- 여기 코드도 디피 파일을 저장하지는 않는다. 그러나 디비 기록 코드로 계속 뻘짓을 박아대고 있다.
이 쓸 때 없는 짓을 막아야 속도가 오른다.
우리는 디비를 쓰는데 왜 저 짓거리.
----------------------------------------------------------------------------------------------------------
echo ".", echo "\n-> [INFO]...", flush() 이게 매 사이클마다 stdout에 쓰는 I/O입니다. 파일은 아니지만 동기 출력이라 똑같이 막힙니다.
해결 방법은 단순합니다. echo/flush 전부 제거
----------------------------------------------------------------------------------------------------------
기어다니는 이유: file_put_contents나 error_log를 루프 안에서 무식하게 쓴다면?
기술적 팩트: 하드디스크(SSD)에 글자 적는 속도는 네트워크보다 느릴 때가 많습니다. 로그 적느라 데이터 수집을 못 하는 배보다 배꼽이 더 큰 상황이 생기죠.
해결: 로그는 진짜 에러 날 때만 적거나, 메모리에 쌓아뒀다 나중에 한 번에 적어야 합니다.
* 현재 우리 데몬은 로그를 싸지 않는다. 디비를 쓴다.
- 여기 코드도 디피 파일을 저장하지는 않는다. 그러나 디비 기록 코드로 계속 뻘짓을 박아대고 있다.
이 쓸 때 없는 짓을 막아야 속도가 오른다.
우리는 디비를 쓰는데 왜 저 짓거리.
----------------------------------------------------------------------------------------------------------
echo ".", echo "\n-> [INFO]...", flush() 이게 매 사이클마다 stdout에 쓰는 I/O입니다. 파일은 아니지만 동기 출력이라 똑같이 막힙니다.
해결 방법은 단순합니다. echo/flush 전부 제거
----------------------------------------------------------------------------------------------------------
추가 내용
#!/usr/bin/php
<?php
/**
* ============================================================
* 바이비트 무기한 선물(linear) 종목 정보 수집 CLI 데몬
* - curl_multi 병렬 호출 방식 (전체 종목 동시 호출)
* - 그누보드(g5_write_daemon_kind_bybit) x2_run=1 종목만 수집
* - 저장 테이블: daemon_bybit_Ticker
* ============================================================
*/
error_reporting(E_ALL);
ini_set(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'display_errors\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\', 1);
date_default_timezone_set(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'Asia/Seoul\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\');
$DAEMON_ID = pathinfo(__FILE__, PATHINFO_FILENAME);
if (php_sapi_name() !== \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'cli\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\') {
echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"CLI 전용 데몬입니다.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";
exit;
}
function get_db_connection() {
try {
$db_upbit = null;
@include \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'/home/www/DB/db_upbit.php\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
if (!($db_upbit instanceof PDO)) return null;
$pdo = $db_upbit;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
} catch (Throwable $e) {
return null;
}
}
function get_gnu_connection() {
try {
$db_gnu = null;
$pdo_gnu = null;
$pdo = null;
@include \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'/home/www/DB/db_gnu.php\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
if ($db_gnu instanceof PDO) {
$db_gnu->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db_gnu;
}
if ($pdo_gnu instanceof PDO) {
$pdo_gnu->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo_gnu;
}
if ($pdo instanceof PDO) {
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}
return null;
} catch (Throwable $e) {
return null;
}
}
// ============================================================
// curl_multi 병렬 호출 - URL 배열 한번에 날리고 결과 반환
// ============================================================
function http_multi_get(array $urls): array {
$mh = curl_multi_init();
$handles = [];
foreach ($urls as $key => $url) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 8,
CURLOPT_USERAGENT => \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bybit-ghost\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
CURLOPT_SSL_VERIFYPEER => false,
]);
curl_multi_add_handle($mh, $ch);
$handles[$key] = $ch;
}
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
$results = [];
foreach ($handles as $key => $ch) {
$raw = curl_multi_getcontent($ch);
$results[$key] = $raw ? json_decode($raw, true) : null;
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
return $results;
}
// ============================================================
// 전체 종목 한번에 병렬 호출 후 데이터 파싱
// ============================================================
function collectAll(array $symbols): array {
$API_INSTRUMENTS = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/instruments-info?category=linear&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_TICKERS = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/tickers?category=linear&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_KLINE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/kline?category=linear&interval=1&limit=1&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_RECENT_TRADE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/recent-trade?category=linear&limit=1&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_RISK_LIMIT = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/risk-limit?category=linear&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_ACCOUNT_RATIO = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/account-ratio?category=linear&period=1d&limit=1&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_MARK_KLINE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/mark-price-kline?category=linear&interval=1&limit=1&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_INDEX_KLINE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/index-price-kline?category=linear&interval=1&limit=1&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$API_PREMIUM_KLINE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'https://api.bybit.com/v5/market/premium-index-price-kline?category=linear&interval=1&limit=1&symbol=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
// 전체 종목 × 9개 URL 한번에 구성
$urls = [];
foreach ($symbols as $sym) {
$s = urlencode($sym);
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__info\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_INSTRUMENTS . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__ticker\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_TICKERS . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__kline\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_KLINE . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__trade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_RECENT_TRADE . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__risk\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_RISK_LIMIT . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__ratio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_ACCOUNT_RATIO . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__mark\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_MARK_KLINE . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__index\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_INDEX_KLINE . $s;
$urls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__premium\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $API_PREMIUM_KLINE . $s;
}
// 한방에 병렬 호출
$raw = http_multi_get($urls);
// 종목별 파싱
$result = [];
foreach ($symbols as $sym) {
// instruments-info
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__info\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$item = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? []) : [];
$lf = $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'leverageFilter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? [];
$pf = $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'priceFilter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? [];
$ls = $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lotSizeFilter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? [];
// tickers
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__ticker\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$tk = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// kline
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__kline\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$k = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// recent-trade
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__trade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$t = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// risk-limit
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__risk\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$r = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// account-ratio
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__ratio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$a = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// mark-price-kline
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__mark\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$mk = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// index-price-kline
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__index\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$ik = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
// premium-index-price-kline
$res = $raw[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{$sym}__premium\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] ?? null;
$pk = ($res && ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'retCode\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? -1) === 0) ? ($res[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'result\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'list\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][0] ?? null) : null;
$result[$sym] = [
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'symbol\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $sym,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'status\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'status\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'baseCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'baseCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'quoteCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'quoteCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'settleCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'settleCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'launchTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'launchTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'deliveryTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'deliveryTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'priceScale\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'priceScale\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minLeverage\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $lf[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minLeverage\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxLeverage\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $lf[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxLeverage\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'leverageStep\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $lf[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'leverageStep\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $pf[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $pf[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'tickSize\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $pf[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'tickSize\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $ls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $ls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'qtyStep\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $ls[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'qtyStep\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'fundingInterval\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'fundingInterval\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'copyTrading\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'copyTrading\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'unifiedMarginTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => ($item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'unifiedMarginTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ? 1 : 0),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'deliveryFeeRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'deliveryFeeRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'postOnlyMaxOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lotSizeFilter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'][\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'postOnlyMaxOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'upperLimitPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'upperFundingRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lowerLimitPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $item[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lowerFundingRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'time\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => (int)(microtime(true) * 1000),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lastPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lastPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'prevPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'prevPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'price24hPcnt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'price24hPcnt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'highPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'highPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lowPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lowPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'openInterest\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'openInterest\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'markPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'markPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'indexPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'indexPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'fundingRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'fundingRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'prevPrice1h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'prevPrice1h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'openInterestValue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'openInterestValue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'turnover24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'turnover24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'volume24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'volume24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'nextFundingTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'nextFundingTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'predictedDeliveryPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'predictedDeliveryPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'basisRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'basisRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ask1Size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ask1Size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bid1Price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bid1Price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ask1Price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ask1Price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bid1Size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $tk[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bid1Size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'start\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[0] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'open\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[1] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'high\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[2] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'low\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[3] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[4] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'volume\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[5] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'turnover\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $k[6] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'execId\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'execId\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'side\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'side\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isBlockTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => ($t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isBlockTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ? 1 : 0),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isAdlTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => ($t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isBlockTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ? 1 : 0),
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'mPnL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $t[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'mPnL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'riskId\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $r[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'id\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isLowestRisk\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $r[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isLowestRisk\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? 0,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maintenanceMargin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $r[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maintenanceMargin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'initialMargin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $r[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'initialMargin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'limit\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $r[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'riskLimitValue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'buyRatio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $a[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'buyRatio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'sellRatio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $a[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'sellRatio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'period\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => 1,
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'m_close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $mk[4] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'i_close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $ik[4] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'p_close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $pk[4] ?? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
];
}
return $result;
}
$pdo = get_db_connection();
$pdo_gnu = get_gnu_connection();
$server_ip = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'CLI_DAEMON\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
$cycle_count = 0;
$last_market_refresh = 0;
$symbols = [];
$stmt_hb = null;
$stmt_kill = null;
$stmt_stop = null;
$stmt_best = null;
while (true) {
$cycle_count++;
try {
$reconnected = false;
if (!$pdo) {
$pdo = get_db_connection();
$reconnected = true;
} else {
try { $pdo->query(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"SELECT 1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"); }
catch (Throwable $e) {
$pdo = get_db_connection();
$reconnected = true;
}
}
if ($reconnected) {
$stmt_hb = $stmt_kill = $stmt_stop = $stmt_best = null;
}
if ($pdo) {
if (!$stmt_hb) {
$stmt_hb = $pdo->prepare(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
INSERT INTO daemon_record (
d_id, d_category, d_pid, d_status,
d_heartbeat, d_ip, d_start_time, d_memo, d_kill_flag
)
VALUES (
:id, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'BYBIT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\', :pid, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'RUNNING\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
NOW(), :ip, NOW(), \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'BYBIT LINEAR FUTURES GHOST\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\', 0
)
ON DUPLICATE KEY UPDATE
d_pid = VALUES(d_pid),
d_status = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'RUNNING\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
d_heartbeat = NOW(),
d_ip = VALUES(d_ip),
d_memo = VALUES(d_memo)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}
if (!$stmt_kill) {
$stmt_kill = $pdo->prepare(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"SELECT d_kill_flag FROM daemon_record WHERE d_id = :id LIMIT 1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}
if (!$stmt_stop) {
$stmt_stop = $pdo->prepare(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
UPDATE daemon_record
SET d_status=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'STOPPED\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\', d_heartbeat=NOW(), d_pid=0
WHERE d_id=:id
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}
$stmt_hb->execute([\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\':id\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $DAEMON_ID, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\':pid\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => getmypid(), \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\':ip\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $server_ip]);
$stmt_kill->execute([\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\':id\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $DAEMON_ID]);
$kill_flag = (int)($stmt_kill->fetchColumn() ?: 0);
if ($kill_flag === 1) {
$stmt_stop->execute([\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\':id\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' => $DAEMON_ID]);
exit(0);
}
// 종목 갱신 (1초마다)
if (time() - $last_market_refresh >= 1 || empty($symbols)) {
$tmp = [];
// pdo_gnu 끊겼을 때만 재연결
if (!$pdo_gnu) {
$pdo_gnu = get_gnu_connection();
$stmt_best = null;
} else {
try { $pdo_gnu->query(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"SELECT 1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"); }
catch (Throwable $e) {
$pdo_gnu = get_gnu_connection();
$stmt_best = null;
}
}
if ($pdo_gnu instanceof PDO) {
if (!$stmt_best) {
$stmt_best = $pdo_gnu->prepare(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
SELECT wr_subject FROM g5_write_daemon_kind_bybit
WHERE (x2_run = 1 OR x2_run = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}
$stmt_best->execute();
$best_rows = $stmt_best->fetchAll(PDO::FETCH_COLUMN);
if (is_array($best_rows)) {
foreach ($best_rows as $sym) {
$sym = strtoupper(trim((string)$sym));
if ($sym === \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\') continue;
if (strpos($sym, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'USDT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\') === false && strpos($sym, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\') === false) {
$sym .= \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'USDT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\';
}
if (!in_array($sym, $tmp, true)) $tmp[] = $sym;
}
}
}
if ($tmp) {
$symbols = $tmp;
$last_market_refresh = time();
} else {
$symbols = [];
sleep(10);
continue;
}
}
if (!$symbols) {
sleep(10);
continue;
}
$at = date(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'Y-m-d H:i:s\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\');
// 전체 종목 한번에 병렬 호출
$all_data = collectAll($symbols);
$rows = array_values(array_filter($all_data, fn($d) => !empty($d)));
if (empty($rows)) {
// 수집 데이터 없음 - 그냥 통과
} else {
// bulk INSERT - 전체 종목 한방 쿼리
$placeholders = [];
$params = [];
foreach ($rows as $i => $d) {
$placeholders[] = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"(
:symbol_{$i}, :status_{$i}, :baseCoin_{$i}, :quoteCoin_{$i}, :settleCoin_{$i},
:launchTime_{$i}, :deliveryTime_{$i}, :priceScale_{$i},
:minLeverage_{$i}, :maxLeverage_{$i}, :leverageStep_{$i},
:minPrice_{$i}, :maxPrice_{$i}, :tickSize_{$i},
:minOrderQty_{$i}, :maxOrderQty_{$i}, :qtyStep_{$i},
:fundingInterval_{$i}, :copyTrading_{$i}, :unifiedMarginTrade_{$i},
:deliveryFeeRate_{$i}, :postOnlyMaxOrderQty_{$i}, :upperLimitPrice_{$i}, :lowerLimitPrice_{$i},
:time_{$i}, NOW(),
:lastPrice_{$i}, :prevPrice24h_{$i}, :price24hPcnt_{$i},
:highPrice24h_{$i}, :lowPrice24h_{$i}, :openInterest_{$i},
:markPrice_{$i}, :indexPrice_{$i}, :fundingRate_{$i},
:prevPrice1h_{$i}, :openInterestValue_{$i}, :turnover24h_{$i}, :volume24h_{$i},
:nextFundingTime_{$i}, :predictedDeliveryPrice_{$i}, :basisRate_{$i},
:ask1Size_{$i}, :bid1Price_{$i}, :ask1Price_{$i}, :bid1Size_{$i},
:start_{$i}, :open_{$i}, :high_{$i}, :low_{$i}, :close_{$i}, :volume_{$i}, :turnover_{$i},
:execId_{$i}, :price_{$i}, :size_{$i}, :side_{$i}, :isBlockTrade_{$i}, :isAdlTrade_{$i}, :mPnL_{$i},
:riskId_{$i}, :isLowestRisk_{$i}, :maintenanceMargin_{$i}, :initialMargin_{$i}, :limit_{$i},
:buyRatio_{$i}, :sellRatio_{$i}, :period_{$i},
:m_close_{$i}, :i_close_{$i}, :p_close_{$i}
)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"symbol_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'symbol\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"status_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'status\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"baseCoin_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'baseCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"quoteCoin_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'quoteCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"settleCoin_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'settleCoin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"launchTime_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'launchTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"deliveryTime_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'deliveryTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"priceScale_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'priceScale\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"minLeverage_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minLeverage\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"maxLeverage_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxLeverage\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"leverageStep_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'leverageStep\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"minPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"maxPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"tickSize_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'tickSize\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"minOrderQty_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'minOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"maxOrderQty_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maxOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"qtyStep_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'qtyStep\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"fundingInterval_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'fundingInterval\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"copyTrading_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'copyTrading\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"unifiedMarginTrade_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'unifiedMarginTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"deliveryFeeRate_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'deliveryFeeRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"postOnlyMaxOrderQty_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'postOnlyMaxOrderQty\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"upperLimitPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'upperLimitPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"lowerLimitPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lowerLimitPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"time_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'time\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"lastPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lastPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"prevPrice24h_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'prevPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"price24hPcnt_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'price24hPcnt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"highPrice24h_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'highPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"lowPrice24h_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'lowPrice24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"openInterest_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'openInterest\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"markPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'markPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"indexPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'indexPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"fundingRate_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'fundingRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"prevPrice1h_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'prevPrice1h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"openInterestValue_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'openInterestValue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"turnover24h_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'turnover24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"volume24h_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'volume24h\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"nextFundingTime_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'nextFundingTime\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"predictedDeliveryPrice_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'predictedDeliveryPrice\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"basisRate_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'basisRate\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"ask1Size_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ask1Size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"bid1Price_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bid1Price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"ask1Price_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ask1Price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"bid1Size_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'bid1Size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"start_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'start\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"open_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'open\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"high_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'high\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"low_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'low\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"close_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"volume_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'volume\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"turnover_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'turnover\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"execId_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'execId\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"price_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'price\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"size_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'size\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"side_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'side\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"isBlockTrade_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isBlockTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"isAdlTrade_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isAdlTrade\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"mPnL_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'mPnL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"riskId_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'riskId\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"isLowestRisk_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'isLowestRisk\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"maintenanceMargin_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'maintenanceMargin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"initialMargin_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'initialMargin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"limit_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'limit\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"buyRatio_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'buyRatio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sellRatio_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'sellRatio\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"period_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'period\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"m_close_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'m_close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"i_close_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'i_close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
$params[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"p_close_{$i}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"] = $d[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'p_close\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'];
}
$sql = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
INSERT INTO daemon_bybit_Ticker (
symbol, status, baseCoin, quoteCoin, settleCoin,
launchTime, deliveryTime, priceScale,
minLeverage, maxLeverage, leverageStep,
minPrice, maxPrice, tickSize,
minOrderQty, maxOrderQty, qtyStep,
fundingInterval, copyTrading, unifiedMarginTrade,
deliveryFeeRate, postOnlyMaxOrderQty, upperLimitPrice, lowerLimitPrice,
time, updated_at,
lastPrice, prevPrice24h, price24hPcnt,
highPrice24h, lowPrice24h, openInterest,
markPrice, indexPrice, fundingRate,
prevPrice1h, openInterestValue, turnover24h, volume24h,
nextFundingTime, predictedDeliveryPrice, basisRate,
ask1Size, bid1Price, ask1Price, bid1Size,
`start`, `open`, `high`, `low`, `close`, volume, turnover,
execId, price, size, side, isBlockTrade, isAdlTrade, mPnL,
riskId, isLowestRisk, maintenanceMargin, initialMargin, `limit`,
buyRatio, sellRatio, period,
m_close, i_close, p_close
) VALUES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" . implode(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\', $placeholders) . \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
ON DUPLICATE KEY UPDATE
status = VALUES(status),
baseCoin = VALUES(baseCoin),
quoteCoin = VALUES(quoteCoin),
settleCoin = VALUES(settleCoin),
launchTime = VALUES(launchTime),
deliveryTime = VALUES(deliveryTime),
priceScale = VALUES(priceScale),
minLeverage = VALUES(minLeverage),
maxLeverage = VALUES(maxLeverage),
leverageStep = VALUES(leverageStep),
minPrice = VALUES(minPrice),
maxPrice = VALUES(maxPrice),
tickSize = VALUES(tickSize),
minOrderQty = VALUES(minOrderQty),
maxOrderQty = VALUES(maxOrderQty),
qtyStep = VALUES(qtyStep),
fundingInterval = VALUES(fundingInterval),
copyTrading = VALUES(copyTrading),
unifiedMarginTrade = VALUES(unifiedMarginTrade),
deliveryFeeRate = VALUES(deliveryFeeRate),
postOnlyMaxOrderQty = VALUES(postOnlyMaxOrderQty),
upperLimitPrice = VALUES(upperLimitPrice),
lowerLimitPrice = VALUES(lowerLimitPrice),
time = VALUES(time),
updated_at = NOW(),
lastPrice = VALUES(lastPrice),
prevPrice24h = VALUES(prevPrice24h),
price24hPcnt = VALUES(price24hPcnt),
highPrice24h = VALUES(highPrice24h),
lowPrice24h = VALUES(lowPrice24h),
openInterest = VALUES(openInterest),
markPrice = VALUES(markPrice),
indexPrice = VALUES(indexPrice),
fundingRate = VALUES(fundingRate),
prevPrice1h = VALUES(prevPrice1h),
openInterestValue = VALUES(openInterestValue),
turnover24h = VALUES(turnover24h),
volume24h = VALUES(volume24h),
nextFundingTime = VALUES(nextFundingTime),
predictedDeliveryPrice = VALUES(predictedDeliveryPrice),
basisRate = VALUES(basisRate),
ask1Size = VALUES(ask1Size),
bid1Price = VALUES(bid1Price),
ask1Price = VALUES(ask1Price),
bid1Size = VALUES(bid1Size),
`start` = VALUES(`start`),
`open` = VALUES(`open`),
`high` = VALUES(`high`),
`low` = VALUES(`low`),
`close` = VALUES(`close`),
volume = VALUES(volume),
turnover = VALUES(turnover),
execId = VALUES(execId),
price = VALUES(price),
size = VALUES(size),
side = VALUES(side),
isBlockTrade = VALUES(isBlockTrade),
isAdlTrade = VALUES(isAdlTrade),
mPnL = VALUES(mPnL),
riskId = VALUES(riskId),
isLowestRisk = VALUES(isLowestRisk),
maintenanceMargin = VALUES(maintenanceMargin),
initialMargin = VALUES(initialMargin),
`limit` = VALUES(`limit`),
buyRatio = VALUES(buyRatio),
sellRatio = VALUES(sellRatio),
period = VALUES(period),
m_close = VALUES(m_close),
i_close = VALUES(i_close),
p_close = VALUES(p_close)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
}
} else {
sleep(5);
}
if ($cycle_count % 50 === 0 && function_exists(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'gc_collect_cycles\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')) {
gc_collect_cycles();
}
} catch (Throwable $e) {
sleep(3);
}
sleep(30);
}
최근 "데몬" 데이터