답변완료
수식 수정 부탁드립니다.
안녕하세요.
수식오류 수정 부탁드립니다.
Input : term1(5),term2(9),term3(14),term4(20),Period1(9), Period2(13), Period3(2), Period4(3);
Var : X1(0),X2(0),X3(0),X4(0),S1(0),S2(0),S3(0),S4(0),XS(0),value1(0),Value2(0),SToR(0) ;
X1=Trix(term1)-Trix(term1)[1];
X2=Trix(term2)-Trix(term2)[1];
X3=Trix(term3)-Trix(term3)[1];
X4=Trix(term4)-Trix(term4)[1];
S1 = Ema(X1,9);
S2 = Ema(X2,9);
S3 = Ema(X3,9);
S4 = Ema(X4,9);
XS = X1<0 and X2<0 and X3<0 and X4<0 && S1<0 and S2<0 and S3<0 and S4<0 ;
value1 = ((RSI(Period1)- lowest(RSI(Period1),Period2))
/ (highest(RSI(Period1),Period2)-(lowest(RSI(Period1),Period2))))*100;
Value2 = ma(Value1,Period3);
SToR = ma(Value2,Period4);
if XS && SToR[2]>SToR[1] && SToR[1]< SToR[0] && H[1]<H[0] Then
Find(1);
2025-03-19
342
글번호 189348
검색
답변완료
청산관련하여 질문 드립니다.
////////////////////////////////////////////////////////////////////
// 개선된 Stochastic Slow(이중바닥) + 5/10일선 + 일봉기반 청산 + 7%익절/5%손절
////////////////////////////////////////////////////////////////////
Inputs:
Period(7), // 일봉 평균 계산 기간
Day5(5), // 단기 이동평균
Day10(10); // 장기 이동평균
Vars:
// 스윙포인트 관련
SLV1(0), SLV2(0),
// 스토캐스틱 (두 가지 주기)
stoK(0), stoD(0),
stoK1(0), stoD1(0),
// 5일/10일 이동평균
var1(0), var2(0),
// 일봉 평균 계산용
Sum(0), Sum1(0), cnt(0),
DayMa(0), DayMa2(0), // DayMa2는 Sum1 활용 예시
// 기타
swingBar1(0), swingBar2(0); // 스윙로우 발생 봉 인덱스(20봉 이내인지 체크용)
//------------------------------------------------------------------//
// (1) 이동평균 및 스토캐스틱 계산
//------------------------------------------------------------------//
// --> 입력값 Day5, Day10 활용
var1 = MA(C, Day5); // 5일 이동평균
var2 = MA(C, Day10); // 10일 이동평균
// Stochastic(20,12)와 SlowD(20,12,12)
stoK = StochasticsK(20, 12);
stoD = StochasticsD(20, 12, 12);
// Stochastic(10,6)와 SlowD(10,6,6)
stoK1 = StochasticsK(10, 6);
stoD1 = StochasticsD(10, 6, 6);
//------------------------------------------------------------------//
// (2) 스윙 저점(이중바닥) 탐색
//------------------------------------------------------------------//
// SwingLow(N, 데이터, LeftStrength, RightStrength, 최대바 수)
// N=1 → 가장 최근 스윙 저점 값, N=2 → 이전 스윙 저점 값
SLV1 = SwingLow(1, stoK, 3, 2, 100);
SLV2 = SwingLow(2, stoK, 3, 2, 100);
// 봉 인덱스도 얻을 수 있다면(환경에 따라 다름)
// SwingLowBar(N, 데이터, LeftStr, RightStr, 최대바수)
swingBar1 = SwingLowBar(1, stoK, 3, 2, 100);
swingBar2 = SwingLowBar(2, stoK, 3, 2, 100);
//------------------------------------------------------------------//
// (3) 일봉 평균(DayClose) 계산
//------------------------------------------------------------------//
// 7일간(DayClose) 합산 → DayMa
// Sum1도 함께 구해, 필요시 다른 로직에 활용 (DayMa2)
Sum = 0;
Sum1 = 0;
For cnt = 0 to Period - 1
Begin
Sum = Sum + DayClose(cnt);
Sum1 = Sum1 + DayClose(cnt + 1);
End;
DayMa = Sum / Period;
DayMa2 = Sum1 / Period; // 이 값(DayMa2)은 필요시 다른 조건에 활용 가능
//------------------------------------------------------------------//
// (4) 매수 조건:
// - 스윙저점 SLV1 >= SLV2 (최근 저점이 이전 저점 이상)
// - (var1 > var2) → 5일선이 10일선 위
// - (stoK > stoD) 또는 (stoK1 > stoD1) 중 하나라도 골든크로스
// - (swingBar1 - swingBar2 <= 20) → 최근 두 스윙저점이 20봉 이내(옵션)
//------------------------------------------------------------------//
If MarketPosition == 0 Then
Begin
// “스윙 저점이 20봉 이내”를 확인하고 싶다면 아래 조건 사용:
// (AbsValue(swingBar1 - swingBar2) <= 20)
// 환경마다 swingBar1,2가 큰 값(과거)부터 작은 값(최근) 순으로 나오므로
// 실제 동작을 확인해봐야 합니다.
If (SLV1 >= SLV2) and
(var1 > var2) and
( (stoK > stoD) or (stoK1 > stoD1) )
// and (AbsValue(swingBar1 - swingBar2) <= 20) // 옵션
Then
Begin
// 중복 매수를 막기 위해 한 봉에 단 한 번의 매수만 발생
Buy("이중바닥매수");
End;
End;
//------------------------------------------------------------------//
// (5) 청산 조건:
// (A) 현재 종가가 DayMa(7일 평균) 아래로 하락(CrossDown) 시 청산
// (B) 추가로 7%익절 / 5%손절(PercentStop) 사용
//------------------------------------------------------------------//
If MarketPosition == 1 Then
{
if CrossDown(c,DayMa) Then
ExitLong();
}
// (A) SetStopProfitTarget(7, PercentStop) → +7% 익절
// (B) SetStopLoss(5, PercentStop) → -5% 손절
SetStopProfitTarget(7, PercentStop);
SetStopLoss(5, PercentStop);
7%익절 -5%손절 부분을
* 7%익절
* -7%하락시 보유수량의 2배만큼 추가매수
* 추가매수된 상태에서는 +3%익절, -5%손절
* 청산 후 3개봉까지는 신호가 발생해도 매수하지 않도록
위와같이 수정하고 싶은데 코드가 잘 만들어지지 않습니다. 도움주시면 감사하겠습니다.
2025-03-19
303
글번호 189335
시스템
답변완료
수식수정
input : 기간(15),간격(3);
var : 다(0),바(0),스(0),bs(-1);
다=Lowest(L[1],기간);
바=Highest(H[1],기간);
if L < 다[1] Then
bs = 0;
Else
{
if bs >= 0 Then
{
bs = bs+1;
if bs == 기간-간격 then
스 = 바;
}
}
var1 = ma(C,60);
if 스 > 0 and CrossUp(C,스) and CrossUp(C,var1) and max(스,var1) <= min(스,var1)*1.01 Then
Find(1);
====================================================================
위 수식은
종가가 다바스상단과 60단순이평을 저이격(1%이하)으로 돌파하는 종목검색용으로 작성해주신 것입니다.
실제 대입해 종목검색해보니 예를들면 오늘 DB손해,롯데칠성같이 해당않되는게 검색되고
픽셀플러스같이 해당되는건 검색되어서....
롯데칠성 DB손해보험 픽셀플러스
전일 종가 108,100 97,100 6,650
다박스상단 107,900 102,500 6,700
60이평 107,960 98,510.000 6,743.167
금일 종가 109,200 98,600 7,330
다박스상단 107,900 102,500 6,700
60이평 107,766.667 98,341.667 6,765.500
제 의도는 어제 종가는 다바스상단과 60단순이평아래였다가 금일 종가는 둘다 돌파하되 둘의 이격은 1%이하로 된 종목을 검색코저 하는 것입니다.
혹시 수식 끝부분 max(스,var1) <= min(스,var1)*1.01은 문제없는지, 뜻은?
검토요청드립니다.
2025-03-19
313
글번호 189334
종목검색