Вы должны войти, чтобы создавать сообщения и темы.

Пробую изучать C#. Нужен совет/наставление! [Решено]

Всем, доброго времени!
Говорят, что языки программирования, лучше учить зная направление, имея какие-то определённые задачи...
Я раньше не сталкивался с кодом, но всегда хотелось что-то попробовать.
Сейчас есть пару тройку определенных задач, но я совсем не знаю с чего начать... Хотел бы спросить совета, возможно вы меня направите сразу в нужно русло, кстати, начал смотреть уроки Хачатура, дошел до 23, вроде бы, урока, там работа со строками.
Попробую описать первую задачу. В целом, у меня есть на неё решение, на языке Python (писал соответственно не я), но оно не совсем полное. Прикрепляю код

Спойлер

import requests
import xml.etree.ElementTree as ET
import os

WorkAmountsUsdt = input('Введите 5 рабочих объемов в USDT через пробел и нажмите Enter\nПример: 100 200 300 400 33\n')
WorkAmountsUsdt = list(map(int, WorkAmountsUsdt.split(' ')))

if len(WorkAmountsUsdt) != 5:
    exit('Объемов должно быть 5')

exchangeInfo = requests.request("GET", "https://www.binance.com/fapi/v1/exchangeInfo").json()
prices = requests.request("GET", "https://www.binance.com/fapi/v1/ticker/price").json()
# print(prices)
futures_prices = {}
for price in prices:
    futures_prices[price["symbol"]] = price["price"]


def work_amount(WorkAmountsUsdt, price, stepSize):
    price = float(price)
    stepSize = float(stepSize)
    WorkAmountsLots = []
    for wa in WorkAmountsUsdt:
        result = wa / price // stepSize * stepSize
        # print(wa)
        # print(result)
        if stepSize < 1:
            WorkAmountsLots.append(round(float(result), len(symbol["filters"][1]["stepSize"].split('.')[1])))
        elif stepSize == 1 or result % 1 == 0:
            WorkAmountsLots.append(int(result))
    # print(WorkAmountsLots)
    return WorkAmountsLots


futures_all_work_amounts_lots = {}

print('symbol, price, stepSize, WorkAmountsUsdt')
for symbol in exchangeInfo["symbols"]:
    try:
        wa = work_amount(WorkAmountsUsdt, futures_prices[symbol["symbol"]], symbol["filters"][2]["stepSize"])
        futures_all_work_amounts_lots[symbol["symbol"]] = wa
        print(symbol["symbol"], futures_prices[symbol["symbol"]], symbol["filters"][2]["stepSize"], wa)
    except:
        pass
        # print(symbol["symbol"], 'не удалось рассчитать')

# # тест
# for f in futures_all_work_amounts_lots.items():
#     print(f)
# exit()


# Запись в Cscalp
def update_work_amounts_in_cscalp_tmp(file, wa):
    tmp = ET.ElementTree(file=file)
    for user_levels in tmp.iter('First_WorkAmount'):
        user_levels.set('Value', f'{wa[0]}')
    for user_levels in tmp.iter('Second_WorkAmount'):
        user_levels.set('Value', f'{wa[1]}')
    for user_levels in tmp.iter('Third_WorkAmount'):
        user_levels.set('Value', f'{wa[2]}')
    for user_levels in tmp.iter('Fourth_WorkAmount'):
        user_levels.set('Value', f'{wa[3]}')
    for user_levels in tmp.iter('Fifth_WorkAmount'):
        user_levels.set('Value', f'{wa[4]}')
    tmp.write(file, "UTF-8")


input('\nРабочие объемы рассчитаны\nУбедитесь что Cscalp не запущен и нажмите Enter')

exchange_name = 'BINANCE'
for file in os.listdir():
    # print(file)
    try:
        exchange, spot_or_fut, setting_name, n = file.split('.')
        symbol, settings, key = setting_name.split('_')
        # print(file, cscalp_levels_format(all_levels[symbol_name]))
        if spot_or_fut == 'CCUR_FUT' and exchange_name[0:4] in exchange:
            wa = futures_all_work_amounts_lots[symbol]
            update_work_amounts_in_cscalp_tmp(file, wa)
    except:
        pass

print('Запись завершена. Можно запускать Cscalp')

 

, там его не много, 80 строк... Но я хотел бы написать всё сам на C# Windows Forms, и дополнить под мои нужды ещё некоторыми расчетами, не знаю, возможно ли это для меня?! 😁
Задача кода заключается в следующем:
Надо получить данные с биржи, а именно котировки и их цены, пример: "symbol":"ADAUSDT","price":"0.33570". По этой ссылке можно получить актуальные данные (она же используется в коде на Python)  с биржи, они там представлены тупо в одну строку. Далее нужно рассчитать объём в монетах, исходя из желаемого объема в USDT. Что бы понятнее было, обратимся к примеру выше, получится следующее: цена монеты 0.33570, желаемый объем 1000$, значит 1000$ / 0.33570 = 2 978,85 монет и так надо сделать 5 расчётов (например для 1000$ для 500$, 250$, 100$, 3000$) Своего рода мини калькулятор получился. Далее надо получившиеся данные (2 978,85 и ещё 4) записать в файл, точнее отредактировать имеющийся файл, который относится к этой монете (у каждой монеты свой файл, монет около 170). Файл формата ".tmp" следующего вида.
Спойлер

