커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1649
글번호 230811
답변완료
해외선물 자금관리 (계약수 조절) 수식 문의좀 드립니다.
안녕하세요 항상 고생이 많으십니다.
예스글로벌 해외선물 시스템 트레이딩 수식 문의드립니다.
매수매도 진입전략만 운용하다가
계약수를 매번 손으로 조정하기가 어려워서
수식으로 자동화시키려고 하는데요,
쓰려고하는 자금관리기법은 흔히 알려진 윌리엄스 자금관리 방식입니다.
계좌 총 잔고가 늘어날수록 계약수를 늘이고
계좌 잔고가 줄어들수록 계약수를 줄이는 방식인데요 (최소 1계약은 유지)
안전마진 = MDD + Micro e-mini나스닥 현재 증거금
가 되어서 Netprofit이 안전마진만큼 쌓이면 1계약을 추가하는 방식입니다.
반대로 운용중에 안전마진만큼 손해가 발생하면 1계약을 줄입니다.
이 내용을 토대로 수식을 작성하려고하는데,
1. MDD는 MaxIDDrawDown으로 불러올 수 있던데, 이건 포인트 기준으로 불러와지는 건가요?
아니면 거래통화인 USD기준으로 불러와 지는건지 헷갈립니다.
2. GetUnclearedDeposits 함수는 예탁총액을 불러온다고 하는데, 이것도 usd기준인지 원화
기준인지 궁금합니다. 또한 netprofit은 포인트 기준인가요?
3. 위의 윌리엄스 자금관리 기법을 적용하려면 수식을 어떤식으로 작성해야할지..
예제한번만 부탁드립니다.
예시가 있으면 그 이후에는 응용해서 할 수 있을 것 같은데 조금 막연하네요
바쁘신데 감사드립니다!
2022-09-07
1113
글번호 162047
답변완료
수식
안녕하세요.
지표 파일은 YesLang -> indication 넣어서 챠트에 구동 시키면 됩니다.
강조 파일은 어디에 넣어서 챠트에 구동 시켜야하느지 질문드립니다.
감사합니다.
2022-09-07
1380
글번호 162045
답변완료
쌍바닥 plot 색상
Input : af(0.02), maxAF(0.2),상(1),하(1);
Var : Sarv(0),tl(0),T(0);
Sarv = sar(af,maxAF);
Plot1(0);
If crossup(c,Sarv) Then
{
T = 1;
var1 = Sarv;
Var2 = var1[1];
Condition1 = False;
if var1 <= var2+PriceScale*상 and var1 >= var2-PriceScale*하 and var2 > 0 Then
{
Condition1 = true;
Plot1(1);
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
}
if CrossDown(C,sarv) Then
T = -1;
Else
{
if T == 1 Then
{
if sarv < var1 Then
{
var1 = sarv;
if Condition1 == False and var1 <= var2+PriceScale*상 and var1 >= var2-PriceScale*하 and var2 > 0 Then
{
Condition1 = true;
Plot1(1);
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
}
}
}
"직전 저점"보다 낮아진 쌍바닥은 파랑,같은 쌍바닥은 그린,높아진 쌍바닥은 빨강,
이런식으로 각기 다른 세가지 색으로 출력.알람은 있어도 되고 없어도 무관. 감사합니다.
2022-09-07
1480
글번호 162044
답변완료
분봉에서 일봉이평값을 만들어 사용하고자 합니다. 도움 부탁드립니다.
안녕하세요. 늘 도움 주셔서 항상 감사드립니다.
첨부한 그림과 같이 분봉에서 일봉의 5일선 값을 만들어 사용하고자 합니다.
그런데, 일봉에서는 4/26일의 값을 4/25일의 종가를 사용하여 분봉을 만들고 있는데,
분봉에서는 4/26일의 데이터가 없어서, 4/27일부터 분봉의 일봉이평값과 일봉의 5일선 값이 서로 다른 결과가 나와서 애를 먹고 있습니다.
이러한 문제를 어떻게 해결할 수 있을까요?
도움 부탁드립니다.
고맙습니다.
2022-09-06
1733
글번호 162043
답변완료
문의합니다
안녕하세요
if marketposition == 0 then
if 매수조건1 then
buy("매수1")
if marketposition == 0 then
if 매수조건2 then
buy("매수2")
이렇게 매수1과 매수2가 있을 때, 조건당 1계약 진입조건이라고 할때
똑같은 봉에서 매수1과 매수2가 동시에 조건을 만족하면
중복으로 매수1과 매수2가 동시에 들어가서 총 2계약이 매수에 들어가나요?
아님 두 개 중 한 계약만 매수가 들어가나요? 1계약만 진입하면 우선순위가 어떻게 되나요?
2022-09-07
1300
글번호 162042
답변완료
수식문의
늘 친절하신 답변에 감사드리며 관리자님께 아래 두가지 요청드립니다.
1. 종목검색 수식 검증 및 5일전 검색수식으로 변환
2. 수식을 시스템 신호수식으로 변환 부탁드립니다.
Input: P1(240);
var:A(0);
A=MAX(H[1],H[2]);
if H>highest(H,5)[1] Then
{ var1=(A+L)/2; Var2=L; }
if L<highest(L,5)[1] Then
var3=A;
if var1>0 Then
if L<lowest(L,5)[1] Then
var4=A;
Var5=ma(C,P1);
if var4>0 Then
if ((CrossUp(c,var2)) or (var2>=o and var2<c)) and
var4>=o and var4<c and var5>=L and c>o Then
find(1);
2022-09-06
1304
글번호 162041
답변완료
수식 부탁드립니다.
안녕하세요.
아래의 키움증권 신호 수식을
예스트레이더 종목검색으로 수식으로 변환 요청드립니다.
max( avg(C,short), avg(C,mid), avg(C,long)) < min( avg(C,short), avg(C,mid), avg(C,long)) * (1+Percent/100) &&
C > highest(H(1),5) &&
C(1) <= highest(H(2),5) &&
CrossUp(h,BBandsUp(Period,D1))
short 5
mid 20
long 60
Period 20
percent 5
D1 2
이상입니다.
2022-09-06
1900
글번호 162040
답변완료
지표수정부탁합니다
안녕하세요
항상 지면으로 정말 감사하게 생각합니다 고맙습니다
디마크 지표 이름도 같이 표시할수 있도록 부탁드립니다
수고하세요
If DayClose(1) > DayOpen(1) Then
{
value1 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayHigh(1))/2-DayLow(1);
value2 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayHigh(1))/2-DayHigh(1);
}
Else If DayClose(1) < DayOpen(1) Then
{
value1 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayLow(1))/2-DayLow(1);
value2 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayLow(1))/2-DayHigh(1);
}
Else
{
value1 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayClose(1))/2-DayLow(1);
value2 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayClose(1))/2-DayHigh(1);
}
Plot1(value1, "Demark분봉상한");
Plot2(value2, "Demark분봉하한");
Plot3((value1+value2)/2, "Demark중심");
var : tx1(0),tx2(0);
if Bdate != Bdate[1] Then
{
tx1 = Text_New(sdate,sTime,value1,NumToStr(Value1,2));
tx2 = Text_New(sdate,sTime,value2,NumToStr(Value2,2));
Text_SetStyle(tx1,0,1);
Text_SetStyle(tx2,0,0);
}
Else
{
Text_SetLocation(tx1,sDate,sTime,value1);
Text_SetLocation(tx2,sDate,sTime,value2);
}
2022-09-06
1859
글번호 162039
답변완료
문의드립니다
1)Input:chngRate(0.3),굵기(1);
input : Per1(0),Per2(23.6),Per3(38.2),Per4(50.0),Per5(61.8),Per6(76.4),Per7(100),Per8(123.6),Per9(161.8);
Var : j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
var : TL11(0),TL12(0),TL13(0),TL14(0),TL15(0),TL16(0),TL17(0),TL18(0),TL19(0);
var : Tx11(0),Tx12(0),Tx13(0),Tx14(0),Tx15(0),Tx16(0),Tx17(0),Tx18(0),Tx19(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Condition1 = Min(valArr[1],valArr[2]) * (1 + (chngRate/100)) < H and lastHiVal < H;
Condition2 = Max(valArr[1],valArr[2]) * (1 - (chngRate/100)) > L and (lastLoVal > L || lastLoVal == 0);
If Condition1 Then { lastHiVal = H; lastLoVal = 0; }
If Condition2 Then { lastLoVal = L; lastHiVal = 0; }
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
value1 = valArr[1]-valArr[2];
TL_Delete(TL11);
TL_Delete(TL12);
TL_Delete(TL13);
TL_Delete(TL14);
TL_Delete(TL15);
TL_Delete(TL16);
TL_Delete(TL17);
TL_Delete(TL18);
TL_Delete(TL19);
TL_SetExtRight(TL11,False);
TL_SetExtRight(TL12,False);
TL_SetExtRight(TL13,False);
TL_SetExtRight(TL14,False);
TL_SetExtRight(TL15,False);
TL_SetExtRight(TL16,False);
TL_SetExtRight(TL17,False);
TL_SetExtRight(TL18,False);
TL_SetExtRight(TL19,False);
TL11 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per1/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per1/100));
TL12 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per2/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per2/100));
TL13 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per3/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per3/100));
TL14 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per4/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per4/100));
TL15 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per5/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per5/100));
TL16 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per6/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per6/100));
TL17 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per7/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per7/100));
TL18 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per8/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per8/100));
TL19 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per9/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per9/100));
TL_SetExtRight(TL11,true);
TL_SetExtRight(TL12,true);
TL_SetExtRight(TL13,true);
TL_SetExtRight(TL14,true);
TL_SetExtRight(TL15,true);
TL_SetExtRight(TL16,true);
TL_SetExtRight(TL17,true);
TL_SetExtRight(TL18,true);
TL_SetExtRight(TL19,true);
TL_SetColor(TL11,Gray);
TL_SetColor(TL12,White);
TL_SetColor(TL13,Gray);
TL_SetColor(TL14,YELLOW);
TL_SetColor(TL15,Gray);
TL_SetColor(TL16,White);
TL_SetColor(TL17,Gray);
TL_SetColor(TL18,Gray);
TL_SetColor(TL19,Gray);
TL_SetSize(TL11,굵기);
TL_SetSize(TL12,굵기);
TL_SetSize(TL13,굵기);
TL_SetSize(TL14,굵기);
TL_SetSize(TL15,굵기);
TL_SetSize(TL16,굵기);
TL_SetSize(TL17,굵기);
TL_SetSize(TL18,굵기);
TL_SetSize(TL19,굵기);
Text_Delete(Tx11);
Text_Delete(Tx12);
Text_Delete(Tx13);
Text_Delete(Tx14);
Text_Delete(Tx15);
Text_Delete(Tx16);
Text_Delete(Tx17);
Text_Delete(Tx18);
Text_Delete(Tx19);
tx11 = Text_New(sdate,stime,TL_GetValue(TL11,sdate,stime),NumToStr(Per1,2)+"%("+NumToStr(TL_GetValue(TL11,sdate,stime),2)+")");
tx12 = Text_New(sdate,stime,TL_GetValue(TL12,sdate,stime),NumToStr(Per2,2)+"%("+NumToStr(TL_GetValue(TL12,sdate,stime),2)+")");
tx13 = Text_New(sdate,stime,TL_GetValue(TL13,sdate,stime),NumToStr(Per3,2)+"%("+NumToStr(TL_GetValue(TL13,sdate,stime),2)+")");
tx14 = Text_New(sdate,stime,TL_GetValue(TL14,sdate,stime),NumToStr(Per4,2)+"%("+NumToStr(TL_GetValue(TL14,sdate,stime),2)+")");
tx15 = Text_New(sdate,stime,TL_GetValue(TL15,sdate,stime),NumToStr(Per5,2)+"%("+NumToStr(TL_GetValue(TL15,sdate,stime),2)+")");
tx16 = Text_New(sdate,stime,TL_GetValue(TL16,sdate,stime),NumToStr(Per6,2)+"%("+NumToStr(TL_GetValue(TL16,sdate,stime),2)+")");
tx17 = Text_New(sdate,stime,TL_GetValue(TL17,sdate,stime),NumToStr(Per7,2)+"%("+NumToStr(TL_GetValue(TL17,sdate,stime),2)+")");
tx18 = Text_New(sdate,stime,TL_GetValue(TL18,sdate,stime),NumToStr(Per8,2)+"%("+NumToStr(TL_GetValue(TL18,sdate,stime),2)+")");
tx19 = Text_New(sdate,stime,TL_GetValue(TL19,sdate,stime),NumToStr(Per9,2)+"%("+NumToStr(TL_GetValue(TL19,sdate,stime),2)+")");
Text_SetStyle(tx11,2,1);
Text_SetStyle(tx12,2,1);
Text_SetStyle(tx13,2,1);
Text_SetStyle(tx14,2,1);
Text_SetStyle(tx15,2,1);
Text_SetStyle(tx16,2,1);
Text_SetStyle(tx17,2,1);
Text_SetStyle(tx18,2,1);
Text_SetStyle(tx19,2,1);
}
}
value1 = valArr[1]-valArr[2];
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetBegin(TL11,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per1/100));
TL_SetEnd(TL11,sDate,sTime,valArr[1]-value1*(per1/100));
TL_SetBegin(TL12,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per2/100));
TL_SetEnd(TL12,sDate,sTime,valArr[1]-value1*(per2/100));
TL_SetBegin(TL13,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per3/100));
TL_SetEnd(TL13,sDate,sTime,valArr[1]-value1*(per3/100));
TL_SetBegin(TL14,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per4/100));
TL_SetEnd(TL14,sDate,sTime,valArr[1]-value1*(per4/100));
TL_SetBegin(TL15,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per5/100));
TL_SetEnd(TL15,sDate,sTime,valArr[1]-value1*(per5/100));
TL_SetBegin(TL16,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per6/100));
TL_SetEnd(TL16,sDate,sTime,valArr[1]-value1*(per6/100));
TL_SetBegin(TL17,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per7/100));
TL_SetEnd(TL17,sDate,sTime,valArr[1]-value1*(per7/100));
TL_SetBegin(TL18,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per8/100));
TL_SetEnd(TL18,sDate,sTime,valArr[1]-value1*(per8/100));
TL_SetBegin(TL19,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per9/100));
TL_SetEnd(TL19,sDate,sTime,valArr[1]-value1*(per9/100));
Text_SetLocation(Tx11,sdate,stime,TL_GetValue(TL11,sdate,stime));
Text_SetLocation(Tx12,sdate,stime,TL_GetValue(TL12,sdate,stime));
Text_SetLocation(Tx13,sdate,stime,TL_GetValue(TL13,sdate,stime));
Text_SetLocation(Tx14,sdate,stime,TL_GetValue(TL14,sdate,stime));
Text_SetLocation(Tx15,sdate,stime,TL_GetValue(TL15,sdate,stime));
Text_SetLocation(Tx16,sdate,stime,TL_GetValue(TL16,sdate,stime));
Text_SetLocation(Tx17,sdate,stime,TL_GetValue(TL17,sdate,stime));
Text_SetLocation(Tx18,sdate,stime,TL_GetValue(TL18,sdate,stime));
Text_SetLocation(Tx19,sdate,stime,TL_GetValue(TL19,sdate,stime));
Text_SetString(Tx11,NumToStr(Per1,2)+"%("+NumToStr(TL_GetValue(TL11,sdate,stime),2)+")");
Text_SetString(Tx12,NumToStr(Per2,2)+"%("+NumToStr(TL_GetValue(TL12,sdate,stime),2)+")");
Text_SetString(Tx13,NumToStr(Per3,2)+"%("+NumToStr(TL_GetValue(TL13,sdate,stime),2)+")");
Text_SetString(Tx14,NumToStr(Per4,2)+"%("+NumToStr(TL_GetValue(TL14,sdate,stime),2)+")");
Text_SetString(Tx15,NumToStr(Per5,2)+"%("+NumToStr(TL_GetValue(TL15,sdate,stime),2)+")");
Text_SetString(Tx16,NumToStr(Per6,2)+"%("+NumToStr(TL_GetValue(TL16,sdate,stime),2)+")");
Text_SetString(Tx17,NumToStr(Per7,2)+"%("+NumToStr(TL_GetValue(TL17,sdate,stime),2)+")");
Text_SetString(Tx18,NumToStr(Per8,2)+"%("+NumToStr(TL_GetValue(TL18,sdate,stime),2)+")");
Text_SetString(Tx19,NumToStr(Per9,2)+"%("+NumToStr(TL_GetValue(TL19,sdate,stime),2)+")");
}
TL_SetSize(TL1,굵기);
TL_SetColor(TL1,black);
2)
INPUTS: LENGTH1(5);
INPUTS: 색1(YELLOW),색2(RED), 굵기(1);
VARS : DEMA1(0),TL(0);
var1= EMA(C,LENGTH1);
value1= EMA(EMa(C,LENGTH1),LENGTH1);
DEMA1 = var1 * 2 - value1;
if C >DEMA1 Then
PLOT1(DEMA1, "DEMA1",GRAY);
Else
PLOT1(DEMA1, "DEMA1",GRAY);
if CrossUp(DEMA1,v1) or CrossUp(DEMA1,v3) Then
{
TL_Delete(tl);
tl = TL_New(sDate,sTime,DEMA1+PriceScale*10,NextBarSdate,NextBarStime,DEMA1+PriceScale*10);
TL_SetColor(tl,RED);
TL_SetSize(tl,4);
TL_SetExtRight(TL,true);
}
if CrossDown(DEMA1,v1) or CrossDown(DEMA1,v3) Then
{
TL_Delete(tl);
tl = TL_New(sDate,sTime,DEMA1+PriceScale*10,NextBarSdate,NextBarStime,DEMA1+PriceScale*10);
TL_SetColor(tl,lGREEn);
TL_SetSize(tl,4);
TL_SetExtRight(TL,true);
}
1번수식에서2번수식(dema)5이평이76.4프로상승크로스레드색수평선
(dema) 5이평이76.4프로하락크로스그린색 수평선
(dema) 5이평이23.6프로상승크로스레드색수평선
(dema) 5이평이23.6프로하락크로스그린색수평선으로나오게수정부탁드립니다~
텍스트가격수치는 삭제 프로테이지만나오게 수정해주세요~
항상노고에 감사드립니다~~
2022-09-06
1796
글번호 162038