항상 도움주셔서 감사드립니다.
아래와 같이 간단한 강화학습 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;
}