커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6065
글번호 230811
답변완료
문의드립니다.
제가 문의를 정확히 드리지 못해 죄송합니다.
아래 수식으로 데모해보니 맞지않는 부분이 있습니다.
확인부탁드립니다.
30분봉이 기준이고 거기에 6분봉 조건이 같은 방향이면 매수 매도 진입하는 원칙입니다.
30분봉이 매수신호 나와있으면 6분봉은 매수로만 진입이 되야 합니다.
30분봉이 매도신호 나와있으면 6분봉은 매도로만 진입이 되야 합니다.
* 30분봉
- 매수 신호 조건
1. 30분봉이 이전 10번째 봉 고가 위에 있을 때
단, 현재 캔들이 자기 시가를 깰 때와 앞 캔들의 저가를 깰 때는 매수 신호가 사라지고 다시 회복하면 매수 신호가 나오도록 해주세요.
2. 30분봉이 이전 10번째 봉 고가를 돌파할 때
단, 10번째 봉 고가를 깰 때 매수 신호가 사라지고 다시 돌파하면 매수 신호가 나오도록 해주세요.
- 매도 신호 조건
1. 30분봉이 이전 10번째 봉 저가 아래에 있을 때
단, 현재 캔들이 자기 시가를 돌파할 때와 앞 캔들의 고가를 돌파할 때는 매도 신호가 사라지고 다시 회복하면 매도 신호가 나오도록 해주세요.
2. 30분봉이 이전 10번째 봉 저가를 돌파(깰)할 때
단, 10번째 봉 저가를 돌파할 때 매도 신호가 사라지고 다시 깨면 매도 신호가 나오도록 해주세요.
* 6분봉
- 매수 신호 및 매수 조건
1. 이전 10개 캔들의 최고가를 돌파할 때 매수 신호 및 즉시 매수.
2. 이미 이전 10개 캔들 위에서 시작할 때는 앞 캔들 고가를 돌파할 때 매수 신호 및 즉시 매수
- 매도 신호 및 매도 조건
1. 이전 10개 캔들의 최저가를 돌파할 때 매도 신호 및 즉시 매도.
2. 이미 이전 10개 캔들 아래에서 시작할 때는 앞 캔들 저가를 돌파할 때 매도 신호 및 즉시 매도
## 종가에 진입하는 식에서는 매수는 양봉에만, 매도는 음봉에만 진입하도록 해주세요.
이번 데모에서 이런 문제가 생겨서 남깁니다.
1. 돌파 즉시 매수가 들어가지 않습니다.
2. 30분봉이 30분동안 매수 신호를 유지하고 있는 경우, 6분봉은 이전 5개 캔들 중 최고가를 돌파할 때만 매수 신호가 나오며 매수 진입해야 합니다. 6분봉에서 매도 신호가 나오더라도
30분봉은 매수 신호이니 매도 진입은 하지 않아야 맞는데, 매도 진입이 되고 있습니다.
3. 6분봉에서 이전 10개 캔들의 최고가를 돌파하지 않았는데 매수가 들어가고 있습니다.
아래 수식에서 수정할 부분 확인 수정 부탁드립니다.
감사합니다~~
1 즉시진입
input : ntime1(6),ntime2(30),n(10);
input : StartTime(222500),EndTime(010000);
input : 익절틱수(50),손절틱수(50);
var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0),HH(0),LL(0);
var : Tcond(false),BE1(False),BE2(False),SE1(False),SE2(False);
Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime1;
TF2 = TM%ntime2;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or
(Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or
(Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then
{
H1[0] = H;
L1[0] = L;
For cnt = 1 to 49
{
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
}
}
if H1[0] > 0 and H > H1[0] Then
H1[0] = H;
if L1[0] > 0 and L < L1[0] Then
L1[0] = L;
HH = 0;
LL = 0;
if H1[n] > 0 and L1[n] > 0 Then
{
For cnt = 1 to N
{
if HH == 0 or (HH > 0 and H1[cnt] > HH) Then
HH = H1[cnt];
if LL == 0 or (LL > 0 and L1[cnt] < LL) Then
LL = L1[cnt];
}
}
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or
(Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or
(Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then
{
H2[0] = H;
L2[0] = L;
For cnt = 1 to 49
{
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1];
}
BE1 = False;
BE2 = False;
SE1 = False;
SE2 = False;
}
if H2[0] > 0 and H > H2[0] Then
H2[0] = H;
if L2[0] > 0 and L < L2[0] Then
L2[0] = L;
if Tcond == true Then
{
if MarketPosition <= 0 and HH > 0 Then
Buy("b1",AtStop,HH+PriceScale*1);
if MarketPosition <= 0 and H2[n] > 0 Then
Buy("b2",AtStop,H2[n]+PriceScale*1);
if MarketPosition >= 0 and LL > 0 Then
Sell("s1",AtStop,LL-PriceScale*1);
if MarketPosition >= 0 and L2[n] > 0 Then
Sell("s2",AtStop,L2[n]-PriceScale*1);
if MarketPosition <= 0 and HH > 0 and H2[n] > 0 Then
Buy("b3",AtStop,max(HH,H2[n])+PriceScale*1);
if MarketPosition >= 0 and L1[n] > 0 and L2[n] > 0 Then
Sell("s3",AtStop,min(LL,L2[n])-PriceScale*1);
if H >= HH+PriceScale*1 Then
BE1 = true;
if H >= H2[n]+PriceScale*1 Then
BE2 = true;
if L <= LL-PriceScale*1 Then
SE1 = true;
if L <= H2[n]+PriceScale*1 Then
SE2 = true;
if BE1 == true and BE2 == False Then
Buy("b41",AtStop,H2[n]+PriceScale*1);
if BE1 == False and BE2 == true Then
Buy("b42",AtStop,HH+PriceScale*1);
if SE1 == true and SE2 == False Then
Sell("s41",AtStop,L2[n]-PriceScale*1);
if SE1 == False and SE2 == true Then
Sell("s42",AtStop,LL+PriceScale*1);
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2. 종가진입
input : ntime1(6),ntime2(30),n(10);
input : StartTime(222500),EndTime(010000);
input : 익절틱수(50),손절틱수(50);
var : S1(0),D1(0),TM(0),TF1(0),TF2(0),cnt(0),HH(0),LL(0);
var : Tcond(false),BE1(False),BE2(False),SE1(False),SE2(False);
Array : H1[50](0),L1[50](0),H2[50](0),L2[50](0);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime1;
TF2 = TM%ntime2;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime1 > 1 and TF1 < TF1[1]) or
(Bdate == Bdate[1] and ntime1 > 1 and TM >= TM[1]+ntime1) or
(Bdate == Bdate[1] and ntime1 == 1 and TM > TM[1]) Then
{
H1[0] = H;
L1[0] = L;
For cnt = 1 to 49
{
H1[cnt] = H1[cnt-1][1];
L1[cnt] = L1[cnt-1][1];
}
}
if H1[0] > 0 and H > H1[0] Then
H1[0] = H;
if L1[0] > 0 and L < L1[0] Then
L1[0] = L;
HH = 0;
LL = 0;
if H1[n] > 0 and L1[n] > 0 Then
{
For cnt = 1 to N
{
if HH == 0 or (HH > 0 and H1[cnt] > HH) Then
HH = H1[cnt];
if LL == 0 or (LL > 0 and L1[cnt] < LL) Then
LL = L1[cnt];
}
}
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime2 > 1 and TF2 < TF2[1]) or
(Bdate == Bdate[1] and ntime2 > 1 and TM >= TM[1]+ntime2) or
(Bdate == Bdate[1] and ntime2 == 1 and TM > TM[1]) Then
{
H2[0] = H;
L2[0] = L;
For cnt = 1 to 49
{
H2[cnt] = H2[cnt-1][1];
L2[cnt] = L2[cnt-1][1];
}
BE1 = False;
BE2 = False;
SE1 = False;
SE2 = False;
}
if H2[0] > 0 and H > H2[0] Then
H2[0] = H;
if L2[0] > 0 and L < L2[0] Then
L2[0] = L;
if Tcond == true Then
{
if MarketPosition <= 0 and HH > 0 and C > HH+PriceScale*1 Then
Buy("b1");
if MarketPosition <= 0 and H2[n] > 0 and C > H2[n]+PriceScale*1 Then
Buy("b2");
if MarketPosition >= 0 and LL > 0 and C < LL-PriceScale*1 Then
Sell("s1");
if MarketPosition >= 0 and L2[n] > 0 and C < L2[n]-PriceScale*1 Then
Sell("s2");
if MarketPosition <= 0 and HH > 0 and H2[n] > 0 and C > max(HH,H2[n])+PriceScale*1 Then
Buy("b3");
if MarketPosition >= 0 and L1[n] > 0 and L2[n] > 0 and C < min(LL,L2[n])-PriceScale*1 Then
Sell("s3");
if C >= HH+PriceScale*1 Then
BE1 = true;
if C >= H2[n]+PriceScale*1 Then
{
BE2 = true;
}
if C <= LL-PriceScale*1 Then
SE1 = true;
if C <= H2[n]+PriceScale*1 Then
SE2 = true;
if BE1 == true and BE2 == true and (BE1[1] == False or BE2[1] == False) Then
Buy("b4");
if SE1 == true and SE2 == true and (SE1[1] == true or SE2 == False) Then
Sell("s4");
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2021-10-28
638
글번호 153207
신대륙발견 님에 의해서 삭제되었습니다.
2021-10-27
17
글번호 153206
답변완료
문의 드립니다.
안녕하세요.
지난번에 작성해주신 수식을 테스트 하는 중에 수정이 필요한 부분이 있어서 문의 드립니다.
작성해주신 코드에서
2번 항목[지표 값이 갱신(새로운 6연속 양봉 발생) 된 이후]
B) [포지션을 보유하고 있을 경우 (A 또는 B에서 진입한 경우)]의
-> 매수 포지션(A)를 손절 또는 수익 발생 후 C 또는 D를 돌파하는 경우 C,D 돌파거래를 각각 한번 거래를 진행한다.
-> 매도 포지션(B)를 손절 또는 수익 발생 후 C 또는 D를 돌파하는 경우 C,D 돌파 거래를 각각 한번 거래를 진행한다.
또한 4번 항목
4. 목표 값 및 손절 값을 도달 못할 시 익일 오전 5:30분 (장 종료 30분전)에 보유 중인 모든 포지션을 자동 청산한다.
추가 부탁드립니다.
제가 직접 코드에 setstopendofday(xtime)을 넣었더니
익일 종가 청산 이후 다음날 거래에서 거래가 안됩니다.
꼭 답변 부탁 드립니다. 매번 감사합니다.
혹시 위에 문의 드린 내용이 구현 가능하지 않는다면 대체 방안을 알려 주시면 감사하겠습니다.
-----------------------------------------------------------------------
A : 최초로 발생한 6연속 양봉의 (최고점)
B : 최초로 발생한 6연속 양봉의 최저점
C : 두번째로 발생한 6연속 양봉의 (최고점)
D : 두번째로 발생한 6연속 양봉의 최저점
거래시간: [진입시간: 금일 오전 11시부터 익일 오전 1:00,
청산시간: 금일 오전 11시부터, 익일 오전 5:30분 (장종료 30분전까지)]
1. 지표 값이 생성(최초로 발생한 6연속 양봉) 된 이후
-> A 돌파 시 한번의 매수 기회 / B 돌파 시 한번의 매도 기회가 주어진다.
예) A돌파 후 B에서 손절 -> B 스위칭 -> A도달시 손절 후 스위칭을 하지 않는다.
예) A돌파 후 목표가 청산 - > B돌파 이후 목표가 청산
- > A 또는 B 다시 돌파시 거래하지 않는다.
목표가: 1) 매수 진입 시: A+ (A-B) / 매도 진입시: B - (A-B)
2) 매수 진입(A 돌파) 시 손절 또는 수익 발생 후 다시 A를 돌파 하여도 거래하지 않는다.
매도 진입(B 돌파) 시 손절 또는 수익 발생 후 다시 B를 돌파 하여도 거래하지 않는다.
손절가: 1) A 돌파 시, B 값에 손절 후 스위칭(최초 B값 진입 시 스위칭 진행) /
B 돌파 시, A 값에 손절 후 스위칭(최초 A값 진입 시 스위칭 진행)
*목표가 및 손절가에 도달하지 못하고 지표 값이 갱신 될 경우 2번으로 넘어간다.
2. 지표 값이 갱신(새로운 6연속 양봉 발생) 된 이후
A) 보유하고 있는 포지션이 없을 경우
-> C 돌파 시 한번의 매수 기회 / D 돌파 시 한번의 매도 기회가 주어진다.
예) C돌파 후 B에서 손절 -> D 스위칭 -> C도달시 손절 후 스위칭을 하지 않는다.
예) C돌파 후 목표가 청산 - > D돌파 이후 목표가 청산
- > C 또는 D 다시 돌파시 거래하지 않는다.
목표가: 1) 매수 진입 시: C + (C-D) / 매도 진입시: D - (C-D)
2) 매수 진입(C 돌파) 시 손절 또는 수익 발생 후 다시 C를 돌파 하여도 거래하지 않는다.
매도 진입(D 돌파) 시 손절 또는 수익 발생 후 다시 D를 돌파 하여도 거래하지 않는다.
손절가: 1) C 돌파 시, D 값에 손절 후 스위칭(최초 D값 진입 시 스위칭 진행) /
D 돌파 시, C 값에 손절 후 스위칭(최초 C값 진입 시 스위칭 진행)
B) 포지션을 보유하고 있을 경우 (A 또는 B에서 진입한 경우)
-> 매수 또는 매도를 이미 진입한 경우 C, D를 이용하여 목표가 및 손절가를 새롭게 갱신한다.
목표가: 1) 매수 진입 시: C + (C-D) / 매도 진입시: D - (C-D)
2) 매수 포지션을 손절 또는 수익 발생 후 C를 돌파하는 경우 단 한번 거래를 진행한다.
매도 포지션을 손절 또는 수익 발생 후 D를 돌파하는 경우 단 한번 거래를 진행한다.
손절가: 1) C 돌파 시, D 값에 손절 후 스위칭(최초 D값 진입 시 스위칭 진행) /
D 돌파 시, C 값에 손절 후 스위칭(최초 C값 진입 시 스위칭 진행)
3. 지표 값이 지속적으로 갱신 될 경우 (E,F / G,H / I,J ....)
-> 2번을 반복한다.
4. 목표 값 및 손절 값을 도달 못할 시 익일 오전 5:30분 (장 종료 30분전)에 보유 중인 모든 포지션을
자동 청산한다.
-------------------------------------------------------------
input : n(6);
input : StartTime(110000),EndTime(010000),Xtime(053000);
var : HH(0),LL(0),Tcond(false);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if Bdate != Bdate[1] Then
{
var1 = 0;
HH = 0;
LL = 0;
Condition1 = False;
Condition2 = False;
}
if (Bdate[n] != Bdate and CountIf(C>O,6) == 6) or
(bdate[n] == bdate and CountIf(C>O,6) == 6 and C[6] < O[6]) Then
{
HH = Highest(H,6);
LL = Lowest(L,6);
}
if Tcond == true and HH > 0 and LL > 0 Then
{
if CrossUp(C,HH) Then
{
if Condition1 == False Then
Buy("b");
Else
ExitShort("sx");
Condition1 = true;
}
if CrossDown(C,LL) Then
{
if Condition2 == False Then
Sell("s");
Else
ExitLong("bx");
Condition2 = true;
}
if MarketPosition == 1 Then
ExitLong("bp",AtLimit,HH+(HH-LL));
if MarketPosition == -1 Then
ExitShort("sp",AtLimit,LL-(HH-LL));
}
-------------------------------------------------
2021-10-27
842
글번호 153205
답변완료
문의드립니다
혹시 이게 가능한지요?
신호가 나오는 캔들의 종가에 매수나 매도 진입인데요.
종가에 바로 진입하지 않고 조정받았다가 종가를 돌파할때 매수나 매도 진입 가능하게
수식을 짤 수 있나요?
즉, 신호가 나왔어도 조정받고 다시 종가를 돌파할 때 매수,
다시 종가를 깰 때 매도, 이렇게 진입이 조정 가능한지 질문 드립니다.
가능하다면
아래 수식에 첨가해 주시면 감사하겠습니다.
input : StartTime(101200),EndTime(114000);
input : Length(20), D1(2);
input : 익절1(30),손절1(30),청산구분시간(103000),익절2(50),손절2(30),익절연속횟수(3),손절연속횟수(2);
var : Tcond(false),profit(0),loss(0);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
profit = 0;
loss = 0;
}
if TotalTrades > TotalTrades[1] Then
{
if IsExitName("bp1.",1) or IsExitName("bp2.",21) or IsExitName("bp1",1) or IsExitName("bp2",21) or
IsExitName("sp1.",1) or IsExitName("sp2.",1) or IsExitName("sp1",1) or IsExitName("sp2",1) Then
profit = profit+1;
Else
profit = 0;
if IsExitName("bl1.",1) or IsExitName("bl2.",1) or IsExitName("bl1",1) or IsExitName("bl2",1) or
IsExitName("sl1.",1) or IsExitName("sl2.",1) or IsExitName("sl1",1) or IsExitName("sl2",1) Then
loss = loss+1;
Else
loss = 0;
}
var1 = BollBandUp(Length,D1);
var2 = BollBandDown(Length,D1);
if Tcond == true Then
{
If CrossUP(H,var1) and (c > o or (C==O and C >= C[1])) and profit < 익절연속횟수 and loss < 손절연속횟수 then
{
Buy("b",OnClose,DEF,1);
if sTime >= StartTime and sTime < 청산구분시간 Then
{
ExitLong("bp1.",AtLimit,C+PriceScale*익절1,"",1,1);
ExitLong("bl1.",AtStop,C-PriceScale*손절1,"",1,1);
}
if sTime >= 청산구분시간 and sTime < Endtime Then
{
ExitLong("bp2.",AtLimit,C+PriceScale*익절2,"",1,1);
ExitLong("bl2.",AtStop,C-PriceScale*손절2,"",1,1);
}
}
If CrossDown(L,Var2) and (C < O or (C==O and C < C[1])) and profit < 익절연속횟수 and loss < 손절연속횟수 then
{
Sell("s",OnClose,DEF,1);
if sTime >= StartTime and sTime < 103000 Then
{
ExitShort("sp1.",AtLimit,C-PriceScale*익절1,"",1,1);
ExitShort("sl1.",AtStop,C+PriceScale*손절1,"",1,1);
}
if sTime >= 103000 and sTime < Endtime Then
{
ExitShort("sp2.",AtLimit,C-PriceScale*익절2,"",1,1);
ExitShort("sl2.",AtStop,C+PriceScale*손절2,"",1,1);
}
}
}
if MarketPosition == 1 Then
{
if sTime >= StartTime and sTime < 청산구분시간 Then
{
ExitLong("bp1",AtLimit,EntryPrice+PriceScale*익절1,"",1,1);
ExitLong("bl1",AtStop,EntryPrice-PriceScale*손절1,"",1,1);
}
if sTime >= 청산구분시간 and sTime < Endtime Then
{
ExitLong("bp2",AtLimit,EntryPrice+PriceScale*익절2,"",1,1);
ExitLong("bl2",AtStop,EntryPrice-PriceScale*손절2,"",1,1);
}
}
if MarketPosition == -1 Then
{
if sTime >= StartTime and sTime < 103000 Then
{
ExitShort("sp1",AtLimit,EntryPrice-PriceScale*익절1,"",1,1);
ExitShort("sl1",AtStop,EntryPrice+PriceScale*손절1,"",1,1);
}
if sTime >= 103000 and sTime < Endtime Then
{
ExitShort("sp2",AtLimit,EntryPrice-PriceScale*익절2,"",1,1);
ExitShort("sl2",AtStop,EntryPrice+PriceScale*손절2,"",1,1);
}
}
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
2021-10-27
766
글번호 153204
답변완료
문의 드립니다.
input : price(83.50);
if MarketPosition == 0 and H < Price Then
Buy("b",AtStop,Price);
ExitLong("Bp",AtLimit,Price+PriceScale*20);
ExitLong("Bl",AtStop,Price-PriceScale*5);
위에 로직은 기준가 설정 후 매수용인데요.
매도 진입 후 손절5틱 익절20틱으로 부탁드립니다.
2021-10-27
613
글번호 153202
답변완료
수고하십니다
수고하십니다
7445번 재차요청입니다
아래 수식은 직전파동 조정대입니다
여기에 추가 요청 합니다
Input:종가사용여부(0),파동선두께(0),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),tl2(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,100) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,100) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == -1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,red);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
TL_SetEnd(TL2,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == -1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == -1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,blue);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
TL_SetEnd(TL2,저[1,3],저[1,4],저[1,1]);
If 수치표시 == -1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
#===============피보나치 되돌림=======================#
Array: fr[15,4](0); // 1:비율, 2:값, 3:라인번호, 4:텍스트번호 <= 2차원 배열입니다.
If Index == 0 Then // 첫번째 칼럼에는 피보나치 비율을
{
fr[1,1] = 0;
fr[3,1] = 0.382;
fr[4,1] = 0.50;
fr[5,1] = 0.618;
fr[7,1] = 1;
}
If 최종꼭지점[1] == "고점" and 최종꼭지점 == "저점" Then // 추세가 바뀔 때 피보나치 라인을 계산
{
for j = 1 to 15
{
If fr[j,3] > 0 Then TL_Delete(fr[j,3]); // 기존의 라인은 지우고
fr[j,2] = 고[1,1] - ((고[1,1] - 저[2,1]) * fr[j,1]); // 피보나치 비율을 곱해서 계산
fr[j,3] = TL_New(고[1,3],고[1,4],fr[j,2],sDate,sTime,fr[j,2]); // 라인을 생성
TL_SetExtRight(fr[j,3],true);
}
}
Else If 최종꼭지점[1] == "저점" and 최종꼭지점 == "고점" Then
{
for j = 1 to 15
{
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
fr[j,2] = 저[1,1] + ((고[2,1] - 저[1,1]) * fr[j,1]);
fr[j,3] = TL_New(저[1,3],저[1,4],fr[j,2],sDate,sTime,fr[j,2]);
TL_SetExtRight(fr[j,3],true);
}
}
Else // 추세변동이 없으면 기존 피보나치 라인을 연장한다.
{
for j = 1 to 15
{
TL_SetEnd(fr[j,3],sDate,sTime,fr[j,2]);
}
}
for j = 1 to 15 {
If 수치표시 == 1 Then
{
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
fr[j,4] = Text_New(고[1,3],고[1,4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 0, 1);
Text_SetColor(fr[j,4], Lgreen);
Text_SetLocation(fr[j,4], sdate, stime, fr[j,2]);
}
If 수치표시 == 1 Then
{
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
fr[j,4] = Text_New(저[1,3],저[1,4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 0, 1);
Text_SetColor(fr[j,4], Lgreen);
Text_SetLocation(fr[j,4], sdate, stime, fr[j,2]);
}
2021-10-27
769
글번호 153201
답변완료
수식 부탁드립니다.
첨부된 이미지 같이 가격 캔들과 다음수식과 다이버전스가 발생했을때
스윙로우, 스윙하이 함수를 이용하여 보조지표와 캔들 차트에 선이 그려지도록
수식이 작성될수 있을까요?
항상 감사합니다.
Inputs: 카운팅시작일자(20211021), 카운팅시작시간(070000),Period(112);
var : Tcond(false);
var : sum(0);
var : hh(0),ll(0),tl11(0),tl12(0),tl21(0),tl22(0);
if sdate >= 카운팅시작일자 and stime >= 카운팅시작시간 Then
Tcond = true;
if Tcond == true Then
{
if (sdate != sdate[1] and stime >= 카운팅시작시간) or
(sdate == sdate[1] and stime >= 카운팅시작시간 and stime[1] < 카운팅시작시간) Then
if Bdate != Bdate[1] Then
{
var1 = 0;
Var2 = 0;
}
if C > O Then
var1 = var1+ v;
if C < O Then
Var2 = Var2+ v;
Var3 = var1-Var2;
Plot1(Var3,"누적",IFf(Var3 > 0,REd,BLUe));
PlotBaseLine1(0);
2021-10-27
871
글번호 153200
답변완료
지표 질문입니다
1.
전일하고 연속되는 파라볼릭 차트에서 양전환 캔들 포함 5캔들 10캔들 고가,저가를 표시
2.
당일부터 표시되는 파라볼릭 차트에서 양전환 캔들 포함 5캔들 10캔들 고가,저가를 표시
감사합니다
2021-10-28
538
글번호 153199
답변완료
부탁 드립니다.
항상 도움 주셔서 감사 드립니다.
타주기 수식 부탁 드립니다.
1)분봉에서 분봉 사용
2)분봉에서 일봉 사용
input:p(10),sig(30);
var1=obv();
var2=ma(var1,p);
var3=var1-var2;
var4=ma(var3,sig);
참고 수식)
input : n(numeric),ntime(numeric),P(numeric),sig(numeric);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),sum(0),mav(0);
Array : diff[100](0),CC[100](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and ntime > 1 and TM >= TM[1]+ntime) or
(Bdate == Bdate[1] and ntime == 1 and TM > TM[1]) Then
{
2021-10-27
765
글번호 153198