답변완료
강화학습 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;
}
2023-11-05
942
글번호 173733
시스템
답변완료
역배열이평 상승전환
아래 수식은 역배열이평 상승전환 검색 수식입니다.
여기에 전일에 MACD(7,16)가 0선돌파발생을 추가하고 싶습니다.
즉, 전일에 MACD(7,16) 0선돌파 + 금일에 역배열이평 상승전환 종목검색용 수식을
부탁드립니다.
==================================================================================
var : A1(0),A2(0),A3(0),A4(0),A5(0),A6(0),B1(False),B2(False),B3(False),B4(False);
VAR : AA1(0),AA2(0),AA3(0),AA4(0),조건(False);
A1=MA(C,3);
A2=MA(C,5);
A3=MA(C,8);
A4=MA(C,10);
A5=MA(C,20);
A6=MA(C,60);
B1=A1<A5 && A5<A6;
B2=A2<A5 && A5<A6;
B3=A3<A5 && A5<A6;
B4=A4<A5 && A5<A6;
IF B1 TheN {AA1=1;} ElsE {AA1=0;}
IF B2 TheN {AA2=1;} ElsE {AA2=0;}
IF B3 TheN {AA3=1;} ElsE {AA3=0;}
IF B4 TheN {AA4=1;} ElsE {AA4=0;}
조건=AA1[1]+AA2[1]+AA3[1]+AA4[1]>=1 && AA1+AA2+AA3+AA4==0 && C>O;
IF 조건 && !조건[1] TheN
Find(1);
2023-11-05
929
글번호 173732
종목검색
답변완료
거래량 종가
If (C > O) or (C == O and C >= C[1]) Then
{
Plot1(V, "상승거래량");
Plot2(0, "하락거래량");
}
Else
{
Plot1(0, "상승거래량");
Plot2(V, "하락거래량");
}
거래량을 초봉 막대그래프로 보면, 종가가 너무 커서 나머지는 상대적으로 잘 안보입니다.
키높이를 맞추기위해
1. 8시46분부터 15시 35분까지만 출력. 이런식으로 시간대를 설정하여,선물 시초가와 종가를 아예 안보이게 함.
2. 종가만 막대그래프를 완전히 삭제하고 나머지만 출력. (가능하면 시가도 삭제에 포함)
3. 거래량이 2000을 초과하면 막대 표시없이 공란으로하여 2000 이하의 작은것만 표시.
4. 1번과 3번 두 식을 하나로 통합.
5. 2번과 3번 두 식을 하나로 통합. 감사합니다.
2023-11-06
1001
글번호 173729
지표
답변완료
zlsma50선 돌파 시 각도
종목검색에 활용할 수식이 가능할런지 모르지만 요청드려봅니다.
아래는 종가가 ZLSMA50선 돌파를 검색하는 수식입니다.
오늘 질문은 돌파 전일기준 일정기간(예:10봉간=11봉전과 1봉전 비교?))의 ZLSMA50선 각도가 가파른 것(예: 30도 이상)만을 검색하는 수식이 가능한가 입니다.(아래의 ZLSMA와 120이평의 3연속 상승조건은 빼고)
가능하다면 요청드립니다.
==================================================================================
input : length(50),N(3);
var : lsma(0),lsma2(0),eq(0),zlsma(0),Emav(0);
lsma = LRL(c, length);
lsma2 = LRL(lsma, length);
eq= lsma-lsma2;
zlsma = lsma+eq;
Emav = ema(c,120);
if CrossUp(c,zlsma) and
c > Emav and
O >= Emav*0.95 and
countif(zlsma > zlsma[1],N) == N and
countif(Emav > Emav[1],N) == N Then
Find(1);
2023-11-04
783
글번호 173725
종목검색