커뮤니티

수식 추가 부탁드립니다

프로필 이미지
뽄때
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
프로필 이미지

예스스탁 예스스탁 답변

2014-06-18 13:47:15

안녕하세요 예스스탁입니다. 청산과 텍스트 출력부분 수식 하단으로 추가&#46124;습니다. 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; }