답변완료
nthhighestbar 이거 함수 정상작동 하도록 구현 요청드립니다.
83573 번 문의한 내용답변 잘봤씁니다 그럼 궁금한게 검색식에서 nthhighestbar와 동일한 기능을 하도록 구현하고싶은데 어떻게 구현해야되는지궁금합니다.
작성해주신 내용은 nthhighestbar(1,h,48) 에서만 작동하는데
예를들어 nthhighestbar(3,h,48) 혹은 nthhighestbar(5,c,48) 이런것도
작동하도록 검색식에서 구현하고싶은데 어떻게할지궁금합니다.
안녕하세요
예스스탁입니다.
수식은 계산에 필요한 최소봉수(MaxBarsBack) 이후에 계산을 하게 됩니다.
수식에 NthHighestBar(1,h,period)가 있기 때문에
내부적으로 MaxBarsBack이 48로 고정으로 잡히게 됩어
48개 이상 봉이 없는 종목은 검색되지 못합니다.
아래와 같이 작성하시면 MaxBarsBack를 1로 잡히게 할수 있습니다.
루프로 현재봉에서 첫봉까지 가면서 최고가를 계산하고
이전봉이 48개봉 이전이면 루프를 멈추게 됩니다.
input : period(48);
var : hh(0),cnt(0);
hh = 0;
For cnt = 0 to Index
{
if (hh == 0 or (hh > 0 and h[cnt] > hh)) and cnt < period Then
hh = h[cnt];
#for문 빠져나감
if cnt >= period Then
cnt = Index+1;
}
if h == hh Then
Find(1);
즐거운 하루되세요
> 여유로운투자 님이 쓴 글입니다.
> 제목 : 검색함수가 정상작동하지않습니다.
> input : period(48);
var : nflagh(0),nflagCnt(0);
if nflagcnt!= 0 Then
nflagcnt = nflagcnt + 1;
var1 = BarIndex;
if BarIndex+1 >= period Then
{
if NthHighestBar(1,h,period)==0
//&& NthHighestBar(1,h,period)[1]!=0
Then
{
Find(1);
}
}
Else
{
if nflagh < h Then
{
nflagh = h;
nflagcnt = 1;
}
if LastBarOnChart==1 Then
if nflagcnt==1
//&& nflagcnt[1] != 1
Then
Find(1);
}
48봉중 최고가인 검색식을작성했습니다.
신규주나 생긴지 얼마안되는 것은 즉 48봉 미만인경우는 아래 else를타고 48봉 이상이 존재하는 주식은 if 문을 타도록 구현했는데요 지표에서는 잘 작동하는데 검색식으로는
위에 해당하는종목이 검색이안됩니다. 예를들어 오늘 뷰노같은 경우는 아에 검색식에 뜨지 않습니다.
디버깅해보니 NthHighestBar 함수 존재 유무에따라 검색이 되고 안되는 거같은데
이거 NthHighestBar 함수가 파라미터에 들어오는수만큼 없는경우는 검색식인경우 정상작동하지 않는 거같은데요 확인 요청드립니다.
아 해당검색식은 월봉에서 찾는걸로 수행했습니다 월봉상 48벙미만인정목은 해당함수때문에아에검색동닥이안하네요 ㅠㅜ
그리고해당함수에문제가있다면 우회해서 제가짜고싶은로직은 어떻게구현해야하나요?
2023-08-30
1235
글번호 172004
검색
답변완료
키움 수식 예스랭귀지 구현 문의합니다.
안녕하세요.
아래 키움 수식을 예스랭귀지로 구현하고 싶습니다.
Period 10
span 10
종목 검색과
검색된 봉의 고가를 돌파하는 양봉을 검색하고 싶습니다.
감사합니다.
AA=crossup(C,
max((highest(high(25),9)+
lowest(low(25),9)+
highest(high(25),26)+
lowest(low(25),26))/4 ,
(highest(high(25),52)+
lowest(low(25),52))/2));
VV=V>highest(V(1), Period);
a60 = avg(c,60);
b60 = (a60(0)/c) - (a60(1)/c);
BB=crossup(b60,0);
CC=barssince(crossdown(b60,0));
AA and BB and VV and (CC>span)
2023-08-30
1180
글번호 172002
종목검색
답변완료
83515 답변 주신 것에 추가 문의. 진입, 청산 조건 질문입니다.
도움을 주신것에 항상 감사드립니다.
첨부된 이미지에서
각각의 빨강, 검정, 파랑 구간에서 매매 진입하는 코드를
지난번에 알려주셨는데요.
코드는 아래와 같습니다.
=======================================================
input : ntime(100000), xtime(230000);
var : Tcond(False), oo(0), k(0), j(0);
array : flag[3](0);
array : up[2](0), middle[2](0), down[2](0);
array : up_TL[2](0), middle_TL[2](0), down_TL[2](0);
array : up_cnt[2](0), middle_cnt[2](0), down_cnt[2](0);
array : up_text[2](0), middle_text[2](0), down_text[2](0);
// 중간 수식 생략...
var : t(0);
if (sdate != sdate[1] and stime >= ntime) or
(sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then
{
T = 0;
}
if Tcond == true Then
{
if T == 0 Then
{
if up_cnt[1] >= 6 or up_cnt[2] >= 6 Then
T = 1;
if middle_cnt[1] >= 6 or middle_cnt[2] >= 6 Then
T = 2;
if down_cnt[1] >= 6 or down_cnt[2] >= 6 Then
T = 3;
}
if T == 1 Then
{
if MarketPosition <= 0 and CrossUp(C,up[2]) Then
Buy("b1");
if MarketPosition >= 0 and CrossDown(C,up[1]) Then
Sell("s1");
if MarketPosition == 1 Then
ExitLong("Bp1",AtLimit,up[2]+(up[2]-up[1])*3);
if MarketPosition == -1 Then
ExitShort("sp1",AtLimit,up[1]-(up[2]-up[1])*3);
}
if T == 2 Then
{
if MarketPosition <= 0 and CrossUp(C,middle[2]) Then
Buy("b2");
if MarketPosition >= 0 and CrossDown(C,middle[1]) Then
Sell("s2");
if MarketPosition == 1 Then
ExitLong("Bp2",AtLimit,middle[2]+(middle[2]-middle[1])*3);
if MarketPosition == -1 Then
ExitShort("sp2",AtLimit,middle[1]-(middle[2]-middle[1])*3);
}
if T == 3 Then
{
if MarketPosition <= 0 and CrossUp(C,down[2]) Then
Buy("b3");
if MarketPosition >= 0 and CrossDown(C,down[1]) Then
Sell("s3");
if MarketPosition == 1 Then
ExitLong("Bp3",AtLimit,down[2]+(down[2]-down[1])*3);
if MarketPosition == -1 Then
ExitShort("sp3",AtLimit,down[1]-(down[2]-down[1])*3);
}
}
=========================================================================
T = 1,2,3 중에서 먼저 6번 이상 터치한 곳에서
진입을 시작하는데요.
진입한 이후에 손절될 경우
다시 가격을 터치하면 재진입을 하는데,
그때마다 손실 금액에 따라 진입 수량을 변형하는 수식을 짜고 싶습니다.
예를 들면)
현재는
빨강 박스에서 먼저 6번 이상 터치되면
빨간선 상단 터치시 매수
빨간선 하단 터치시 매수 청산 후 매도.
다시
빨간선 상단 터치시 매도 청산 후 매수....
이런식으로 반복하다가
빨간선 상단과 하단 폭의 3배 구간에서 익절로
거래가 마무리 되는 수식인데요.
이것을
빨간선 상단 , 하단 폭이 10틱이면(익절은 30틱이됨)
빨간선 상단 터치시 매수 진입 1계약 (이후에 만약 익절되면 거래종료)
빨간선 하단 터치시 매수 청산 후 매도 1계약.(누적손실 : -10틱)(이후에 만약 익절되면 거래종료)
빨간선 상단 터치시 매도 청산 후 매수 1계약.(누적손실 : -20틱)(이후에 만약 익절되면 거래종료)
빨간선 하단 터치시 매수 청산 후 매도는 2계약.(누적손실 : -30틱)(이후에 만약 익절되면 거래종료)
빨간선 상단 터치시 매도 청산 후 매수 2계약.(누적손실 : -50틱)(이후에 만약 익절되면 거래종료)
.........
위와 같이 빨간 박스 구간 안에서 생긴 누적된 손실을 익절 한번으로 수익
청산하고 거래 종료하는 수식을 작성하고 싶습니다.
거래시마다 수수료 포함하여 누적되는 손실을 체크해
단 한번의 익절로 수익으로 거래가 마감되도록 수량을 조절하는 수식입니다.
제 머리로는 어떻게 해야할지 감이 안오네요ㅠ
부탁드립니다.
2023-08-30
810
글번호 172000
시스템
답변완료
수식 부탁드립니다
키움증권 수식인데
검색식으로 표현이 안되어서요
이걸 어떻게 표현해야 할지 모르겠는데요
눌림매수를 하려고 하는데요
M = floor(date/100);
HH = HighestSince(1, M!=M(1), H);
ValueWhen(1, M!=M(1), HH(1))
위 수식은 전월 고가선 입니다
위에 있는 종목들중에
아래 수식 라인에 닿는 종목들을 검색하고 싶습니다
수식1 1차매수
최근고가=highest(h,날수*(360/(분봉단위+1))+1);
최근저가=lowest(l,날수*(360/(분봉단위+1))+1);
최근고가-(최근고가-최근저가)*r2/100
수식2 2차매수
최근고가=highest(h,날수*(360/(분봉단위+1))+1);
최근저가=lowest(l,날수*(360/(분봉단위+1))+1);
최근고가-(최근고가-최근저가)*r3/100
지표조건
날수 4
분봉단위 4
r2 38
r3 50
선생님 부탁좀 드리겠습니다
2023-08-30
1574
글번호 171996
종목검색