커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7772
글번호 230811
답변완료
문의드립니다.
변곡점 상하 +/- 5% 위치에 점표시를 하고 싶습니다.
Input:length(30);
   Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),sBar(0),TL1(0),
        고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0),
        저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0);
    Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0),
        저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0),
        고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0),
        고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0),
        저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0),
        저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0);
   var : t(0),ii(0),tx1(0);
#==========================================#
    Condition1 = Highest(C,length) == C and 최종고가 <> C;
    Condition2 = Lowest (C,length) == C and 최종저가 <> C;
처리구분 = "";
If Condition1 and Condition2 Then                // 기간고점과 기간저점 동시 발생
{   
       If 최종변곡점 == "저점" Then 처리구분 = "고점처리";  // 저 - 고 순으로 처리
   Else                         처리구분 = "저점처리";  // 고 - 저 순으로 처리
}   
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
    #==========================================#
If 처리구분 == "고점처리" Then 
   {
       최종고가 = C;                                 // 신규고점을 체크하기 위해 저장
   If 최종변곡점 == "저점" Then
       {
          고9 = 고8;    고9IDX = 고8IDX;
          고8 = 고7;    고8IDX = 고7IDX;
          고7 = 고6;    고7IDX = 고6IDX;
          고6 = 고5;    고6IDX = 고5IDX;
          고5 = 고4;    고5IDX = 고4IDX;
          고4 = 고3;    고4IDX = 고3IDX;
          고3 = 고2;    고3IDX = 고2IDX;
          고2 = 고1;    고2IDX = 고1IDX;
          고1 = C;      고1IDX = Index;
          sBar = Index - 저1IDX;  // 추세선 시작점의 위치, n봉전으로 표시
      TL1  = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1); 
          TL_SetSize(TL1,1);
          TL_SetColor(TL1,ReD);
              tx1 = text_new(sDate[0],sTime[0],고1+0.5,"●");
              Text_SetStyle(tx1,2,1);
              Text_SetColor(tx1,Red);
       }
       Else If 고1 < C Then                    // 1번 고점보다 높은 고가 출현
   {
          고1 = C;  고1IDX = Index;
          TL_SetEnd(TL1,sDate[0],sTime[0],고1);
          // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 
              Text_SetLocation(tx1,sDate[0],sTime[0],고1+0.5);
       }
    /* 고점추세선 */   
       If 고2IDX[1] <> 고2IDX Then  // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
   {
          고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0;
          If 고2 < 고3 Then 
          {
             고추세기울기  = (고2 - 고3)/(고2IDX - 고3IDX);
             고추세시작    = 고3;
             고추세시작IDX = 고3IDX;
          }
          Else If 고2 < 고4 Then 
          {
             고추세기울기  = (고2 - 고4)/(고2IDX - 고4IDX);
             고추세시작    = 고4;
             고추세시작IDX = 고4IDX;
          }
          Else If 고2 < 고5 Then 
          {
             고추세기울기  = (고2 - 고5)/(고2IDX - 고5IDX);
             고추세시작    = 고5;
             고추세시작IDX = 고5IDX;
          }
          Else If 고2 < 고6 Then 
          {
             고추세기울기  = (고2 - 고6)/(고2IDX - 고6IDX);
             고추세시작    = 고6;
             고추세시작IDX = 고6IDX;
          }
          Else If 고2 < 고7 Then 
          {
             고추세기울기  = (고2 - 고7)/(고2IDX - 고7IDX);
             고추세시작    = 고7;
             고추세시작IDX = 고7IDX;
          }
          Else If 고2 < 고8 Then 
          {
             고추세기울기  = (고2 - 고8)/(고2IDX - 고8IDX);
             고추세시작    = 고8;
             고추세시작IDX = 고8IDX;
          }
          Else If 고2 < 고9 Then 
          {
             고추세기울기  = (고2 - 고9)/(고2IDX - 고9IDX);
             고추세시작    = 고9;
             고추세시작IDX = 고9IDX;
          }
          고추세봉개수 = Index - 고추세시작IDX;
          고추세최종   = 고추세기울기 * 고추세봉개수 + 고추세시작;
       }
       Else If 고추세최종[1] > 0 Then
       {
          고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
    
       }
       If 저추세최종[1] > 0 Then
       {
          저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
    
       }
       최종변곡점 = "고점";
    }
    #==========================================#
