답변완료
재질문 드립니다.
안녕하세요.지난 주에 주신 답변 내용으로 시도를 해봤는데, 원하는 결과가 나오지 않고 있습니다.또한, 매수신호인데 "if MarketPosition <= 0 Then"이라는 조건식이 맞는건지 확인부탁드리고 싶습니다.감사합니다아래는 제 질문과 답변에 주신 내용입니다.------------------------------------------저는 가장 기본적인 청산식으로 아래와 같은 함수를 사용합니다. Buy("매수", OnClose, Def, 3); ExitLong("매수익절1", Atlimit, EntryPrice + PriceScale*10, "매수", 1, 1); 그런데 이 청산 방식은 신호 발생한 캔들 바로 다음 캔들 에서는 실행되지 않고, 2번째 캔들 이후부터 실행이 됩니다. 2번째가 아닌 1번째 캔들에서 실행되게 할 수 있는지 여쭤봅니다.감사합니다------------------------------------------안녕하세요예스스탁입니다.진입이 onclose이므로EntryPrice나 MarketPosition 그다음봉 완성시부터 사용이 가능합니다.아래와 같이 처리하시면진입신호 다음봉에서 청산신호를 내실수 있습니다if MarketPosition <= 0 Then ExitLong("매수익절1.", Atlimit,C + PriceScale*10, "매수", 1, 1); Else ExitLong("매수익절1", Atlimit, EntryPrice + PriceScale*10, "매수", 1, 1); 즐거운 하루되세요
답변완료
문의합니다..
아래 수식 지표식으로
캔들차트에서 사용하던 지표값들을 계산하여
포지션 시스템 요청드립니다..
감사합니다..
input:renkoSize(0.5);
var:j(0),k(0),renkoCnt(0),gubun(0),
printOK(False), //데이터 검증을 위해 출력해보고 싶으면 true로 바꿔주면 됨
filename("renko.txt"); //파일은 C:\예스트레이더\YesLang\ 폴더에 생긴다.
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0);
If DayIndex == 0 Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then { //위 루틴에서 1개봉을 추가했으므로 여기서는 추가없이
gubun = -1; //상방향,하방향에 따라 값만 세팅
CC[0] = OO[0] - renkoSize;
HH[0] = OO[0];
LL[0] = CC[0];
j = 0; //마지막 1봉만 출력
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1;
CC[0] = OO[0] + renkoSize;
HH[0] = CC[0];
LL[0] = OO[0];
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then { //아래 방향으로 렌코 형성
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9)); //추가될 렌코 개수
if renkoCnt > 49 then renkoCnt = 49; //오류방지를 위한 방어코드
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]); //봉이 생길 때마다 출력
}
}
Else If HH[0] + renkoSize <= C Then { //위 방향으로 렌코 형성
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]); //봉이 생길 때마다 출력
}
}
Else If Time >= 151500 Then { //당일 종가봉에서,
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
j = 0; //마지막 1봉만 출력
if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO");
If CC[0] > 0 Then Plot2(CC[0],"CC");
답변완료
문의 드립니다.
도움에 감사 드립니다.사용자 함수를 만들려고 하지만 되지 않습니다."사용자함수 내에서 Function - End Function 구문을 사용할 수 없습니다" 라고 뜹니다"사용자 함수로 부탁 드립니다.미리 감사 드립니다. input : len(88),mult(2.0);var : src(0),crr(0),k(0),sum(0),i(0),dev(0);var : nmid(0),nupper(0),nlower(0);var : upper(0),lower(0);Array : dizii[500](0);src = (h+l+c)/3;Function cr Numeric input : x(Numeric),y(Numeric); var : z(0),weight(0),i(0); z = 0.0; weight = 0.0; for i = 0 to y - 1 step 1 { z = z + x[i] * ((y - 1) / 2 + 1 -abs(i - (y - 1) / 2)); } cr = z / ((y + 1) / 2 * (y + 1) / 2);EndFunctioncrr = cr(src, 2 * len - 1);for k = 0 to len - 1 step 1{ sum = 0.0; for i = 0 to 2 * len - 2 - k step 1 { sum = sum + (len - abs(len - 1 - k - i)) * src[i] / (len * len - k * (k + 1) / 2); } dizii[k] = sum;}dev = mult * std(src, len);nmid = wma(src, len);nupper = nmid + wma(dev,len);nlower = nmid - wma(dev,len);upper = crr + cr(dev, 2 * len - 1);lower = crr - cr(dev, 2 * len - 1);var1=(upper+lower)/2;