• Cортировка строк в массиве?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    uasort(
        $arr,
        fn(int|string $a, int|string $b): int =>
            ($t = is_string($a) <=> is_string($b)) ? -$t : $a <=> $b,
    );
    Ответ написан
    4 комментария
  • Как определить самый больший процент разници в if?

    @rPman
    В чем совет то тебе дать?

    Почему не работает код? так скажи что в нем не так.

    Про получение данных, если тебе нужны ОПЕРАТИВНЫЕ данные, забудь про http rest, используй websocket, binance выдает в поток в 4 тысячи событий по всем парам, подписывайся на них и анализируй, это ты сможешь сделать в одном подключении. Если же все же http rest то внимательно прочитай про лимиты на запросы, они указываются в минуту и на практике еще меньше
    IP Limits

    Every request will contain X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter) in the response headers which has the current used weight for the IP for all request rate limiters defined.
    Each route has a weight which determines for the number of requests each endpoint counts for. Heavier endpoints and endpoints that do operations on multiple symbols will have a heavier weight.
    When a 429 is received, it's your obligation as an API to back off and not spam the API.
    Repeatedly violating rate limits and/or failing to back off after receiving 429s will result in an automated IP ban (HTTP status 418).
    IP bans are tracked and scale in duration for repeat offenders, from 2 minutes to 3 days.
    The limits on the API are based on the IPs, not the API keys.

    p.s. Исторические данные по фьючерсам недоступны (только в пределах текущего квартала)
    я пользовался, минуток тут более чем достаточно:
    https://dapi.binance.com/dapi/v1/continuousKlines?pair={$pair}&contractType={$type}&limit=1500&interval=1m&startTime={$startTime}&endTime={$endTime}"

    Где startTime и endTime нужно устанавливать на основе предыдущих полученных и сохраненных данных
    https://dapi.binance.com/dapi/v1/exchangeInfo
    Даст всю информацию о рынке (без стакана), там же видно где какой тип контракта PERPETUAL/CURRENT_QUARTER/NEXT_QUARTER какое наименование инструмента, типа LTCUSD_230630 или ETHUSD_230331 (там же есть все данные по времени начала и окончания периода), PERP фьючерсы повторяют spot рынок, поэтому для удобства можно эти данные брать

    Если тебе нужен совет по выбору стратегии - собирай исторические данные, проводи на их основе анализ или тестирование (напиши подобие симулятора биржи на которой будешь тестировать свою стратегию).
    Ответ написан
    Комментировать
  • Как заставить JS нормально работать с кодировкой?

    Seasle
    @Seasle Куратор тега JavaScript
    const textDecoder = new TextDecoder('windows-1251');
    const response = await fetch(...);
    const buffer = await response.arrayBuffer();
    const text = textDecoder.decode(buffer);
    Ответ написан
    2 комментария
  • Как вызвать одну функцию из ассоциативного массива?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Можно:
    <?php
    $commands = [
    	'hi' => fn($name) => 'hi, ' . $name, 
    	'hello' => fn($name) => 'hello , ' . $name,
    	'etc' =>fn($name) => 'etc...',
    ];
    
    echo $commands['hi']('John');


    php code online
    Ответ написан
    Комментировать
  • Почему при touchstart на мобильном, срабатывает и click тоже? Как можно исправить?

    @garbagecollected
    Надо в обработку touchstart добавить
    document.body.addEventListener('touchstart', 
      event=>{
        event.preventDefault();
        event.stopPropagation();
        Nunenune(event);
      }
    );

    Тогда событие click не будет вызываться.
    Также есть события pointerdown и проч.
    Это скорее всего решит проблему. Но их использование в вашем случае - это как микроскопом забивать гвозди.
    Ответ написан
    Комментировать