커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

전략합치는거 가능한가요?

참조 DATA가 많아지니 LAG 걱정때문에 전략을 10개 이상 굴리기가 쉽지 않네요... 전략합치는거 가능한가요? 예를들어 value1 = data1(MA(C,20)); value2 = data1(MA(C,60)); value3 = data2(MA(C2,20)); value4 = data2(MA(C2,60)); value5 = data3(MA(C3,20)); value6 = data3(MA(C3,60)); if crossup (value1,value2) then buy(); if crossup (value3,value4) then buy(); if crossup (value5,value6) then buy();
프로필 이미지
캣피쉬
2021-06-26
1341
글번호 150299
시스템
답변완료

수식도움 부탁드립니다.

아래의 수식에서 직전고점을 돌파한 상승파동(빨간색 파동선)의 신규고점을 카운팅하여 숫자를 빨간색으로 직전저점을 돌파한 하락파동(파란색 파동선)의 신규저점을 카운팅하여 숫자를 파란색으로 파란색파동의 고점에는 카운팅이 필요없습니다. 파란색파동에서는 직전저점을 돌파한 저점만 카운팅 1,3,5,7,9... 빨간색 파동의 저점에는 카운팅이 필요없습니다. 빨간색 파동에서는 직전고점을 돌파한 고점만 카운팅 1,3,5,7,9,.. 텍스트 출력하는 수식보완 도움부탁드립니다. 그림참조부탁드립니다. 아래수식... //===================================// Input:ChgRate(0.25),굵기(1),수치표시(1),추세선(1),크기(11); Var:TL1(0),TL2(0),TL3(0),TL4(0),TL2_exist(0),color(0), 종가사용여부(0), // 종가로 계산하려면 1로 설정한다. TL_NewBit(0), // 1:NewLine 2:SetEndLine slope(0),mid_idx(0),mid_val(0), j(0),k(0),q(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = ChgRateZigZag(ChgRate,종가사용여부,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 If 고[2,1] < 고[1,1] Then { slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); mid_idx = Floor((고[2,1] - 저[1,1]) / slope); mid_val = slope * mid_idx + 저[1,1]; Var1 = Index - (저[1,2] + mid_idx); TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val); TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]); Var2 = Index - 저[1,2]; TL_SetColor(TL1,color[Var2]); color = RED; TL_SetColor(TL2,color); TL2_exist = 1; } Else { TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetColor(TL1,color); TL2_exist = 0; } } If TL_NewBit == 2 Then { // 연장 TL_Delete(TL1); If TL2_exist == 1 Then TL_Delete(TL2); If 고[2,1] < 고[1,1] Then { slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); mid_idx = Floor((고[2,1] - 저[1,1]) / slope); mid_val = slope * mid_idx + 저[1,1]; Var1 = Index - (저[1,2] + mid_idx); TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val); TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]); Var2 = Index - 저[1,2]; TL_SetColor(TL1,color[Var2]); color = RED; TL_SetColor(TL2,color); TL2_exist = 1; } Else { TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetColor(TL1,color); TL2_exist = 0; } } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 If 저[2,1] > 저[1,1] Then { slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]); mid_idx = Floor((저[2,1] - 고[1,1]) / slope); mid_val = slope * mid_idx + 고[1,1]; Var1 = Index - (고[1,2] + mid_idx); TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val); TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]); Var2 = Index - 고[1,2]; TL_SetColor(TL1,color[Var2]); color = BLUE; TL_SetColor(TL2,color); TL2_exist = 1; } Else { TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetColor(TL1,color); TL2_exist = 0; } } If TL_NewBit == 2 Then { // 연장 TL_Delete(TL1); If TL2_exist == 1 Then TL_Delete(TL2); If 저[2,1] > 저[1,1] Then { slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]); mid_idx = Floor((저[2,1] - 고[1,1]) / slope); mid_val = slope * mid_idx + 고[1,1]; Var1 = Index - (고[1,2] + mid_idx); TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val); TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]); Var2 = Index - 고[1,2]; TL_SetColor(TL1,color[Var2]); color = BLUE; TL_SetColor(TL2,color); TL2_exist = 1; } Else { TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetColor(TL1,color); TL2_exist = 0; } } } TL_SetSize(TL1,굵기); TL_SetSize(TL2,굵기); // if 추세선 == 1 Then { If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } If k > 1 Then { // 낮은 전저점이 찾아졌다면 TL3 = TL_New(저[k,3],저[k,4],저[k,1],sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); TL_SetColor(TL3,rgb(255,187,0)); } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL4,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } Else { // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL3,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL4,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } q = 0; For j = 2 To 10 { If 고[1,1] < 고[j,1] Then { // 전고점보다 높은 이전 전고점을 찾는다 q = j; j = 10; // exit loop } } If q > 1 Then { // 높은 전고점이 찾아졌다면 TL4 = TL_New(고[q,3],고[q,4],고[q,1],sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); TL_SetColor(TL4,cyan); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL4,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } } } //======================================================================// var : Tx(0); if 수치표시 == 1 Then { if value1 == 1 Then { if value1[1] == -1 Then { Tx = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)+"("+NumToStr(고[1,1]-저[1,1],2)+", " +NumToStr((고[1,1]-저[1,1])/(고[2,1]-저[1,1])*100,0)+"%"+")"); Text_SetStyle(tx,2,1); } Else { Text_SetString(tx,NumToStr(고[1,1],2)+"("+NumToStr(고[1,1]-저[1,1],2)+", " +NumToStr((고[1,1]-저[1,1])/(고[2,1]-저[1,1])*100,0)+"%"+")"); Text_SetLocation(tx,고[1,3],고[1,4],고[1,1]); } } if value1 == -1 Then { if value1[1] == 1 Then { Tx = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)+"("+NumToStr(고[1,1]-저[1,1],2)+", " +NumToStr((고[1,1]-저[1,1])/(고[1,1]-저[2,1])*100,0)+"%"+")"); Text_SetStyle(tx,2,0); } Else { Text_SetString(tx,NumToStr(저[1,1],2)+"("+NumToStr(고[1,1]-저[1,1],2)+", " +NumToStr((고[1,1]-저[1,1])/(고[1,1]-저[2,1])*100,0)+"%"+")"); Text_SetLocation(tx,저[1,3],저[1,4],저[1,1]); } } Text_SetSize(Tx,크기); Text_SetColor(tx,white); }
프로필 이미지
당일선물
2021-06-26
1739
글번호 150298
지표
답변완료

