커뮤니티
수식 추가 부탁드립니다
2014-06-17 20:30:54
239
글번호 75906
항상 도움을 주셔서 감사를 드립니다
아래의 식에서 손절방법을 추가하고자 합니다.
그림에서 처럼 매수포지션 진입후 진입캔들 이전 10개 캔들안에서 최저가격을 확인하고
그 최저가격보다 -0.5 더 떨어지면 Exitlong하는 방법입니다.
또한 매도포지션 진입후 진입캔들 이전 10개 캔들내에서 최고가격을 확인하고
그 가격보다 +0.5 이상 상승하면 Extishort하는 방법입니다
그리고 일봉 스토케스틱이 dSK1[0] > dSD1[0] 구간이 시작되면 "매수게임 구간"
dSK1[0] > dSD1[0] 구간이 시작되면 "매도게임 구간" 이라고
챠트에 표시할 수는 없을까요?
==================================================================================
Input : Period(25), Period1(6), Period2(6), MAP(5),수량1(1),수량2(2);
input : Atime1(240),Atime2(30),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0),Gncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),BuySetup2(true),SellSetup(true),SellSetup2(true),ExitSetup1(false),ExitSetup2(false),ExitSetup3(false),ExitSetup4(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(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);
Array : dHH[50](0),dLL[50](0),dFK1[50](0),dSK1[50](0),dSD1[50](0);
var : nTF(0),nHvalue1(0),nLvalue1(0),nsum1(0),nsum2(0);
Array : nHH[50](0),nLL[50](0),nFK1[50](0),nSK1[50](0),nSD1[50](0);
var : dHvalue1(0),dLvalue1(0),dsum1(0),dsum2(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일간 최고가 및 최저가
if date != date[1] Then{
dHH[0] = H;
dLL[0] = L;
for cnt = 1 to 49{
dHH[cnt] = dHH[cnt-1][1];
dLL[cnt] = dLL[cnt-1][1];
dFK1[cnt] = dFK1[cnt-1][1];
dSK1[cnt] = dSK1[cnt-1][1];
dSD1[cnt] = dSD1[cnt-1][1];
}
}
if H > dHH[0] Then
dHH[0] = H;
if L < dLL[0] Then
dLL[0] = L;
if dHH[StoPeriod] > 0 Then{
dHvalue1 = dHH[0];
dLvalue1 = dLL[0];
for cnt = 0 to StoPeriod-1 {
if dHH[cnt] > dHvalue1 then
dHvalue1 = dHH[cnt];
if dLL[cnt] < dLvalue1 then
dLvalue1 = dLL[cnt];
}
dFK1[0] = (C-dLvalue1)/(dHvalue1-dLvalue1)*100;
}
if dFK1[StoPeriod1] > 0 Then{
dsum1 = 0;
for cnt = 0 to StoPeriod1-1{
dsum1 = dsum1+dFK1[cnt];
}
dSK1[0] = dsum1/StoPeriod1;
}
if dSK1[StoPeriod2] > 0 Then{
dsum2 = 0;
for cnt = 0 to StoPeriod2-1{
dsum2 = dsum2+dSK1[cnt];
}
dSD1[0] = dsum2/StoPeriod2;
}
#차트의 스토케스틱
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);
#타분봉1 스토케스틱
TF = TimeToMinutes(stime)%Atime1;
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;
}
#타분봉2 스토케스틱
nTF = TimeToMinutes(stime)%Atime2;
if dayindex == 0 or (nTF < nTF[1] and stime > stime[1]) Then{
nHH[0] = H;
nLL[0] = L;
for cnt = 1 to 49{
nHH[cnt] = nHH[cnt-1][1];
nLL[cnt] = nLL[cnt-1][1];
nFK1[cnt] = nFK1[cnt-1][1];
nSK1[cnt] = nSK1[cnt-1][1];
nSD1[cnt] = nSD1[cnt-1][1];
}
}
if H > nHH[0] Then
nHH[0] = H;
if L < nLL[0] Then
nLL[0] = L;
if nHH[StoPeriod] > 0 Then{
nHvalue1 = nHH[0];
nLvalue1 = nLL[0];
for cnt = 0 to StoPeriod-1 {
if nHH[cnt] > nHvalue1 then
nHvalue1 = nHH[cnt];
if nLL[cnt] < nLvalue1 then
nLvalue1 = nLL[cnt];
}
nFK1[0] = (C-nLvalue1)/(nHvalue1-nLvalue1)*100;
}
if nFK1[StoPeriod1] > 0 Then{
nsum1 = 0;
for cnt = 0 to StoPeriod1-1{
nsum1 = nsum1+nFK1[cnt];
}
nSK1[0] = nsum1/StoPeriod1;
}
if nSK1[StoPeriod2] > 0 Then{
nsum2 = 0;
for cnt = 0 to StoPeriod2-1{
nsum2 = nsum2+nSK1[cnt];
}
nSD1[0] = nsum2/StoPeriod2;
}
# 매수포지션 진입============================================
# %k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if stok >= 80 Then
BuySetup = false;
#BuySetup이 true일때
if BuySetup == true Then{
#매수조건 : 스톡케스틱 골든크로스 and 일봉 골든크로스 구간
if crossup(stok,stod) and stok[1] < stod[1]
and dSK1[0] > dSD1[0]
and MarketPosition == 0
Then buy("1차매수",OnClose,def,수량1);
}
##매수청산
if MarketPosition == 1 Then{
#매수포지션에 진입하면 BuySetup은 false
BuySetup = false;
#80을 상향돌파한 이후에 첫번째 D.C 발생시 청산
if CrossUp(stok,80) Then
ExitSetup1 = true;
if ExitSetup1 == true and CrossDown(stok,stod) and stok[1] > stod[1] Then
ExitLong("매수청산");
}
Else //매수포지션이 아니면 ExitSetup1을 false로 초기화
ExitSetup1 = false;
# 매도포지션 진입============================================
# %k가 80을 상향돌파하면 SellSetup은 true
if SellSetup == false and CrossUp(stok,80) Then{
SellSetup = true;
}
#%k가 40이하 하락하면 SellSetup은 false
if stok <= 40 Then
SellSetup = false;
#SellSetup이 true일때
if SellSetup == true Then{
#매도조건 : 스톡케스틱 데드크로스 and 일봉 데드크로스 구간
if CrossDown(stok,stod) and stok[1] > stod[1]
and dSK1[0] < dSD1[0]
and MarketPosition == 0
Then Sell("1차매도",OnClose,def,수량1);
}
##매도 포지션 청산
if MarketPosition == -1 Then{
#매도포지션에 진입하면 SellSetup은 false
SellSetup = false;
#20을 하향돌파한 이후에 첫번째 D.C 발생시 청산
if CrossDown(stok,20) Then
ExitSetup2 = true;
if ExitSetup2 == true and CrossUp(stok,stod) and stok[1] < stod[1] Then
ExitShort("매도청산");
}
Else{ //매도포지션이 아니면 ExitSetup2를 false로 초기화
ExitSetup2 = false;
}
- 1. 손절_방법.jpg (0.06 MB)
답변 1
예스스탁 예스스탁 답변
2014-06-18 13:47:15
안녕하세요
예스스탁입니다.
청산과 텍스트 출력부분 수식 하단으로 추가됬습니다.
Input : Period(25), Period1(6), Period2(6), MAP(5),수량1(1),수량2(2);
input : Atime1(240),Atime2(30),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0),Gncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),BuySetup2(true),SellSetup(true),SellSetup2(true),ExitSetup1(false),ExitSetup2(false),ExitSetup3(false),ExitSetup4(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(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);
Array : dHH[50](0),dLL[50](0),dFK1[50](0),dSK1[50](0),dSD1[50](0);
var : nTF(0),nHvalue1(0),nLvalue1(0),nsum1(0),nsum2(0);
Array : nHH[50](0),nLL[50](0),nFK1[50](0),nSK1[50](0),nSD1[50](0);
var : dHvalue1(0),dLvalue1(0),dsum1(0),dsum2(0);
var : cond1(false),cond2(false),Tx(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일간 최고가 및 최저가
if date != date[1] Then{
dHH[0] = H;
dLL[0] = L;
for cnt = 1 to 49{
dHH[cnt] = dHH[cnt-1][1];
dLL[cnt] = dLL[cnt-1][1];
dFK1[cnt] = dFK1[cnt-1][1];
dSK1[cnt] = dSK1[cnt-1][1];
dSD1[cnt] = dSD1[cnt-1][1];
}
}
if H > dHH[0] Then
dHH[0] = H;
if L < dLL[0] Then
dLL[0] = L;
if dHH[StoPeriod] > 0 Then{
dHvalue1 = dHH[0];
dLvalue1 = dLL[0];
for cnt = 0 to StoPeriod-1 {
if dHH[cnt] > dHvalue1 then
dHvalue1 = dHH[cnt];
if dLL[cnt] < dLvalue1 then
dLvalue1 = dLL[cnt];
}
dFK1[0] = (C-dLvalue1)/(dHvalue1-dLvalue1)*100;
}
if dFK1[StoPeriod1] > 0 Then{
dsum1 = 0;
for cnt = 0 to StoPeriod1-1{
dsum1 = dsum1+dFK1[cnt];
}
dSK1[0] = dsum1/StoPeriod1;
}
if dSK1[StoPeriod2] > 0 Then{
dsum2 = 0;
for cnt = 0 to StoPeriod2-1{
dsum2 = dsum2+dSK1[cnt];
}
dSD1[0] = dsum2/StoPeriod2;
}
#차트의 스토케스틱
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);
#타분봉1 스토케스틱
TF = TimeToMinutes(stime)%Atime1;
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;
}
#타분봉2 스토케스틱
nTF = TimeToMinutes(stime)%Atime2;
if dayindex == 0 or (nTF < nTF[1] and stime > stime[1]) Then{
nHH[0] = H;
nLL[0] = L;
for cnt = 1 to 49{
nHH[cnt] = nHH[cnt-1][1];
nLL[cnt] = nLL[cnt-1][1];
nFK1[cnt] = nFK1[cnt-1][1];
nSK1[cnt] = nSK1[cnt-1][1];
nSD1[cnt] = nSD1[cnt-1][1];
}
}
if H > nHH[0] Then
nHH[0] = H;
if L < nLL[0] Then
nLL[0] = L;
if nHH[StoPeriod] > 0 Then{
nHvalue1 = nHH[0];
nLvalue1 = nLL[0];
for cnt = 0 to StoPeriod-1 {
if nHH[cnt] > nHvalue1 then
nHvalue1 = nHH[cnt];
if nLL[cnt] < nLvalue1 then
nLvalue1 = nLL[cnt];
}
nFK1[0] = (C-nLvalue1)/(nHvalue1-nLvalue1)*100;
}
if nFK1[StoPeriod1] > 0 Then{
nsum1 = 0;
for cnt = 0 to StoPeriod1-1{
nsum1 = nsum1+nFK1[cnt];
}
nSK1[0] = nsum1/StoPeriod1;
}
if nSK1[StoPeriod2] > 0 Then{
nsum2 = 0;
for cnt = 0 to StoPeriod2-1{
nsum2 = nsum2+nSK1[cnt];
}
nSD1[0] = nsum2/StoPeriod2;
}
# 매수포지션 진입============================================
# %k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if stok >= 80 Then
BuySetup = false;
#BuySetup이 true일때
if BuySetup == true Then{
#매수조건 : 스톡케스틱 골든크로스 and 일봉 골든크로스 구간
if crossup(stok,stod) and stok[1] < stod[1]
and dSK1[0] > dSD1[0]
and MarketPosition == 0
Then buy("1차매수",OnClose,def,수량1);
}
##매수청산
if MarketPosition == 1 Then{
#매수포지션에 진입하면 BuySetup은 false
BuySetup = false;
#80을 상향돌파한 이후에 첫번째 D.C 발생시 청산
if CrossUp(stok,80) Then
ExitSetup1 = true;
if ExitSetup1 == true and CrossDown(stok,stod) and stok[1] > stod[1] Then
ExitLong("매수청산");
}
Else //매수포지션이 아니면 ExitSetup1을 false로 초기화
ExitSetup1 = false;
# 매도포지션 진입============================================
# %k가 80을 상향돌파하면 SellSetup은 true
if SellSetup == false and CrossUp(stok,80) Then{
SellSetup = true;
}
#%k가 40이하 하락하면 SellSetup은 false
if stok <= 40 Then
SellSetup = false;
#SellSetup이 true일때
if SellSetup == true Then{
#매도조건 : 스톡케스틱 데드크로스 and 일봉 데드크로스 구간
if CrossDown(stok,stod) and stok[1] > stod[1]
and dSK1[0] < dSD1[0]
and MarketPosition == 0
Then Sell("1차매도",OnClose,def,수량1);
}
##매도 포지션 청산
if MarketPosition == -1 Then{
#매도포지션에 진입하면 SellSetup은 false
SellSetup = false;
#20을 하향돌파한 이후에 첫번째 D.C 발생시 청산
if CrossDown(stok,20) Then
ExitSetup2 = true;
if ExitSetup2 == true and CrossUp(stok,stod) and stok[1] < stod[1] Then
ExitShort("매도청산");
}
Else{ //매도포지션이 아니면 ExitSetup2를 false로 초기화
ExitSetup2 = false;
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,Lowest(L,10)[BarsSinceEntry]-0.5);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,highest(H,10)[BarsSinceEntry]+0.5);
cond1 = dSK1[0] > dSD1[0];
cond2 = dSK1[0] < dSD1[0];
if Cond1 == true and cond1[1] == false Then{
tx = Text_New(sdate,stime,H+PriceScale*2,"매수게임구간");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,RED);
}
if Cond2 == true and cond2[1] == false Then{
tx = Text_New(sdate,stime,L-PriceScale*2,"매도게임구간");
Text_SetStyle(tx,2,2);
Text_SetColor(tx,blue);
}
즐거운 하루되세요
> 뽄때 님이 쓴 글입니다.
> 제목 : 수식 추가 부탁드립니다
> 항상 도움을 주셔서 감사를 드립니다
아래의 식에서 손절방법을 추가하고자 합니다.
그림에서 처럼 매수포지션 진입후 진입캔들 이전 10개 캔들안에서 최저가격을 확인하고
그 최저가격보다 -0.5 더 떨어지면 Exitlong하는 방법입니다.
또한 매도포지션 진입후 진입캔들 이전 10개 캔들내에서 최고가격을 확인하고
그 가격보다 +0.5 이상 상승하면 Extishort하는 방법입니다
그리고 일봉 스토케스틱이 dSK1[0] > dSD1[0] 구간이 시작되면 "매수게임 구간"
dSK1[0] > dSD1[0] 구간이 시작되면 "매도게임 구간" 이라고
챠트에 표시할 수는 없을까요?
==================================================================================
Input : Period(25), Period1(6), Period2(6), MAP(5),수량1(1),수량2(2);
input : Atime1(240),Atime2(30),StoPeriod(25), StoPeriod1(6), StoPeriod2(6);
var : StoK(0),StoD(0),vol1(0),vol2(0),mav(0),SH(0),cross(0),Dncnt(0),Gncnt(0);
Var : Lvalue(0), Hvalue(0),FK(0),BuySetup(true),BuySetup2(true),SellSetup(true),SellSetup2(true),ExitSetup1(false),ExitSetup2(false),ExitSetup3(false),ExitSetup4(false);
var : cnt(0),TF(0),Hvalue1(0), Lvalue1(0),sum1(0),sum2(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);
Array : dHH[50](0),dLL[50](0),dFK1[50](0),dSK1[50](0),dSD1[50](0);
var : nTF(0),nHvalue1(0),nLvalue1(0),nsum1(0),nsum2(0);
Array : nHH[50](0),nLL[50](0),nFK1[50](0),nSK1[50](0),nSD1[50](0);
var : dHvalue1(0),dLvalue1(0),dsum1(0),dsum2(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일간 최고가 및 최저가
if date != date[1] Then{
dHH[0] = H;
dLL[0] = L;
for cnt = 1 to 49{
dHH[cnt] = dHH[cnt-1][1];
dLL[cnt] = dLL[cnt-1][1];
dFK1[cnt] = dFK1[cnt-1][1];
dSK1[cnt] = dSK1[cnt-1][1];
dSD1[cnt] = dSD1[cnt-1][1];
}
}
if H > dHH[0] Then
dHH[0] = H;
if L < dLL[0] Then
dLL[0] = L;
if dHH[StoPeriod] > 0 Then{
dHvalue1 = dHH[0];
dLvalue1 = dLL[0];
for cnt = 0 to StoPeriod-1 {
if dHH[cnt] > dHvalue1 then
dHvalue1 = dHH[cnt];
if dLL[cnt] < dLvalue1 then
dLvalue1 = dLL[cnt];
}
dFK1[0] = (C-dLvalue1)/(dHvalue1-dLvalue1)*100;
}
if dFK1[StoPeriod1] > 0 Then{
dsum1 = 0;
for cnt = 0 to StoPeriod1-1{
dsum1 = dsum1+dFK1[cnt];
}
dSK1[0] = dsum1/StoPeriod1;
}
if dSK1[StoPeriod2] > 0 Then{
dsum2 = 0;
for cnt = 0 to StoPeriod2-1{
dsum2 = dsum2+dSK1[cnt];
}
dSD1[0] = dsum2/StoPeriod2;
}
#차트의 스토케스틱
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);
#타분봉1 스토케스틱
TF = TimeToMinutes(stime)%Atime1;
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;
}
#타분봉2 스토케스틱
nTF = TimeToMinutes(stime)%Atime2;
if dayindex == 0 or (nTF < nTF[1] and stime > stime[1]) Then{
nHH[0] = H;
nLL[0] = L;
for cnt = 1 to 49{
nHH[cnt] = nHH[cnt-1][1];
nLL[cnt] = nLL[cnt-1][1];
nFK1[cnt] = nFK1[cnt-1][1];
nSK1[cnt] = nSK1[cnt-1][1];
nSD1[cnt] = nSD1[cnt-1][1];
}
}
if H > nHH[0] Then
nHH[0] = H;
if L < nLL[0] Then
nLL[0] = L;
if nHH[StoPeriod] > 0 Then{
nHvalue1 = nHH[0];
nLvalue1 = nLL[0];
for cnt = 0 to StoPeriod-1 {
if nHH[cnt] > nHvalue1 then
nHvalue1 = nHH[cnt];
if nLL[cnt] < nLvalue1 then
nLvalue1 = nLL[cnt];
}
nFK1[0] = (C-nLvalue1)/(nHvalue1-nLvalue1)*100;
}
if nFK1[StoPeriod1] > 0 Then{
nsum1 = 0;
for cnt = 0 to StoPeriod1-1{
nsum1 = nsum1+nFK1[cnt];
}
nSK1[0] = nsum1/StoPeriod1;
}
if nSK1[StoPeriod2] > 0 Then{
nsum2 = 0;
for cnt = 0 to StoPeriod2-1{
nsum2 = nsum2+nSK1[cnt];
}
nSD1[0] = nsum2/StoPeriod2;
}
# 매수포지션 진입============================================
# %k가 25을 하향돌파하면 BuySetup은 true
if BuySetup == false and CrossDown(stok,25) Then{
BuySetup = true;
}
#%k가 60이상 상승하면 BuySetup은 false
if stok >= 80 Then
BuySetup = false;
#BuySetup이 true일때
if BuySetup == true Then{
#매수조건 : 스톡케스틱 골든크로스 and 일봉 골든크로스 구간
if crossup(stok,stod) and stok[1] < stod[1]
and dSK1[0] > dSD1[0]
and MarketPosition == 0
Then buy("1차매수",OnClose,def,수량1);
}
##매수청산
if MarketPosition == 1 Then{
#매수포지션에 진입하면 BuySetup은 false
BuySetup = false;
#80을 상향돌파한 이후에 첫번째 D.C 발생시 청산
if CrossUp(stok,80) Then
ExitSetup1 = true;
if ExitSetup1 == true and CrossDown(stok,stod) and stok[1] > stod[1] Then
ExitLong("매수청산");
}
Else //매수포지션이 아니면 ExitSetup1을 false로 초기화
ExitSetup1 = false;
# 매도포지션 진입============================================
# %k가 80을 상향돌파하면 SellSetup은 true
if SellSetup == false and CrossUp(stok,80) Then{
SellSetup = true;
}
#%k가 40이하 하락하면 SellSetup은 false
if stok <= 40 Then
SellSetup = false;
#SellSetup이 true일때
if SellSetup == true Then{
#매도조건 : 스톡케스틱 데드크로스 and 일봉 데드크로스 구간
if CrossDown(stok,stod) and stok[1] > stod[1]
and dSK1[0] < dSD1[0]
and MarketPosition == 0
Then Sell("1차매도",OnClose,def,수량1);
}
##매도 포지션 청산
if MarketPosition == -1 Then{
#매도포지션에 진입하면 SellSetup은 false
SellSetup = false;
#20을 하향돌파한 이후에 첫번째 D.C 발생시 청산
if CrossDown(stok,20) Then
ExitSetup2 = true;
if ExitSetup2 == true and CrossUp(stok,stod) and stok[1] < stod[1] Then
ExitShort("매도청산");
}
Else{ //매도포지션이 아니면 ExitSetup2를 false로 초기화
ExitSetup2 = false;
}