답변완료
문의드립니다
안녕하세요?
아래수식에서 흰색의 삼각형이 엔벨롭 upline 또는 dnline 의 외부에 그려지는것만 (사진첨부) 표현되도록 조건문을 만들어주세요 감사합니다
1.
if CrossUp(close, zlema+volatility) Then
trend = 1;
if CrossDown(close, zlema-volatility) Then
trend = -1;
zlemaColor = iff(trend == 1 , Red, Green);
//plot1(zlema, "Zero Lag Basis",zlemaColor);
if trend == -1 Then
// plot2(zlema+volatility ,"Deviation Band",Green);
//Else
// plot2(zlema-volatility , "Deviation Band",Red);
if trend == -1 and trend[1] != -1 Then
//PlaySound("C:₩eBestYesTrader₩data₩workgroup₩매도.wav");
{
tx = Text_New(sDate,sTime,zlema+volatility,"▼");
Text_SetColor(tx,White);
Text_SetStyle(tx,2,1);
Text_SetSize(tx,38);#크기
}
if trend == 1 and trend[1] != 1 Then
//PlaySound("C:₩eBestYesTrader₩data₩workgroup₩매수.wav");
tx = Text_New(sDate,sTime,zlema-volatility ,"▲");
Text_SetColor(tx,White);
Text_SetStyle(tx,2,0);
Text_SetSize(tx,38);#크기
2.
Input : Period(20), Percent(2);
var : center(0),UPline(0),DNline(0),T(0);
center = ma(C, Period);
UPline = EnvelopeUp(Period, Percent);
Dnline = EnvelopeDown(Period, Percent);
2025-03-20
466
글번호 189363
지표
답변완료
질문드리겠습니다
수고가 많으십니다
종목 검색 관련 질문을 부탁드립니다
질문1)
맨 아래 첨부된 식에서요
if Bdate != Bdate[1] Then
Condition1 = False;
if condition1==False and (countif(crossup(h,cc[0]),200)>=1) Then
{
condition1=true;
find(1)
}
이부분에 대해서 질문인데요
조건검색은 오늘 현재봉을 기준으로 검색을하는건데 ,
만약 가장최근봉 (오늘 현재봉)이 조건만족봉에 해당되지 않을때를 생각해서
가장 최근의 조건만족봉을 기준으로 (만약 분봉에서 가장최근봉 기준 10봉전이 조건만족봉이라면 10봉전부터 시작을 해서 count. 10봉전의 봉이 h[0]) 200봉 내에서의 (h[0],h[1],h[2]...h[199] 이런식으로 크로스업 확인) countif 조건을 찾아준다는 의미가 맞나요?
아니면 오늘현재봉부터 시작해서 200봉 내에서 조건에 맞는 신호를 찾아준다는 건가요??
예전에 만든 수식인데 좀 헷갈려서요,,,어떤 의미가 되는건지 간단한 설명을 부탁드리겠습니다
질문2)
질문1과 연계해서,,,아래 식에서
(countif(crossup(h,cc[0]),200)>=1) or (countif(crossup(h,cc[1]),200)>=1) or (countif(crossup(h,cc[3]),200)>=1) ....이런식으로 h 이 cc[0], cc[1] ... 을 한번이상 크로스업 할때마다 검출을 하려고 하는데요,,지난 cc값들을 계속 비교를 하려고 합니다
예를들어 cc[20] 까지 비교하면 식이 길어지는데요, for 으로 간략하게 작성할 수 있을까요
감사합니다
var : cnt(0), sum1(0), sumi1(0),tt(0),hh(0),ll(0),tl(0),tl1(0);
var: sum2(0),sumi2(0),sumaa(0);
var : t(0),StartBarIndex(0),dd(0),d1(0),d2(0);
Array : ii[50](0),aa[50](0),bb[50](0),cc[50](0),vv[150](0),ttl[10](0);
if Bdate != Bdate[1] Then
DD = DD+1;
#H>vi(1)*0.95 h>l*1.07
if h>l*1.07 Then
{
d1 = dd;
d2 = d1[1];
#if d1 >= d2+1 Then
#if d2 == 0 or (d2 > 0 and d1 >= d2+3) Then
if d2 == 0 or (d2 > 0 and d1 >= d2+3) Then
{
var1 = Index;
Var2 = var1[1];
Var3= Var2[1];
sum1=0;
sumi1=0;
tl=TL_NEW(sDatE,sTimE,100,sDatE,sTimE,999999);
TL_SetSize(tl,0);
TL_SetColor(tl,Gray);
For cnt = 1 to (var1-Var2)
{
sum1=sum1+h[cnt];
sumi1=sumi1+1;
}
value1=sum1/sumi1;
For cnt = 49 DownTo 1
{
aa[cnt] = aa[cnt-1];
}
aa[0] = value1;
Var20=Money/100000000;
if Var20>30 Then
{
For cnt = 49 DownTo 1
{
cc[cnt]= cc[cnt-1];
}
cc[0]=value1*0.9;
Plot11(cc[0],"hma",DarkRed,Def,1);
}
}
}
Plot13(value1,"평균",LightGreen,Def,1);
if Bdate != Bdate[1] Then
Condition1 = False;
if condition1==False and (countif(crossup(h,cc[0]),200)>=1) Then
{
condition1=true;
find(1)
}
2025-03-20
406
글번호 189360
종목검색
답변완료
수식 수정 부탁드립니다.
안녕하세요.
수식오류 수정 부탁드립니다.
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
354
글번호 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
320
글번호 189335
시스템