수식 부탁 드립니다.

관리자님, 수식 부탁 드립니다. 1) if c>ma(c,60) then buy(); 2) if crossdown(c,ma(c,60)) then exitlong(); 3) 추가로 이전 1봉과 현재의 2봉을중에서 주가가 최고점대비 10% 하락시 그시점에 매도 4) 추가가 현재의 1봉에서 주가가 최고점대비 10% 하락시 그시점에 매도 에서 시그날이 들어 오면 지체없이 바로 매수/매도 하도록 수식 부탁 드립니다.
프로필 이미지
기관장
2021-06-25
1330
글번호 150297
시스템
답변완료

주석요청

안녕하세요? 아래 글번호 73042번 답변주신 스크립트의 주석을 요청드립니다. 감사합니다. input : cnt(3); if MarketPosition == 0 Then Begin If O > data2(Highest(H,cnt)[1]) Then Sell("S1", AtMarket); If O < data2(Lowest(L,cnt)[1]) Then Buy("B1", AtMarket); If O > data2(Highest(C,cnt)[1]) Then Sell("S2", AtMarket); If O < data2(Highest(C,cnt)[1]) Then Buy("B2", AtMarket); End; If CrossDown(O, data2(Ma(C,5))) Or CrossDown(C, data2(Ma(C, 5))) Then ExitLong("EXB"); If CrossUp(O, data2(Ma(C,5))) Or CrossUp(C, data2(Ma(C,5))) Then ExitShort("EXS");
프로필 이미지
흰둥이아빠
2021-06-25
1105
글번호 150296
시스템

kh 님에 의해서 삭제되었습니다.

프로필 이미지
kh
2021-06-25
17
글번호 150295
시스템
답변완료

