커뮤니티
수식변경 부탁드립니다
2014-05-20 08:22:04
190
글번호 75212
아래의 식에서 "주봉스톡케스틱" 추가 부탁드립니다
기간은 25,6,6으로 동일하고,
기존의 매수식에 주봉의 %k값이 > %D값보다 클때 매수하도록 조건을 추가(and조건)
하고 싶습니다. 부탁드립니다
그리고 현재 타분봉을 60분봉을 참조하고 있는데요 만약에 120분봉을 참조하고 싶으면
"input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱 " 부분에서 Atime(60)을 Atime(120)으로만 수정하면 되나요?
=================================================================================
Input : Period(25), Period1(6), Period2(6), MAP(5),투입금액1(1100000),투입금액2(2100000);
input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),ExitSetup1(false),ExitSetup2(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(0);
var : dhighVal(0), dlowVal(0), dFK(0), dSK(0), dSD(0);
var : dEp1(0), dEp2(0),dPreSK(0), dPreSD(0);
Array : HH[50](0),LL[50](0),FK1[50](0),SK1[50](0),SD1[50](0);
#일봉 스토케스틱
#N일간 최고가 및 최저가
dhighVal = dayhigh(0);
dlowVal = daylow(0);
for cnt = 0 to Period-1 {
if dayHigh(cnt) > dhighVal then
dhighVal = dayhigh(cnt);
if dayLow(cnt) < dlowVal then
dlowVal = dayLow(cnt);
}
#Fast StochasticsK
dFK = (C-dlowVal)/(dhighVal-dlowVal)*100;
#Slow StochasticsK / Slow StochasticsD
dEp1 = 2/(Period1+1);
dEp2 = 2/(Period2+1);
if date != date[1] then {
dPreSK = dSK[1];
dPreSD = dSD[1];
}
dSK = dFK * dEP1 + dPreSK * (1-dEP1);
dSD = dSK * dEP2 + dPreSD * (1-dEP2);
#kospi
if CodeCategory == 1 Then{
if BasePrice < 50000 Then{
vol1 = int(int(투입금액1/C)/10)*10;
vol2 = int(int(투입금액2/C)/10)*10;
}
Else{
vol1 = int(투입금액1/C);
vol2 = int(투입금액2/C);
}
}
#kosdoq
if CodeCategory == 2 Then{
vol1 = int(투입금액1/C);
vol2 = int(투입금액2/C);
}
#option
if CodeCategory == 6 or CodeCategory == 8 Then{
vol1 = int((투입금액1)/(C*BigPointValue));
vol2 = int((투입금액2)/(C*BigPointValue));
}
Lvalue = Lowest(L, Period);
Hvalue = Highest(H, Period);
#차트의 스토케스틱
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
#타분봉 스토케스틱
TF = TimeToMinutes(stime)%Atime;
if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
FK1[cnt] = FK1[cnt-1][1];
SK1[cnt] = SK1[cnt-1][1];
SD1[cnt] = SD1[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[StoPeriod] > 0 Then{
Hvalue1 = HH[0];
Lvalue1 = LL[0];
for cnt = 0 to StoPeriod-1 {
if HH[cnt] > Hvalue1 then
Hvalue1 = HH[cnt];
if LL[cnt] < Lvalue1 then
Lvalue1 = LL[cnt];
}
FK1[0] = (C-Lvalue1)/(Hvalue1-Lvalue1)*100;
}
if FK1[StoPeriod1] > 0 Then{
sum1 = 0;
for cnt = 0 to StoPeriod1-1{
sum1 = sum1+FK1[cnt];
}
SK1[0] = sum1/StoPeriod1;
}
if SK1[StoPeriod2] > 0 Then{
sum2 = 0;
for cnt = 0 to StoPeriod2-1{
sum2 = sum2+SK1[cnt];
}
SD1[0] = sum2/StoPeriod2;
}
#%k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if Stok >= 60 Then
BuySetup = false;
#날짜와 시간 설정
if sdate > 20140228 and stime > 090000 Then
Condition1 = true;
#BuySetup이 true일때
if BuySetup == true Then{
if Condition1 == true and
crossup(stok,stod) and
stok[1] < stod[1] and
MarketPosition == 0 and
SK1[0] > 60 And
dSK > dSD Then
buy("매수",OnClose,def,vol1);
}
답변 3
예스스탁 예스스탁 답변
2014-05-20 13:07:36
안녕하세요
예스스탁입니다.
1.
예 Atime에 원하시는 다른 분봉주기를 지정하시면 됩니다.
2.
수식은 차트의 데이터만으로 계산을 합니다.
차트에 주봉스토케스틱을 계산할 만큼 충분한 데이터가 없으면
계산이 되지 않아 신호가 발생하지 않습니다.
이용에 참고하시기 바랍니다.
Input : Period(25), Period1(6), Period2(6), MAP(5),투입금액1(1100000),투입금액2(2100000);
input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),ExitSetup1(false),ExitSetup2(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(0);
var : dhighVal(0), dlowVal(0), dFK(0), dSK(0), dSD(0);
var : dEp1(0), dEp2(0),dPreSK(0), dPreSD(0);
Array : HH[50](0),LL[50](0),FK1[50](0),SK1[50](0),SD1[50](0);
var : wHvalue1(0),wLvalue1(0),wsum1(0),wsum2(0);
Array : WHH[50](0),WLL[50](0),wFK1[50](0),wSK1[50](0),wSD1[50](0);
#주봉 스토케스틱
if DayOfWeek(sdate) < DayOfWeek(sdate[1]) Then{
wHH[0] = H;
wLL[0] = L;
for cnt = 1 to 49{
wHH[cnt] = wHH[cnt-1][1];
wLL[cnt] = wLL[cnt-1][1];
wFK1[cnt] = wFK1[cnt-1][1];
wSK1[cnt] = wSK1[cnt-1][1];
wSD1[cnt] = wSD1[cnt-1][1];
}
}
if H > wHH[0] Then
wHH[0] = H;
if L < wLL[0] Then
wLL[0] = L;
if wHH[StoPeriod] > 0 Then{
wHvalue1 = wHH[0];
wLvalue1 = wLL[0];
for cnt = 0 to StoPeriod-1 {
if wHH[cnt] > wHvalue1 then
wHvalue1 = wHH[cnt];
if wLL[cnt] < wLvalue1 then
wLvalue1 = wLL[cnt];
}
wFK1[0] = (C-wLvalue1)/(wHvalue1-wLvalue1)*100;
}
if wFK1[StoPeriod1] > 0 Then{
wsum1 = 0;
for cnt = 0 to StoPeriod1-1{
wsum1 = wsum1+wFK1[cnt];
}
wSK1[0] = wsum1/StoPeriod1;
}
if wSK1[StoPeriod2] > 0 Then{
wsum2 = 0;
for cnt = 0 to StoPeriod2-1{
wsum2 = wsum2+wSK1[cnt];
}
wSD1[0] = wsum2/StoPeriod2;
}
#일봉 스토케스틱
#N일간 최고가 및 최저가
dhighVal = dayhigh(0);
dlowVal = daylow(0);
for cnt = 0 to Period-1 {
if dayHigh(cnt) > dhighVal then
dhighVal = dayhigh(cnt);
if dayLow(cnt) < dlowVal then
dlowVal = dayLow(cnt);
}
#Fast StochasticsK
dFK = (C-dlowVal)/(dhighVal-dlowVal)*100;
#Slow StochasticsK / Slow StochasticsD
dEp1 = 2/(Period1+1);
dEp2 = 2/(Period2+1);
if date != date[1] then {
dPreSK = dSK[1];
dPreSD = dSD[1];
}
dSK = dFK * dEP1 + dPreSK * (1-dEP1);
dSD = dSK * dEP2 + dPreSD * (1-dEP2);
#kospi
if CodeCategory == 1 Then{
if BasePrice < 50000 Then{
vol1 = int(int(투입금액1/C)/10)*10;
vol2 = int(int(투입금액2/C)/10)*10;
}
Else{
vol1 = int(투입금액1/C);
vol2 = int(투입금액2/C);
}
}
#kosdoq
if CodeCategory == 2 Then{
vol1 = int(투입금액1/C);
vol2 = int(투입금액2/C);
}
#option
if CodeCategory == 6 or CodeCategory == 8 Then{
vol1 = int((투입금액1)/(C*BigPointValue));
vol2 = int((투입금액2)/(C*BigPointValue));
}
Lvalue = Lowest(L, Period);
Hvalue = Highest(H, Period);
#차트의 스토케스틱
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
#타분봉 스토케스틱
TF = TimeToMinutes(stime)%Atime;
if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
FK1[cnt] = FK1[cnt-1][1];
SK1[cnt] = SK1[cnt-1][1];
SD1[cnt] = SD1[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[StoPeriod] > 0 Then{
Hvalue1 = HH[0];
Lvalue1 = LL[0];
for cnt = 0 to StoPeriod-1 {
if HH[cnt] > Hvalue1 then
Hvalue1 = HH[cnt];
if LL[cnt] < Lvalue1 then
Lvalue1 = LL[cnt];
}
FK1[0] = (C-Lvalue1)/(Hvalue1-Lvalue1)*100;
}
if FK1[StoPeriod1] > 0 Then{
sum1 = 0;
for cnt = 0 to StoPeriod1-1{
sum1 = sum1+FK1[cnt];
}
SK1[0] = sum1/StoPeriod1;
}
if SK1[StoPeriod2] > 0 Then{
sum2 = 0;
for cnt = 0 to StoPeriod2-1{
sum2 = sum2+SK1[cnt];
}
SD1[0] = sum2/StoPeriod2;
}
#%k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if Stok >= 60 Then
BuySetup = false;
#날짜와 시간 설정
if sdate > 20140228 and stime > 090000 Then
Condition1 = true;
#BuySetup이 true일때
if BuySetup == true Then{
if Condition1 == true and
crossup(stok,stod) and
stok[1] < stod[1] and
MarketPosition == 0 and
SK1[0] > 60 And
dSK > dSD And
wSK1[0] > wSD1[0] and wSD1[0] > 0 Then
buy("매수",OnClose,def,vol1);
}
즐거운 하루되세요
> 뽄때 님이 쓴 글입니다.
> 제목 : 수식변경 부탁드립니다
> 아래의 식에서 "주봉스톡케스틱" 추가 부탁드립니다
기간은 25,6,6으로 동일하고,
기존의 매수식에 주봉의 %k값이 > %D값보다 클때 매수하도록 조건을 추가(and조건)
하고 싶습니다. 부탁드립니다
그리고 현재 타분봉을 60분봉을 참조하고 있는데요 만약에 120분봉을 참조하고 싶으면
"input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱 " 부분에서 Atime(60)을 Atime(120)으로만 수정하면 되나요?
=================================================================================
Input : Period(25), Period1(6), Period2(6), MAP(5),투입금액1(1100000),투입금액2(2100000);
input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),ExitSetup1(false),ExitSetup2(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(0);
var : dhighVal(0), dlowVal(0), dFK(0), dSK(0), dSD(0);
var : dEp1(0), dEp2(0),dPreSK(0), dPreSD(0);
Array : HH[50](0),LL[50](0),FK1[50](0),SK1[50](0),SD1[50](0);
#일봉 스토케스틱
#N일간 최고가 및 최저가
dhighVal = dayhigh(0);
dlowVal = daylow(0);
for cnt = 0 to Period-1 {
if dayHigh(cnt) > dhighVal then
dhighVal = dayhigh(cnt);
if dayLow(cnt) < dlowVal then
dlowVal = dayLow(cnt);
}
#Fast StochasticsK
dFK = (C-dlowVal)/(dhighVal-dlowVal)*100;
#Slow StochasticsK / Slow StochasticsD
dEp1 = 2/(Period1+1);
dEp2 = 2/(Period2+1);
if date != date[1] then {
dPreSK = dSK[1];
dPreSD = dSD[1];
}
dSK = dFK * dEP1 + dPreSK * (1-dEP1);
dSD = dSK * dEP2 + dPreSD * (1-dEP2);
#kospi
if CodeCategory == 1 Then{
if BasePrice < 50000 Then{
vol1 = int(int(투입금액1/C)/10)*10;
vol2 = int(int(투입금액2/C)/10)*10;
}
Else{
vol1 = int(투입금액1/C);
vol2 = int(투입금액2/C);
}
}
#kosdoq
if CodeCategory == 2 Then{
vol1 = int(투입금액1/C);
vol2 = int(투입금액2/C);
}
#option
if CodeCategory == 6 or CodeCategory == 8 Then{
vol1 = int((투입금액1)/(C*BigPointValue));
vol2 = int((투입금액2)/(C*BigPointValue));
}
Lvalue = Lowest(L, Period);
Hvalue = Highest(H, Period);
#차트의 스토케스틱
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
#타분봉 스토케스틱
TF = TimeToMinutes(stime)%Atime;
if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
FK1[cnt] = FK1[cnt-1][1];
SK1[cnt] = SK1[cnt-1][1];
SD1[cnt] = SD1[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[StoPeriod] > 0 Then{
Hvalue1 = HH[0];
Lvalue1 = LL[0];
for cnt = 0 to StoPeriod-1 {
if HH[cnt] > Hvalue1 then
Hvalue1 = HH[cnt];
if LL[cnt] < Lvalue1 then
Lvalue1 = LL[cnt];
}
FK1[0] = (C-Lvalue1)/(Hvalue1-Lvalue1)*100;
}
if FK1[StoPeriod1] > 0 Then{
sum1 = 0;
for cnt = 0 to StoPeriod1-1{
sum1 = sum1+FK1[cnt];
}
SK1[0] = sum1/StoPeriod1;
}
if SK1[StoPeriod2] > 0 Then{
sum2 = 0;
for cnt = 0 to StoPeriod2-1{
sum2 = sum2+SK1[cnt];
}
SD1[0] = sum2/StoPeriod2;
}
#%k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if Stok >= 60 Then
BuySetup = false;
#날짜와 시간 설정
if sdate > 20140228 and stime > 090000 Then
Condition1 = true;
#BuySetup이 true일때
if BuySetup == true Then{
if Condition1 == true and
crossup(stok,stod) and
stok[1] < stod[1] and
MarketPosition == 0 and
SK1[0] > 60 And
dSK > dSD Then
buy("매수",OnClose,def,vol1);
}
뽄때
2014-05-20 13:48:16
일봉적용시 까지는 시스템 결과가 정상적으로 나왔는데요
주봉을 추가하니 검증은 완료되는데.. 매수도 되지않고 시스템결과도 나오지 않네요
아래의 식에서 연결선물로 시뮬레이션 해봤습니다
Input : Period(25), Period1(6), Period2(6), MAP(5),수량1(1),수량2(2);
input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),ExitSetup1(false),ExitSetup2(false),ExitSetup3(false),ExitSetup4(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(0);
var : dhighVal(0), dlowVal(0), dFK(0), dSK(0), dSD(0);
var : dEp1(0), dEp2(0),dPreSK(0), dPreSD(0);
Array : HH[50](0),LL[50](0),FK1[50](0),SK1[50](0),SD1[50](0);
var : wHvalue1(0),wLvalue1(0),wsum1(0),wsum2(0);
Array : WHH[50](0),WLL[50](0),wFK1[50](0),wSK1[50](0),wSD1[50](0);
#주봉 스토케스틱
if DayOfWeek(sdate) < DayOfWeek(sdate[1]) Then{
wHH[0] = H;
wLL[0] = L;
for cnt = 1 to 49{
wHH[cnt] = wHH[cnt-1][1];
wLL[cnt] = wLL[cnt-1][1];
wFK1[cnt] = wFK1[cnt-1][1];
wSK1[cnt] = wSK1[cnt-1][1];
wSD1[cnt] = wSD1[cnt-1][1];
}
}
if H > wHH[0] Then
wHH[0] = H;
if L < wLL[0] Then
wLL[0] = L;
if wHH[StoPeriod] > 0 Then{
wHvalue1 = wHH[0];
wLvalue1 = wLL[0];
for cnt = 0 to StoPeriod-1 {
if wHH[cnt] > wHvalue1 then
wHvalue1 = wHH[cnt];
if wLL[cnt] < wLvalue1 then
wLvalue1 = wLL[cnt];
}
wFK1[0] = (C-wLvalue1)/(wHvalue1-wLvalue1)*100;
}
if wFK1[StoPeriod1] > 0 Then{
wsum1 = 0;
for cnt = 0 to StoPeriod1-1{
wsum1 = wsum1+wFK1[cnt];
}
wSK1[0] = wsum1/StoPeriod1;
}
if wSK1[StoPeriod2] > 0 Then{
wsum2 = 0;
for cnt = 0 to StoPeriod2-1{
wsum2 = wsum2+wSK1[cnt];
}
wSD1[0] = wsum2/StoPeriod2;
}
#일봉 스토케스틱
#N일간 최고가 및 최저가
dhighVal = dayhigh(0);
dlowVal = daylow(0);
for cnt = 0 to Period-1 {
if dayHigh(cnt) > dhighVal then
dhighVal = dayhigh(cnt);
if dayLow(cnt) < dlowVal then
dlowVal = dayLow(cnt);
}
#Fast StochasticsK
dFK = (C-dlowVal)/(dhighVal-dlowVal)*100;
#Slow StochasticsK / Slow StochasticsD
dEp1 = 2/(Period1+1);
dEp2 = 2/(Period2+1);
if date != date[1] then {
dPreSK = dSK[1];
dPreSD = dSD[1];
}
dSK = dFK * dEP1 + dPreSK * (1-dEP1);
dSD = dSK * dEP2 + dPreSD * (1-dEP2);
#차트의 스토케스틱
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
#타분봉 스토케스틱
TF = TimeToMinutes(stime)%Atime;
if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
FK1[cnt] = FK1[cnt-1][1];
SK1[cnt] = SK1[cnt-1][1];
SD1[cnt] = SD1[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[StoPeriod] > 0 Then{
Hvalue1 = HH[0];
Lvalue1 = LL[0];
for cnt = 0 to StoPeriod-1 {
if HH[cnt] > Hvalue1 then
Hvalue1 = HH[cnt];
if LL[cnt] < Lvalue1 then
Lvalue1 = LL[cnt];
}
FK1[0] = (C-Lvalue1)/(Hvalue1-Lvalue1)*100;
}
if FK1[StoPeriod1] > 0 Then{
sum1 = 0;
for cnt = 0 to StoPeriod1-1{
sum1 = sum1+FK1[cnt];
}
SK1[0] = sum1/StoPeriod1;
}
if SK1[StoPeriod2] > 0 Then{
sum2 = 0;
for cnt = 0 to StoPeriod2-1{
sum2 = sum2+SK1[cnt];
}
SD1[0] = sum2/StoPeriod2;
}
#%k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if Stok >= 60 Then
BuySetup = false;
#날짜와 시간 설정
if sdate > 19990101 and stime > 090000 Then
Condition1 = true;
#BuySetup이 true일때
if BuySetup == true Then{
#매수조건
if Condition1 == true and crossup(stok,stod) and stok[1] < stod[1] and MarketPosition == 0
and SK1[0] > SD1[0] and dSK > dSD and wSK1[0] > wSD1[0] and wSD1[0] > 0 Then
buy("1차매수",OnClose,def,수량1);
}
예스스탁 예스스탁 답변
2014-05-20 14:10:15
안녕하세요
예스스탁입니다.
기존식에 차트의 기본 스토케스틱의 계산식이 빠져있었습니다.
#차트의 스토케스틱
Lvalue = lowest(L,Period); //생략되어 있음
Hvalue = highest(H,period); //생략되어 있음
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
아래는 수정한 식입니다.
Input : Period(25), Period1(6), Period2(6), MAP(5),수량1(1),수량2(2);
input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),ExitSetup1(false),ExitSetup2(false),ExitSetup3(false),ExitSetup4(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(0);
var : dhighVal(0), dlowVal(0), dFK(0), dSK(0), dSD(0);
var : dEp1(0), dEp2(0),dPreSK(0), dPreSD(0);
Array : HH[50](0),LL[50](0),FK1[50](0),SK1[50](0),SD1[50](0);
var : wHvalue1(0),wLvalue1(0),wsum1(0),wsum2(0);
Array : WHH[50](0),WLL[50](0),wFK1[50](0),wSK1[50](0),wSD1[50](0);
#주봉 스토케스틱
if DayOfWeek(sdate) < DayOfWeek(sdate[1]) Then{
wHH[0] = H;
wLL[0] = L;
for cnt = 1 to 49{
wHH[cnt] = wHH[cnt-1][1];
wLL[cnt] = wLL[cnt-1][1];
wFK1[cnt] = wFK1[cnt-1][1];
wSK1[cnt] = wSK1[cnt-1][1];
wSD1[cnt] = wSD1[cnt-1][1];
}
}
if H > wHH[0] Then
wHH[0] = H;
if L < wLL[0] Then
wLL[0] = L;
if wHH[StoPeriod] > 0 Then{
wHvalue1 = wHH[0];
wLvalue1 = wLL[0];
for cnt = 0 to StoPeriod-1 {
if wHH[cnt] > wHvalue1 then
wHvalue1 = wHH[cnt];
if wLL[cnt] < wLvalue1 then
wLvalue1 = wLL[cnt];
}
wFK1[0] = (C-wLvalue1)/(wHvalue1-wLvalue1)*100;
}
if wFK1[StoPeriod1] > 0 Then{
wsum1 = 0;
for cnt = 0 to StoPeriod1-1{
wsum1 = wsum1+wFK1[cnt];
}
wSK1[0] = wsum1/StoPeriod1;
}
if wSK1[StoPeriod2] > 0 Then{
wsum2 = 0;
for cnt = 0 to StoPeriod2-1{
wsum2 = wsum2+wSK1[cnt];
}
wSD1[0] = wsum2/StoPeriod2;
}
#일봉 스토케스틱
#N일간 최고가 및 최저가
dhighVal = dayhigh(0);
dlowVal = daylow(0);
for cnt = 0 to Period-1 {
if dayHigh(cnt) > dhighVal then
dhighVal = dayhigh(cnt);
if dayLow(cnt) < dlowVal then
dlowVal = dayLow(cnt);
}
#Fast StochasticsK
dFK = (C-dlowVal)/(dhighVal-dlowVal)*100;
#Slow StochasticsK / Slow StochasticsD
dEp1 = 2/(Period1+1);
dEp2 = 2/(Period2+1);
if date != date[1] then {
dPreSK = dSK[1];
dPreSD = dSD[1];
}
dSK = dFK * dEP1 + dPreSK * (1-dEP1);
dSD = dSK * dEP2 + dPreSD * (1-dEP2);
#차트의 스토케스틱
Lvalue = lowest(L,Period);
Hvalue = highest(H,period);
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
#타분봉 스토케스틱
TF = TimeToMinutes(stime)%Atime;
if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
FK1[cnt] = FK1[cnt-1][1];
SK1[cnt] = SK1[cnt-1][1];
SD1[cnt] = SD1[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[StoPeriod] > 0 Then{
Hvalue1 = HH[0];
Lvalue1 = LL[0];
for cnt = 0 to StoPeriod-1 {
if HH[cnt] > Hvalue1 then
Hvalue1 = HH[cnt];
if LL[cnt] < Lvalue1 then
Lvalue1 = LL[cnt];
}
FK1[0] = (C-Lvalue1)/(Hvalue1-Lvalue1)*100;
}
if FK1[StoPeriod1] > 0 Then{
sum1 = 0;
for cnt = 0 to StoPeriod1-1{
sum1 = sum1+FK1[cnt];
}
SK1[0] = sum1/StoPeriod1;
}
if SK1[StoPeriod2] > 0 Then{
sum2 = 0;
for cnt = 0 to StoPeriod2-1{
sum2 = sum2+SK1[cnt];
}
SD1[0] = sum2/StoPeriod2;
}
#%k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if Stok >= 60 Then
BuySetup = false;
#날짜와 시간 설정
if sdate > 19990101 and stime > 090000 Then
Condition1 = true;
#BuySetup이 true일때
if BuySetup == true Then{
#매수조건
if Condition1 == true and
crossup(stok,stod) and
stok[1] < stod[1] and
MarketPosition == 0 and
SK1[0] > SD1[0] and
dSK > dSD and
wSK1[0] > wSD1[0] and wSD1[0] > 0
Then
buy("1차매수",OnClose,def,수량1);
}
즐거운 하루되세요
> 뽄때 님이 쓴 글입니다.
> 제목 : Re : Re : 수식변경 부탁드립니다
>
일봉적용시 까지는 시스템 결과가 정상적으로 나왔는데요
주봉을 추가하니 검증은 완료되는데.. 매수도 되지않고 시스템결과도 나오지 않네요
아래의 식에서 연결선물로 시뮬레이션 해봤습니다
Input : Period(25), Period1(6), Period2(6), MAP(5),수량1(1),수량2(2);
input : Atime(60),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);//타분봉(Atime) 스토케스틱
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),ExitSetup1(false),ExitSetup2(false),ExitSetup3(false),ExitSetup4(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(0);
var : dhighVal(0), dlowVal(0), dFK(0), dSK(0), dSD(0);
var : dEp1(0), dEp2(0),dPreSK(0), dPreSD(0);
Array : HH[50](0),LL[50](0),FK1[50](0),SK1[50](0),SD1[50](0);
var : wHvalue1(0),wLvalue1(0),wsum1(0),wsum2(0);
Array : WHH[50](0),WLL[50](0),wFK1[50](0),wSK1[50](0),wSD1[50](0);
#주봉 스토케스틱
if DayOfWeek(sdate) < DayOfWeek(sdate[1]) Then{
wHH[0] = H;
wLL[0] = L;
for cnt = 1 to 49{
wHH[cnt] = wHH[cnt-1][1];
wLL[cnt] = wLL[cnt-1][1];
wFK1[cnt] = wFK1[cnt-1][1];
wSK1[cnt] = wSK1[cnt-1][1];
wSD1[cnt] = wSD1[cnt-1][1];
}
}
if H > wHH[0] Then
wHH[0] = H;
if L < wLL[0] Then
wLL[0] = L;
if wHH[StoPeriod] > 0 Then{
wHvalue1 = wHH[0];
wLvalue1 = wLL[0];
for cnt = 0 to StoPeriod-1 {
if wHH[cnt] > wHvalue1 then
wHvalue1 = wHH[cnt];
if wLL[cnt] < wLvalue1 then
wLvalue1 = wLL[cnt];
}
wFK1[0] = (C-wLvalue1)/(wHvalue1-wLvalue1)*100;
}
if wFK1[StoPeriod1] > 0 Then{
wsum1 = 0;
for cnt = 0 to StoPeriod1-1{
wsum1 = wsum1+wFK1[cnt];
}
wSK1[0] = wsum1/StoPeriod1;
}
if wSK1[StoPeriod2] > 0 Then{
wsum2 = 0;
for cnt = 0 to StoPeriod2-1{
wsum2 = wsum2+wSK1[cnt];
}
wSD1[0] = wsum2/StoPeriod2;
}
#일봉 스토케스틱
#N일간 최고가 및 최저가
dhighVal = dayhigh(0);
dlowVal = daylow(0);
for cnt = 0 to Period-1 {
if dayHigh(cnt) > dhighVal then
dhighVal = dayhigh(cnt);
if dayLow(cnt) < dlowVal then
dlowVal = dayLow(cnt);
}
#Fast StochasticsK
dFK = (C-dlowVal)/(dhighVal-dlowVal)*100;
#Slow StochasticsK / Slow StochasticsD
dEp1 = 2/(Period1+1);
dEp2 = 2/(Period2+1);
if date != date[1] then {
dPreSK = dSK[1];
dPreSD = dSD[1];
}
dSK = dFK * dEP1 + dPreSK * (1-dEP1);
dSD = dSK * dEP2 + dPreSD * (1-dEP2);
#차트의 스토케스틱
FK = (Close - Lvalue) / (Hvalue - Lvalue) * 100;
StoK = ma(FK,Period1);
StoD = ma(StoK,Period2);
mav = ma(C,MAP);
#타분봉 스토케스틱
TF = TimeToMinutes(stime)%Atime;
if dayindex == 0 or (TF < TF[1] and stime > stime[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 49{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
FK1[cnt] = FK1[cnt-1][1];
SK1[cnt] = SK1[cnt-1][1];
SD1[cnt] = SD1[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[StoPeriod] > 0 Then{
Hvalue1 = HH[0];
Lvalue1 = LL[0];
for cnt = 0 to StoPeriod-1 {
if HH[cnt] > Hvalue1 then
Hvalue1 = HH[cnt];
if LL[cnt] < Lvalue1 then
Lvalue1 = LL[cnt];
}
FK1[0] = (C-Lvalue1)/(Hvalue1-Lvalue1)*100;
}
if FK1[StoPeriod1] > 0 Then{
sum1 = 0;
for cnt = 0 to StoPeriod1-1{
sum1 = sum1+FK1[cnt];
}
SK1[0] = sum1/StoPeriod1;
}
if SK1[StoPeriod2] > 0 Then{
sum2 = 0;
for cnt = 0 to StoPeriod2-1{
sum2 = sum2+SK1[cnt];
}
SD1[0] = sum2/StoPeriod2;
}
#%k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if Stok >= 60 Then
BuySetup = false;
#날짜와 시간 설정
if sdate > 19990101 and stime > 090000 Then
Condition1 = true;
#BuySetup이 true일때
if BuySetup == true Then{
#매수조건
if Condition1 == true and crossup(stok,stod) and stok[1] < stod[1] and MarketPosition == 0
and SK1[0] > SD1[0] and dSK > dSD and wSK1[0] > wSD1[0] and wSD1[0] > 0 Then
buy("1차매수",OnClose,def,수량1);
}