커뮤니티

강화학습 C코드를 예스트레이더 코드로 변경하고자합니다.

프로필 이미지
퀀텀프로
2023-11-05 20:26:02
943
글번호 173733
답변완료
항상 도움주셔서 감사드립니다. 아래와 같이 간단한 강화학습 Q learning C 코드를 주식 ETF 거래하는 예스트레이더 코드로 변경하고자 하는데 몇 일하다가 실패했습니다. TT 변경가능할까요? NUM_STOCKS 는 주식의 갯수로 2이고 (가령 ETF 채권과 주식 2 종류로 거래를 하는 가정) ACTION은 매수(=1) 아니면 매도(=0) 입니다. 항상 감사드립니다 ============================================================= #define NUM_STOCKS 2 #define DAYS 100 #define ACTIONS 2 #define ALPHA 0.2 #define GAMMA 0.8 double stock_prices[NUM_STOCKS][DAYS]; double q_values[NUM_STOCKS][ACTIONS]; int choose_action(int stock) { return rand() % ACTIONS; } void calculate_q_values(int stock, int action, double reward, int next_stock) { double max_next_action = 0; for (int i = 0; i < ACTIONS; i++) { if (q_values[next_stock][i] > max_next_action) { max_next_action = q_values[next_stock][i]; } } q_values[stock][action] = (1 - ALPHA) * q_values[stock][action] + ALPHA * (reward + GAMMA * max_next_action); } int main() { srand(time(0)); // Fill stock_prices with some random data or use actual stock prices data // ... // Initialize Q-values for (int i = 0; i < NUM_STOCKS; i++) { for (int j = 0; j < ACTIONS; j++) { q_values[i][j] = 0; } } // Training loop for (int day = 0; day < DAYS - 1; day++) { for (int stock = 0; stock < NUM_STOCKS; stock++) { int action = choose_action(stock); double reward = stock_prices[stock][day + 1] - stock_prices[stock][day]; int next_stock = (action == 0) ? stock - 1 : stock + 1; calculate_q_values(stock, action, reward, next_stock); } } // Print learned Q-values printf("Learned Q-values:₩n"); for (int i = 0; i < NUM_STOCKS; i++) { for (int j = 0; j < ACTIONS; j++) { printf("%.2f₩t", q_values[i][j]); } printf("₩n"); } return 0; }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-11-06 14:38:40

안녕하세요 예스스탁입니다. 올려주신 내용은 관련언어에 능숙하지 않아 변환해 드리기 어렵습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요 > 퀀텀프로 님이 쓴 글입니다. > 제목 : 강화학습 C코드를 예스트레이더 코드로 변경하고자합니다. > 항상 도움주셔서 감사드립니다. 아래와 같이 간단한 강화학습 Q learning C 코드를 주식 ETF 거래하는 예스트레이더 코드로 변경하고자 하는데 몇 일하다가 실패했습니다. TT 변경가능할까요? NUM_STOCKS 는 주식의 갯수로 2이고 (가령 ETF 채권과 주식 2 종류로 거래를 하는 가정) ACTION은 매수(=1) 아니면 매도(=0) 입니다. 항상 감사드립니다 ============================================================= #define NUM_STOCKS 2 #define DAYS 100 #define ACTIONS 2 #define ALPHA 0.2 #define GAMMA 0.8 double stock_prices[NUM_STOCKS][DAYS]; double q_values[NUM_STOCKS][ACTIONS]; int choose_action(int stock) { return rand() % ACTIONS; } void calculate_q_values(int stock, int action, double reward, int next_stock) { double max_next_action = 0; for (int i = 0; i < ACTIONS; i++) { if (q_values[next_stock][i] > max_next_action) { max_next_action = q_values[next_stock][i]; } } q_values[stock][action] = (1 - ALPHA) * q_values[stock][action] + ALPHA * (reward + GAMMA * max_next_action); } int main() { srand(time(0)); // Fill stock_prices with some random data or use actual stock prices data // ... // Initialize Q-values for (int i = 0; i < NUM_STOCKS; i++) { for (int j = 0; j < ACTIONS; j++) { q_values[i][j] = 0; } } // Training loop for (int day = 0; day < DAYS - 1; day++) { for (int stock = 0; stock < NUM_STOCKS; stock++) { int action = choose_action(stock); double reward = stock_prices[stock][day + 1] - stock_prices[stock][day]; int next_stock = (action == 0) ? stock - 1 : stock + 1; calculate_q_values(stock, action, reward, next_stock); } } // Print learned Q-values printf("Learned Q-values:₩n"); for (int i = 0; i < NUM_STOCKS; i++) { for (int j = 0; j < ACTIONS; j++) { printf("%.2f₩t", q_values[i][j]); } printf("₩n"); } return 0; }