검토부탁드립니다

안녕하세요.....글번호73061 수식에데이타 4의시가라인이 그려져야하는데 데이타6의 시가라인으로나오네요. 검토부탁드립니다. 수고하세요...꾸벅
프로필 이미지
보인다
2021-06-25
1778
글번호 150294
지표
답변완료

종목검색

다음의 조건을 모두 만족하는 종목을 검색하는 식을 구합니다 - 일목균형표 선행지표2개중 작은것 보다 종가가 크고 - 거래량이 거래량60일이평보다 많고 - 일일 거래대금이 1000억원 이상이며 - 5일이평이 20일이평보다 작은 종목을 구하는 식을 구합니다 감사합니다 -
프로필 이미지
느림보
2021-06-25
1554
글번호 150287
검색
답변완료

73050번 Yes Global - Yes Spot 적용 잔고 수량 값이 0으로 나옵니다!

아래와 같이 수식을 바꾸고(*제외) 해도 여전히 잔고(count)는 0으로 나오네요!ㅜㅜ 포지션, 평균단가, 현재가, 종목 코드는 정상적으로 잘 나옵니다. 그러나 평가금액, 잔고 수량은 0으로 나오네요! 왜 그러는 것일까요?! YesGlobal - Yes Spot(NH선물, 해외선물 거래중)을 사용중입니다. var RF; function Main_OnStart() { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageLog(HHMMDD+":"+"전략 시작"); Main.MessageLog("계좌번호:"+A1.number +", 계좌명:"+A1.name); OrderCode = Main.GetOrderCode(F1.code); //F1 종목 객체에서 종목코드를 주문용 코드로 변환 Main.MessageLog("단축코드:" + F1.code + "주문용 종목코드:"+OrderCode+", 종목명:"+F1.name +" ,잔존일수:"+F1.remainDay); //잔고 정보 조회 A1.SetBalanceItem(F1.code, 0); //잔고객체를 사용하기위해 종목 설정 A1.Refresh();//가원장 새로 고침 Main.RefreshAccount(A1.number);//Main에서 A1 계좌번호로 가원장 새로 고침 RF = true; } function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { if (A1.number == sAccntNum && RF == true && lUp*dateID == 30000) { RF = false Bal = A1.GetTheNumberOfBalances(); //잔고 리스트 개수 반환 현재 계좌에 1종목 1개 존재 A1.SetBalanceIndex(0);//잔고 인덱스 0 설정(1종목 1수량 존재하므로) Main.MessageLog("잔고 리스트 개수:" + Bal); Main.MessageLog("잔고 code:"+A1.Balance.code); Main.MessageLog("잔고 포지션(S:1,L:2)):"+ A1.Balance.position); Main.MessageLog("잔고 count:"+ A1.Balance.count); Main.MessageLog("잔고 평균단가:"+ A1.Balance.avgUnitCost); Main.MessageLog("잔고 평가금액:"+ A1.Balance.assessedAmount); Main.MessageLog("잔고 current:"+ A1.Balance.current); } }
프로필 이미지
김상
2021-06-25
1426
글번호 150286
시스템
답변완료

변수추출

안녕하세요~ 변수 A, B, C 가 있는경우 시가보다 크면서 시가에 가장 가까운 변수 값으로 sell 하는 수식 부탁드립니다.
프로필 이미지
코퍼
2021-06-25
1549
글번호 150282
시스템
답변완료

다시한번 부탁드립니다.

안녕하세요....글번호73045 에관하여 자세한 설명감사합니다. 제가보는차트은 당일분만으로 보아서 그렇군요. 다시한번부탁드립니다.장시작 첫봉의시가라인 장종료까지요. 첫봉에서 시가라인 안나오면 두번째봉의시가라인으로해주세요. plot 1 데이타4 plot 2 데이타4 (장시작 첫봉시가라인 장종료까지그려지게요) plot 3 데이타5 plot 4 데이타6 plot 5 데이타7 plot 6 0값라인 수고하세요..꾸벅
프로필 이미지
보인다
2021-06-25
1567
글번호 150275
지표