input : 타주기분(60);
input : P(20), Dv(2);
var : S1(0), D1(0), TM(0), TF(0), prevTF(0), isNew(false);
var : cnt(0), SumSqrt(0), Stdv(0), sum(0), BBmd(0), BBup(0), BBdn(0);
var : lastPriceInBlock(0), isFirst(true);
Array : CC;
{ 기준 시각/날짜 초기화 }
if Bdate <> Bdate[1] then begin
S1 = TimeToMinutes(stime);
D1 = sdate;
end;
if D1 > 0 then begin
if sdate = D1 then
TM = TimeToMinutes(stime) - S1
else
TM = TimeToMinutes(stime) + 1440 - S1;
TF = TM % 타주기분;
prevTF = TF[1];
{ 새 블럭 판단: 날짜 변경 or 나머지 되감김 or 충분히 경과 }
isNew = (Bdate <> Bdate[1]) or (TF < prevTF) or (TM >= TM[1] + 타주기분);
{ 각 틱에서 현재 블럭의 마지막 가격을 트래킹 }
lastPriceInBlock = C;
if isNew and (isFirst = false) then begin
{ 직전 블럭 종료 시점 가격을 밀어넣기 }
for cnt = 99 downto 1 begin
CC[cnt] = CC[cnt-1];
end;
CC[0] = C[1]; { 직전 틱(=직전 블럭 끝)의 종가를 기록 }
end;
if isFirst then begin
{ 초기 1회 세팅: 현재가로 CC[0] 채우기 }
CC[0] = C;
isFirst = false;
end;
{ 충분히 쌓였으면 볼밴 계산 }
if P <= 99 and CC[P-1] > 0 then begin
sum = 0;
for cnt = 0 to P-1 begin
sum = sum + CC[cnt];
end;
BBmd = sum / P;
SumSqrt = 0;
for cnt = 0 to P-1 begin
SumSqrt = SumSqrt + (CC[cnt] - BBmd)*(CC[cnt] - BBmd);
end;
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
Plot1(BBup, "상단");
Plot2(BBmd, "중단");
Plot3(BBdn, "하단");
end;
end;
예스트레이더 해외선물에 적용할수있게끔 부탁드립니다
답변 1
예스스탁
예스스탁 답변
2025-09-26 13:54:55.0
안녕하세요
예스스탁입니다.
input : 타주기분(60),P(20),Dv(2);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),SumSqrt(0),Stdv(0);
var : sum(0),BBmd(0),Bbup(0),BBdn(0),BandB(0);
Array : 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%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
for cnt = 1 to 99
{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P] > 0 then{
sum = 0;
for cnt = 0 to P-1{
sum = sum + CC[cnt];
}
BBmd = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1 {
SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2;
}
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
Plot1(BBup,"상단");
Plot2(BBmd,"중단");
Plot3(BBdn,"하단");
}
}
즐거운 하루되세요
> 윤호석 님이 쓴 글입니다.
> 제목 : 부탁드립니다 항상 감사합니다
> input : 타주기분(60);
input : P(20), Dv(2);
var : S1(0), D1(0), TM(0), TF(0), prevTF(0), isNew(false);
var : cnt(0), SumSqrt(0), Stdv(0), sum(0), BBmd(0), BBup(0), BBdn(0);
var : lastPriceInBlock(0), isFirst(true);
Array : CC;
{ 기준 시각/날짜 초기화 }
if Bdate <> Bdate[1] then begin
S1 = TimeToMinutes(stime);
D1 = sdate;
end;
if D1 > 0 then begin
if sdate = D1 then
TM = TimeToMinutes(stime) - S1
else
TM = TimeToMinutes(stime) + 1440 - S1;
TF = TM % 타주기분;
prevTF = TF[1];
{ 새 블럭 판단: 날짜 변경 or 나머지 되감김 or 충분히 경과 }
isNew = (Bdate <> Bdate[1]) or (TF < prevTF) or (TM >= TM[1] + 타주기분);
{ 각 틱에서 현재 블럭의 마지막 가격을 트래킹 }
lastPriceInBlock = C;
if isNew and (isFirst = false) then begin
{ 직전 블럭 종료 시점 가격을 밀어넣기 }
for cnt = 99 downto 1 begin
CC[cnt] = CC[cnt-1];
end;
CC[0] = C[1]; { 직전 틱(=직전 블럭 끝)의 종가를 기록 }
end;
if isFirst then begin
{ 초기 1회 세팅: 현재가로 CC[0] 채우기 }
CC[0] = C;
isFirst = false;
end;
{ 충분히 쌓였으면 볼밴 계산 }
if P <= 99 and CC[P-1] > 0 then begin
sum = 0;
for cnt = 0 to P-1 begin
sum = sum + CC[cnt];
end;
BBmd = sum / P;
SumSqrt = 0;
for cnt = 0 to P-1 begin
SumSqrt = SumSqrt + (CC[cnt] - BBmd)*(CC[cnt] - BBmd);
end;
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
Plot1(BBup, "상단");
Plot2(BBmd, "중단");
Plot3(BBdn, "하단");
end;
end;
예스트레이더 해외선물에 적용할수있게끔 부탁드립니다