If 처리구분 == "저점처리" Then 
    {
       최종저가 = C;
       If 최종변곡점 == "고점" then 
       {
          저9 = 저8;    저9IDX = 저8IDX;
          저8 = 저7;    저8IDX = 저7IDX;
          저7 = 저6;    저7IDX = 저6IDX;
          저6 = 저5;    저6IDX = 저5IDX;
          저5 = 저4;    저5IDX = 저4IDX;
          저4 = 저3;    저4IDX = 저3IDX;
          저3 = 저2;    저3IDX = 저2IDX;
          저2 = 저1;    저2IDX = 저1IDX;
          저1 = C;      저1IDX = Index;
          sBar = Index - 고1IDX;
          TL1  = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1); 
          TL_SetSize(TL1,1);
          TL_SetColor(TL1,BluE);
              tx1 = text_new(sDate[0],sTime[0],저1-0.5,"●");
              Text_SetStyle(tx1,2,0);
              Text_SetColor(tx1,Blue);
       }
       Else If 저1 > C then 
       {
          저1 = C;      저1IDX = Index;
          TL_SetEnd(TL1,sDate[0],sTime[0],저1);
              Text_SetLocation(TL1,sDate[0],sTime[0],저1-0.5);
       }
    /* 저점추세선 */   
       If 저2IDX[1] <> 저2IDX Then
       {
          저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0;
     If 저2 > 저3 and 저3 > 0 Then  
          { 
             저추세기울기  = (저2 - 저3)/(저2IDX - 저3IDX); 
             저추세시작    = 저3; 
             저추세시작IDX = 저3IDX; 
          } 
          Else If 저2 > 저4 and 저4 > 0 Then  
          { 
             저추세기울기  = (저2 - 저4)/(저2IDX - 저4IDX); 
             저추세시작    = 저4; 
             저추세시작IDX = 저4IDX; 
          } 
          Else If 저2 > 저5 and 저5 > 0 Then  
          { 
             저추세기울기  = (저2 - 저5)/(저2IDX - 저5IDX); 
             저추세시작    = 저5; 
             저추세시작IDX = 저5IDX; 
          } 
          Else If 저2 > 저6 and 저6 > 0 Then  
          { 
             저추세기울기  = (저2 - 저6)/(저2IDX - 저6IDX); 
             저추세시작    = 저6; 
             저추세시작IDX = 저6IDX; 
          } 
          Else If 저2 > 저7 and 저7 > 0 Then  
          { 
             저추세기울기  = (저2 - 저7)/(저2IDX - 저7IDX); 
             저추세시작    = 저7; 
             저추세시작IDX = 저7IDX; 
          } 
          Else If 저2 > 저8 and 저8 > 0 Then  
          { 
             저추세기울기  = (저2 - 저8)/(저2IDX - 저8IDX); 
             저추세시작    = 저8; 
             저추세시작IDX = 저8IDX; 
          } 
          Else If 저2 > 저9 and 저9 > 0 Then  
          { 
             저추세기울기  = (저2 - 저9)/(저2IDX - 저9IDX); 
             저추세시작    = 저9; 
             저추세시작IDX = 저9IDX; 
          } 
          저추세봉개수 = Index - 저추세시작IDX; 
          저추세최종   = 저추세기울기 * 저추세봉개수 + 저추세시작;
       }
       Else If 저추세최종[1] > 0 Then
       {
          저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작; 
    
       }
       If 고추세최종[1] > 0 Then
       {
          고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
   
       }   
       최종변곡점 = "저점";
        
    }
