예스스탁
예스스탁 답변
2020-03-30 16:10:21
안녕하세요
예스스탁입니다.
랭귀지는 기본체계가 완성된봉의 값만 사용합니다.
그러므로 3분봉 완성시에 그때 완성되어 있는 30분봉의 값이 리턴됩니다.
현재 진행중인 30분봉의 값은 리턴받아 사용할수 없습니다.
하나의 방법이라면 3분봉 차트에서 30분봉의 스토케스틱을 직접 계산해서 사용하는 부분입니다.
하지만 스토케스틱이 과거봉의 갯수에 영향을 받으므로 실제 30분봉에서 많은 봉수를 띄워 보는 값과 차이가 있을수 있습니다
전략실행차트가 최대 1만개봉까지 조회가 되므로 최대한 많은봉 띄우시고 적용하시기 바랍니다.
input : 분(30),Sto1(5),Sto2(3),Sto3(3);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0), Hv(0), LV(0), FK(0), SK(0), SD(0);
var : Ep1(0), EP2(0), JISU(0), DINDEX(0), PreSK(0), PreSD(0);
var : oSlowK(0),oSlowD(0);
Array : HH[50](0),LL[50](0);
Ep1 = 2/(sto2+1);
Ep2 = 2/(sto3+1);
oSlowK = StochasticsK(Sto1,Sto2);
oSlowD = StochasticsD(Sto1,Sto2,Sto3);
plot1(oSlowK,"기본차트stok");
plot2(oSlowD,"기본차트stod");
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 = TimeToMinutes(stime)%분;
if bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) or stime == 154500 Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[sto1-1] > 0 and LL[sto1-1] > 0 then
{
if bdate != bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) or stime == 154500 Then{
DINDEX = DINDEX+1;
PreSK = SK[1];
PreSD = SD[1];
}
Hv = HH[0];
LV = LL[0];
for cnt = 0 to sto1-1 {
if HH[cnt] > Hv then
Hv = HH[cnt];
if LL[cnt] < LV then
LV = LL[cnt];
}
FK = (C-LV)/(HV-LV)*100;
if DINDEX <= 1 then
{
SK = FK;
SD = SK;
}
else
{
SK = FK * EP1 + PreSK * (1-EP1);
SD = SK * EP2 + PreSD * (1-EP2);
}
plot3(SK,"타주기 stok");
plot4(SD,"타주기 stod");
}
}
PlotBaseLine1(20);
PlotBaseLine2(80);
즐거운 하루되세요
> tadd 님이 쓴 글입니다.
> 제목 : 서로다른 주기의 스토케값 구하기
> Input : Period(5), FastDperiod(3), SlowDPeriod(3)
Var : oK(0), oD(0), ooK(0), ooD(0);
//3분주기 데이타
oSlowK = StochasticsK(Period,FastDperiod);
oSlowD = StochasticsD(Period,FastDperiod,SlowDPeriod);
//30분주기 데이타
ooSlowK = Data2(StochasticsK(Period,FastDperiod));
ooSlowD = Data2(StochasticsD(Period,FastDperiod,SlowDPeriod));
MessageLog("3K : %.2f, 3D : %.2f, 30k : %.2f, 30D : %.2f", oK, oD, ooK, ooD);
위와같이 작성하여 디버깅을 해보면, 3분데이타는 스토케 K, D 값은 신호오는대로 수치가 정확하게 나옵니다. 그런데 30분데이타는 스토케 K,D 값은 고정값으로 나옵니다.
어떤것이 잘못되었을까요??