<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <DOM>
    <FilledAt Value="1500000" />
    <AutoScroll Value="True" />
    <ScrollStepTurbo Value="100" />
    <StringHeight Value="10" />
    <BigAmount Value="1500000" />
    <HugeAmount Value="3000000" />
    <PlayBigAmount Value="False" />
    <PlayHugeAmount Value="False" />
    <RulerDataType Value="2" />
    <FindIcebergOrders Value="False" />
    <PlayIcebergOrders Value="False" />
    <IcebergSuspectedFrom Value="999999" />
    <IcebergFactor Value="2" />
    <Focus_TSpreadFTick Value="True" />
    <FatLevelsFactor Value="50" />
    <SlimLevelsFactor Value="10" />
    <PanelWidth Value="126" />
    <UserLevels Value="" />
    <UserSignalPriceLevels Value="" />
    <PlayUserSignalPriceLevels Value="True" />
  </DOM>
  <TICK_PANEL>
    <ShowTicksFrom Value="8500" />
    <HideFilteredTicks Value="True" />
    <TicksStyle Value="DotsLines" />
    <TicksWeight Value="1" />
    <SumTicks_Period Value="250" />
    <PanelWidth Value="81" />
    <BigAmount Value="999999" />
    <PlayBigAmount Value="False" />
  </TICK_PANEL>
  <CLUSTER_PANEL>
    <FilledAt Value="4000000" />
    <ShowClusterPanel Value="True" />
    <TimeFrame Value="5" />
    <GridWidth Value="288" />
    <ClusterStyleText Value="Summ" />
    <ClusterStyleColor Value="BlackBalance" />
    <PanelWidth Value="30" />
  </CLUSTER_PANEL>
  <COMMON_PANEL>
    <PriceAggregationStep Value="2" />
    <PriceAggregationFactor Value="1" />
    <MaxAmountZeroDigits Value="0" />
    <ReduceAmountThousands Value="True" />
    <ShowAdditiveCursor Value="True" />
  </COMMON_PANEL>
  <TRADING>
    <First_WorkAmount Value="2 978" /> //строки с теми самыми объёмами
    <Second_WorkAmount Value="1 489" />
    <Third_WorkAmount Value="744" />
    <Fourth_WorkAmount Value="297" />
    <Fifth_WorkAmount Value="8 936" />
    <ActiveWorkAmountKey Value="5" />
    <IsWorkAmountInMoneyMode Value="True" />
    <ThrowLimitTo Value="100" />
    <StopLoss_Steps Value="0" />
    <TakeProfit_Steps Value="0" />
    <StopLimitOrdersThrowRange Value="0" />
    <StopOrdersThrowRange Value="0" />
    <IsServerStopOrders Value="True" />
    <StopOrdersMethod_TPricesFTick Value="False" />
    <AveragingMethod Value="Dispatcher" />
    <PlaySoundOnTrade Value="True" />
    <ShowProfitType Value="2" />
  </TRADING>
</Settings>

 

Вот и вся задача.
Код, который я прикрепил на Python, делает это. Но повторюсь, хочется понять, как это всё реализовать на C# и иметь возможность добавлять свои "хотелки, расчёты".
На данном этапе, у меня получается, в Windows Forms, реализовать только получение монет (так же в одну строку) в файл, ну или вывести их в textBox. Это получилось быстро с помощью уроков Хачатура. А вот дальше стал вопрос, что мне надо учить или с чем разбираться, что бы достичь желаемого.
Текст получился не маленький, всем, заранее, благодарность за прочтение, ну и возможную помощь/подсказки!

Евгений, приветствую 🖐
Всё, что нужно для вашей задачи будет далее в уроках. И как получить по API информацию и как её распарсить, а также как записать в файл. Про всё это и не только далее в уроках.

Лайкнул Psydiant
Psydiant
Цитата: Сергей от 16.11.2022, 14:49

Евгений, приветствую 🖐
Всё, что нужно для вашей задачи будет далее в уроках. И как получить по API информацию и как её распарсить, а также как записать в файл. Про всё это и не только далее в уроках.

Понял, благодарю! Я просто ещё почему спросил, потому что зная Хачатура, точнее его произведение Win 10 Tweaker, сразу прикинул, что уроки будут, в большей степени, по работе с реестром и прочим, а это, в свою очередь, получается не много не то направление, которое мне надо. Значит ошибаюсь, ну я и говорю, в этом деле я совсем новичок, попробую в свои 32 заставить себя учиться кодить - это достаточно интересно )

Да, с реестром и Windows есть уроки. Поверьте, они Вам тоже пригодятся 😉

Лайкнули Psydiant, Kirill и Евгений
PsydiantKirillЕвгений

Доброго времени! @potapovs Эту тему можно закрыть, кстати. Спасибо.