2023-03-30
1139
글번호 167723
답변완료
문의드립니다
상장일을 나타낼 수 있는 수식이 존재하나요?
2023-03-30
966
글번호 167722
답변완료
안녕하세요?
안녕하세요?
아래 수식은 일간종가라인인데요
주간수식,월간수식 부탁 드립니다.
감사합니다.
Input:종가시간(70000),종가시간2(70000);
if stime <= 종가시간 Then
var1 = DayHigh;
if date != date[1] Then{
var1 = DayHigh;
Condition1 = true;
}
if stime >= 종가시간 and stime <= 종가시간2 Then{
plot1(var1);
}
2023-03-30
788
글번호 167719
답변완료
수식변환문의드립니다~
<키움기준>을 예스랭귀지 검색식으로 부탁드립니다.
1
----------------------------------------------------
AA=(O+H+L+C)/4;
AA1=(C(1)+O(1))/2;
A=LinearRegressionValue(C,50,0);
A1=LinearRegressionValue(A,50,0);
eq= A-A1;
Z=A+eq;
SD=Lowest(L,22)+atr(22)*3;
ap = (HIGH+LOW+CLOSE)/3;
esa = eavg(ap, 10);
d = eavg(abs(ap - esa), 10);
ci = (ap - esa) / (0.015 * d);
wt1 = eavg(ci, 21);
wt2 = avg(wt1,4);
WT=(wt1-wt2)*2;
AA>AA1 && (CROSSUP(AA,SD) OR CROSSUP(AA,Z)) && WT>=0;
=====================================================
2.키움에 아래 라인을 돌파하는 캔들을
검색식으로 부탁드립니다.
----------------------------------------
S=(O-avg(L,20))/stdev(L,20);
valuewhen(1,crossup(s,0),c)
----------------------------------------
2023-03-30
1057
글번호 167711
다이버 님에 의해서 삭제되었습니다.
2023-03-30
86
글번호 167697
답변완료
수식 변경 부탁드립니다
옵션 기준가 = valuewhen(1,date==월시작일,daylow());
이베스트증권의 수식입니다
예스챠트로 변환을 부탁드립니다
감사합니다
2023-03-30
1116
글번호 167694
답변완료
수식 문의 드립니다
항상 감사드립니다.
아래의 두 가지 수식에 이격도 (이평이 서로 너무 벌어지면 진입금지)를
추가해주시면 감사드리겠습니다,
저번처럼 외부변수로 해주시면 정말 감사드리겠습니다.(예 Input : p1(5), p2(20), Per(5);)
(1번)
Input : 매수장기이평길이(200), 매수단기이평길이(10), 매수RSI길이(2), 매수RSI기준(5), 매도이평(10), 매도RSI길이(2), 매도RSI기준(75);
Var : longCondition(False), exitCondition(False);
longCondition = ma(close, 매수장기이평길이) < close and ma(close, 매수단기이평길이) > Close and rsi(매수RSI길이) < 매수RSI기준;
exitCondition = ma(close, 매도이평) < Close and rsi(매도RSI길이) > 매도RSI기준;
if longCondition Then
{
Buy("매수", AtMarket);
}
if exitCondition Then
{
Sell("매도", AtMarket);
}
(2번)
Input:
AvgLen(30),
PrctRLen(10),
BuyLvl(20),
SellLvl(80);
IF CurrentBar > 1 and Average(Close,AvgLen) > Average(Close,AvgLen)[1] and
PercentR(PrctRLen) < BuyLvl Then Buy();
IF CurrentBar > 1 and Average(Close,AvgLen) < Average(Close,AvgLen)[1] and
PercentR(PrctRLen) > SellLvl Then Sell();
2023-03-30
1027
글번호 167692
답변완료
지표 수식 문의 드립니다.
수고가 많으십니다!!
다름이 아니라 하기 조건의 지표 수식을 좀 부탁 드리겠습니다.
변수
1. 분봉 2분 3분 5분 etc.
2. 고가 저가 차이 ( 고가 - 저가 )
3. 분봉 거래량
출력
거래량 / (고가 - 저가 ) 의 순수값, 누적값 또는 증감 으로 선택 가능 하게 지표로 출력.
이상입니다.
2023-03-30
1388
글번호 167691
답변완료
저번에 질문드렸던것입니다. 수정부탁드립니다^^
수식에 오류가 있는것 같아요^^
청산을 하지 않습니다^^
좋은.. 건가요^^?
손절이 없어요
손실중이면 몇일이고 청산을 하지 않습니다^^
원웨이장 만나면 나락갈거 같아요~
감사하지만 수정 부탁드립니다^^
귀찮게 해드려 죄송합니다^^
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : Re : Re : 질문이 많아 죄송합니다.
>
안녕하세요
예스스탁입니다.
식을 수정했습니다.
상승전환시 기존에 진입한 매도포지션이
수익이면 청산하고 매수진입 실행
손실이면 청산만 실행
하락전환시 기존에 진입한 매수포지션이
수익이면 청산하고 매도진입 실행
손실이면 청산만 실행
위 구조로 동작하게 됩니다.
스위칭시 손실이면 스위칭을 하지 않고 진입을 한번 건너뛰게 됩니다.
input : Period(5);
Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열
Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열
var : cnt(0),Hprice(0),Lprice(0);
var : UpTrend(false),DownTrend(False),Trend(0);
var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0);
HPrice = H;
LPrice = L;
if Index == 0 Then
{
//초기 최고값
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//초기 최저값
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
}
Else
{
UpTrend = HPrice >= Highest(HPrice,Period)[1];
DownTrend = LPrice <= Lowest(LPrice,Period)[1];
//상승추세 전환
if trend <= 0 and UpTrend == true Then
{
//추세구분 1
trend = 1;
if (MarketPosition == 0 ) or
(MarketPosition == -1 and PositionProfit(0) >= 0) Then
Buy("b");
if MarketPosition == -1 and PositionProfit(0) > 0 Then
ExitShort("sx");
//과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
HD[cnt] = HD[cnt-1];
HT[cnt] = HT[cnt-1];
HV[cnt] = HV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//직전 저점에서 현재 고점까지 연결선 출력
ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]);
//색상은 Red
TL_SetColor(ZigZagTL,Gray);
//추세선 굵기는 1
TL_SetSize(ZigZagTL,1);
HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]);
TL_SetColor(HTL,Red);
HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2));
Text_SetStyle(HTX,2,1);
}
Else if trend >= 0 and DownTrend Then//하락추세 전환
{
//추세구분은 -1
trend = -1;
if (MarketPosition == 0 ) or
(MarketPosition == 1 and PositionProfit(0) >= 0) Then
Sell("s");
if MarketPosition == 1 and PositionProfit(0) > 0 Then
ExitLong("bx");
//과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
LD[cnt] = LD[cnt-1];
LT[cnt] = LT[cnt-1];
LV[cnt] = LV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
//직전 고점에서 현재 저점까지 연결선 출력
ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]);
//색상은 Blue
TL_SetColor(ZigZagTL,Gray);
//굴긱는 1
TL_SetSize(ZigZagTL,1);
LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]);
TL_SetColor(LTL,Blue);
LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2));
Text_SetStyle(LTX,2,0);
}
Else
{
//상승구간
if trend == 1 Then
{
//고점이 갱신되면
if HPrice > HV[0] Then
{
//갱신된 봉의 날짜/시간/가격으로 변경
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//지그재그 추세선의 끝점을 현재봉으로 이동
TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]);
//고점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(HTL,HD[0],HT[0],HV[0]);
Text_SetString(HTX,NumToStr(HV[0],2));
Text_SetLocation(HTX,HD[0],HT[0],HV[0]);
}
}
//하락구간
if trend == -1 Then
{
//저점이 갱신되면
if LPrice < LV[0] Then
{
//갱신된 봉의 날짜/시간/가격으로 변경
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
//지그재그 추세선의 끝점을 현재봉으로 이동
TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]);
//저점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(LTL,LD[0],LT[0],LV[0]);
Text_SetString(LTX,NumToStr(LV[0],2));
Text_SetLocation(LTX,LD[0],LT[0],LV[0]);
}
}
TL_SetEnd(HTL,sDate,sTime,HV[0]);
TL_SetEnd(LTL,sDate,sTime,LV[0]);
}
}
즐거운 하루되세요
> 말비 님이 쓴 글입니다.
> 제목 : Re : Re : 질문이 많아 죄송합니다.
> 잘 되다가 중간에 멈추는데 이유가 몰까요?
그냥 한세트 돌고 멈춰버리는것 같아보여요.
제가 말한건
# 에이코스
이전 매매 손실여부초기화
만약 상승추세시
{매수}
하방추세 전환시
{청산후
손절인지 익절인지 판단후
초기화상태 이거나 익절이였을경우
매도전환}
손절이였을경우 [비코스]로
만약 하방추세시
{매도}
상방추세 전환시
{청산후
손절인지 익절인지 판단후
초기화상태 이거나 익절이였을경우
매수전환}
손절이였을경우 [비코스]로
# 비코스
이전 매매 손실여부초기화
만약 상승추세시
{매도}
하방추세 전환시
{청산후
손절인지 익절인지 판단후
초기화상태 이거나 익절이였을경우
매수전환}
손절이였을경우 [에이코스]로
만약 하방추세시
{매도}
상방추세 전환시
{청산후
손절인지 익절인지 판단후
초기화상태 이거나 익절이였을경우
매수전환}
손절이였을경우 [에이코스]로
말이 안되는거 같기도 하고...
그냥 시스템언어 까막눈이라 생각나는데로만 적어봤습니다.
항상 감사드립니다~
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 질문이 많아 죄송합니다.
>
안녕하세요
예스스탁입니다.
현재 시스템이 매수와 매도가 반복되는 스위칭 시스템입니다.
반대조건 만족시 손실이면 청산만 하고 진입은 되지 않게 작성해 드립니다.
input : Period(5);
Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열
Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열
var : cnt(0),Hprice(0),Lprice(0);
var : UpTrend(false),DownTrend(False),Trend(0);
var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0);
HPrice = H;
LPrice = L;
if Index == 0 Then
{
//초기 최고값
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//초기 최저값
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
}
Else
{
UpTrend = HPrice >= Highest(HPrice,Period)[1];
DownTrend = LPrice <= Lowest(LPrice,Period)[1];
//상승추세 전환
if trend <= 0 and UpTrend == true Then
{
//추세구분 1
trend = 1;
if (MarketPosition == 0 ) or
(MarketPosition == -1 and PositionProfit(0) >= 0) Then
Buy("b");
if MarketPosition == -1 and PositionProfit(1) > 0 Then
ExitShort("sx");
//과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
HD[cnt] = HD[cnt-1];
HT[cnt] = HT[cnt-1];
HV[cnt] = HV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//직전 저점에서 현재 고점까지 연결선 출력
ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]);
//색상은 Red
TL_SetColor(ZigZagTL,Gray);
//추세선 굵기는 1
TL_SetSize(ZigZagTL,1);
HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]);
TL_SetColor(HTL,Red);
HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2));
Text_SetStyle(HTX,2,1);
}
Else if trend >= 0 and DownTrend Then//하락추세 전환
{
//추세구분은 -1
trend = -1;
if (MarketPosition == 0 ) or
(MarketPosition == 1 and PositionProfit(0) >= 0) Then
Sell("s");
if MarketPosition == 1 and PositionProfit(1) > 0 Then
ExitLong("bx");
//과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
LD[cnt] = LD[cnt-1];
LT[cnt] = LT[cnt-1];
LV[cnt] = LV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
//직전 고점에서 현재 저점까지 연결선 출력
ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]);
//색상은 Blue
TL_SetColor(ZigZagTL,Gray);
//굴긱는 1
TL_SetSize(ZigZagTL,1);
LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]);
TL_SetColor(LTL,Blue);
LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2));
Text_SetStyle(LTX,2,0);
}
Else
{
//상승구간
if trend == 1 Then
{
//고점이 갱신되면
if HPrice > HV[0] Then
{
//갱신된 봉의 날짜/시간/가격으로 변경
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//지그재그 추세선의 끝점을 현재봉으로 이동
TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]);
//고점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(HTL,HD[0],HT[0],HV[0]);
Text_SetString(HTX,NumToStr(HV[0],2));
Text_SetLocation(HTX,HD[0],HT[0],HV[0]);
}
}
//하락구간
if trend == -1 Then
{
//저점이 갱신되면
if LPrice < LV[0] Then
{
//갱신된 봉의 날짜/시간/가격으로 변경
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
//지그재그 추세선의 끝점을 현재봉으로 이동
TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]);
//저점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(LTL,LD[0],LT[0],LV[0]);
Text_SetString(LTX,NumToStr(LV[0],2));
Text_SetLocation(LTX,LD[0],LT[0],LV[0]);
}
}
TL_SetEnd(HTL,sDate,sTime,HV[0]);
TL_SetEnd(LTL,sDate,sTime,LV[0]);
}
}
즐거운 하루되세요
2023-03-30
1547
글번호 167690