답변완료
수식 부탁드립니다
수고하십니다.
아래 지표에서
첨부 그림처럼 변곡점 상하 +/- 0.5 위치에 점표시를 하고 싶습니다.
수고하세요..
##########
Input:length(30);
Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),sBar(0),TL1(0),
고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0),
저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0);
Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0),
저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0),
고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0),
고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0),
저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0),
저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0);
var : t(0),ii(0);
#==========================================#
Condition1 = Highest(C,length) == C and 최종고가 <> C;
Condition2 = Lowest (C,length) == C and 최종저가 <> C;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종변곡점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리
Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = C; // 신규고점을 체크하기 위해 저장
If 최종변곡점 == "저점" Then
{
고9 = 고8; 고9IDX = 고8IDX;
고8 = 고7; 고8IDX = 고7IDX;
고7 = 고6; 고7IDX = 고6IDX;
고6 = 고5; 고6IDX = 고5IDX;
고5 = 고4; 고5IDX = 고4IDX;
고4 = 고3; 고4IDX = 고3IDX;
고3 = 고2; 고3IDX = 고2IDX;
고2 = 고1; 고2IDX = 고1IDX;
고1 = C; 고1IDX = Index;
sBar = Index - 저1IDX; // 추세선 시작점의 위치, n봉전으로 표시
TL1 = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1);
TL_SetSize(TL1,1);
TL_SetColor(TL1,ReD);
}
Else If 고1 < C Then // 1번 고점보다 높은 고가 출현
{
고1 = C; 고1IDX = Index;
TL_SetEnd(TL1,sDate[0],sTime[0],고1);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
}
/* 고점추세선 */
If 고2IDX[1] <> 고2IDX Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
{
고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0;
If 고2 < 고3 Then
{
고추세기울기 = (고2 - 고3)/(고2IDX - 고3IDX);
고추세시작 = 고3;
고추세시작IDX = 고3IDX;
}
Else If 고2 < 고4 Then
{
고추세기울기 = (고2 - 고4)/(고2IDX - 고4IDX);
고추세시작 = 고4;
고추세시작IDX = 고4IDX;
}
Else If 고2 < 고5 Then
{
고추세기울기 = (고2 - 고5)/(고2IDX - 고5IDX);
고추세시작 = 고5;
고추세시작IDX = 고5IDX;
}
Else If 고2 < 고6 Then
{
고추세기울기 = (고2 - 고6)/(고2IDX - 고6IDX);
고추세시작 = 고6;
고추세시작IDX = 고6IDX;
}
Else If 고2 < 고7 Then
{
고추세기울기 = (고2 - 고7)/(고2IDX - 고7IDX);
고추세시작 = 고7;
고추세시작IDX = 고7IDX;
}
Else If 고2 < 고8 Then
{
고추세기울기 = (고2 - 고8)/(고2IDX - 고8IDX);
고추세시작 = 고8;
고추세시작IDX = 고8IDX;
}
Else If 고2 < 고9 Then
{
고추세기울기 = (고2 - 고9)/(고2IDX - 고9IDX);
고추세시작 = 고9;
고추세시작IDX = 고9IDX;
}
고추세봉개수 = Index - 고추세시작IDX;
고추세최종 = 고추세기울기 * 고추세봉개수 + 고추세시작;
}
Else If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
}
If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
}
최종변곡점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = C;
If 최종변곡점 == "고점" then
{
저9 = 저8; 저9IDX = 저8IDX;
저8 = 저7; 저8IDX = 저7IDX;
저7 = 저6; 저7IDX = 저6IDX;
저6 = 저5; 저6IDX = 저5IDX;
저5 = 저4; 저5IDX = 저4IDX;
저4 = 저3; 저4IDX = 저3IDX;
저3 = 저2; 저3IDX = 저2IDX;
저2 = 저1; 저2IDX = 저1IDX;
저1 = C; 저1IDX = Index;
sBar = Index - 고1IDX;
TL1 = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1);
TL_SetSize(TL1,1);
TL_SetColor(TL1,BluE);
}
Else If 저1 > C then
{
저1 = C; 저1IDX = Index;
TL_SetEnd(TL1,sDate[0],sTime[0],저1);
}
/* 저점추세선 */
If 저2IDX[1] <> 저2IDX Then
{
저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0;
If 저2 > 저3 and 저3 > 0 Then
{
저추세기울기 = (저2 - 저3)/(저2IDX - 저3IDX);
저추세시작 = 저3;
저추세시작IDX = 저3IDX;
}
Else If 저2 > 저4 and 저4 > 0 Then
{
저추세기울기 = (저2 - 저4)/(저2IDX - 저4IDX);
저추세시작 = 저4;
저추세시작IDX = 저4IDX;
}
Else If 저2 > 저5 and 저5 > 0 Then
{
저추세기울기 = (저2 - 저5)/(저2IDX - 저5IDX);
저추세시작 = 저5;
저추세시작IDX = 저5IDX;
}
Else If 저2 > 저6 and 저6 > 0 Then
{
저추세기울기 = (저2 - 저6)/(저2IDX - 저6IDX);
저추세시작 = 저6;
저추세시작IDX = 저6IDX;
}
Else If 저2 > 저7 and 저7 > 0 Then
{
저추세기울기 = (저2 - 저7)/(저2IDX - 저7IDX);
저추세시작 = 저7;
저추세시작IDX = 저7IDX;
}
Else If 저2 > 저8 and 저8 > 0 Then
{
저추세기울기 = (저2 - 저8)/(저2IDX - 저8IDX);
저추세시작 = 저8;
저추세시작IDX = 저8IDX;
}
Else If 저2 > 저9 and 저9 > 0 Then
{
저추세기울기 = (저2 - 저9)/(저2IDX - 저9IDX);
저추세시작 = 저9;
저추세시작IDX = 저9IDX;
}
저추세봉개수 = Index - 저추세시작IDX;
저추세최종 = 저추세기울기 * 저추세봉개수 + 저추세시작;
}
Else If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
}
If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
}
최종변곡점 = "저점";
}
2022-07-10
1685
글번호 160611
지표
답변완료
super trend 지표
갬블러님의 super trend지표를 보고 매수/매도 시스템식으로 하고 싶은데 이렇게하면 되는지 검토 부탁드립니다.
[지표식]
input : factor(3), AtrPeriod(10);
var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0);
var : prevSuperTrend(0), superTrend(C), direction(0),alpha(0),source(0);
if CurrentBar > 1 Then {
src = (H+L)/2;
// ATR계산(ATR 계산시 지수가중이동평균(rma)이용)
alpha = 1 / AtrPeriod ;
source = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV = alpha * source + (1 - alpha) * ATrV[1];
upperBand = src + factor * AtrV;
lowerBand = src - factor * AtrV;
prevLowerBand = lowerBand[1];
prevUpperBand = upperBand[1];
if lowerBand > prevLowerBand or close[1] < prevLowerBand Then
lowerBand = lowerBand;
Else
lowerBand = prevLowerBand;
if upperBand < prevUpperBand or close[1] > prevUpperBand Then
upperBand = upperBand;
Else
upperBand = prevUpperBand;
if C > UpperBand Then
direction = 1;
if C < LowerBand Then
direction = -1;
if direction == 1 Then
supertrend = lowerband;
Else
supertrend = upperband;
}
if C > superTrend Then {
Plot1(superTrend,"UpTrend", Pink, 0, 5);
NoPlot(2);
}
Else {
Plot2(superTrend,"DnTrend", green, 0, 5);
NoPlot(1);
}
if direction == 1 and direction[1] == -1 Then
plot3(superTrend,"BuyStart",Red,0,15);
if direction == -1 and direction[1] == 1 Then
plot4(superTrend,"SellStart",Blue,0,15);
[매수매도 시스템식]
input : factor(3), AtrPeriod(10);
var : src(0), AtrV(0),upperBand(0),lowerBand(0), prevLowerBand(0), prevUpperBand(0);
var : prevSuperTrend(0), superTrend(C), direction(0),alpha(0),source(0);
if CurrentBar > 1 Then {
src = (H+L)/2;
// ATR계산(ATR 계산시 지수가중이동평균(rma)이용)
alpha = 1 / AtrPeriod ;
source = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV = alpha * source + (1 - alpha) * ATrV[1];
upperBand = src + factor * AtrV;
lowerBand = src - factor * AtrV;
prevLowerBand = lowerBand[1];
prevUpperBand = upperBand[1];
if lowerBand > prevLowerBand or close[1] < prevLowerBand Then
lowerBand = lowerBand;
Else
lowerBand = prevLowerBand;
if upperBand < prevUpperBand or close[1] > prevUpperBand Then
upperBand = upperBand;
Else
upperBand = prevUpperBand;
if C > UpperBand Then
direction = 1;
if C < LowerBand Then
direction = -1;
if direction == 1 Then
supertrend = lowerband;
Else
supertrend = upperband;
}
if direction == 1 and direction[1] == -1 Then
Buy();
if direction == -1 and direction[1] == 1 Then
Sell();
2022-07-10
1873
글번호 160609
시스템
답변완료
문의 드립니다.~~~~
전에 올려주신 답변인데 이해가 부족하여 공부를 위해
자세한 주석 부탁드립니다.
그리고 고점 저점에 대한 판단은
n틱이상 조정 받은 전고점과 전저점을 고점과 저점의 판단 기준으로 삼고 싶습니다.
> 예스요 님이 쓴 글입니다.
> 제목 : 문의 드립니다.~~~~
> 항상 감사합니다.
-전저점 대비 a틱(변수)이상 상승 후 b틱(변수)이상
하락시 고점처리 ( 챠트에 저점과 고점을 차이 틱수를 고점에 출력하고
저점과 고점을 연결하는 추세선(빨강)그림 )
-전고점 대비 b틱(변수)이상 하락 후 a틱(변수)이상
상승시 저점 처리( 챠트에 고점과 저점의 차이 차이 틱수를 저점에 출력하고
고점과 저점을 연결하는 추세선(파랑)그림)
-매수진입: 저점 형성후 전고점을 돌파하여 전고점대비 c틱(변수) 상승지점에서
매수 진입.
-매도진입: 고점 형성후 전저점을 돌파하여 전저점대비 c틱(변수) 하락지점에서
매도 진입.
- 장중 내내 위 진입을 계속 반복하는 수식 부탁드립니다.
안녕하세요
예스스탁입니다.
올리신 내용에 기준이 되는 고점과 저점 판단에 대한 내용이 없습니다.
게시판에 많이 사용되는 지그재그 식을 이용해 작성해 드립니다.
input:length(5),a틱(10),b틱(10),c틱(5);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),Text1(0),process(0),T(0);
Array:HH[10,2](0),LL[10,2](0);
process = 0;
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
If LL[1,1] > L Then process = -1;
If HH[1,1] < H Then process = 1;
}
Else If Highest(H,length) == H and lastHiVal <> H Then process = 1;
Else If Lowest(L,length) == L and lastLoVal <> L Then process = -1;
If process == 1 Then
{
T = 1;
lastHiVal = H;
If HH[1,2] < LL[1,2] Then
{
For j = 10 DownTo 2
{
HH[j,1] = HH[j-1,1];
HH[j,2] = HH[j-1,2];
}
}
If HH[1,2] < LL[1,2] or HH[1,1] < H Then
{
HH[1,1] = H;
HH[1,2] = Index;
sBar = Index - LL[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
if LL[1,1] > 0 Then
{
TL1 = TL_New(sDate[sBar],sTime[sBar],LL[1,1],sDate[eBar],sTime[eBar],HH[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 1);
}
Else
{
Text_Delete(text1);
Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,2));
Text_SetStyle(Text1, 2, 1);
}
Text_SetStyle(Text1, 2, 1);
}
if MarketPosition <= 0 and
HH[2,1] >= LL[2,1]+PriceScale*a틱 and
LL[1,1] <= HH[2,1]-PriceScale*b틱 Then
Buy("b",AtStop,HH[2,1]+PriceScale*c틱);
}
If process == -1 Then
{
T = -1;
lastLoVal = L;
If LL[1,2] < HH[1,2] Then
{
For j = 10 DownTo 2
{
LL[j,1] = LL[j-1,1];
LL[j,2] = LL[j-1,2];
}
}
If LL[1,2] < HH[1,2] or LL[1,1] > L Then
{
LL[1,1] = L;
LL[1,2] = Index;
sBar = Index - HH[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
if HH[1,1] > 0 Then
{
TL1 = TL_New(sDate[sBar],sTime[sBar],HH[1,1],sDate[eBar],sTime[eBar],LL[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 0);
}
Else
{
Text_Delete(text1);
Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 0);
}
}
if MarketPosition >= 0 and
LL[2,1] <= HH[2,1]-PriceScale*a틱 and
HH[1,1] >= LL[2,1]+PriceScale*b틱 Then
Sell("s",AtStop,LL[2,1]-PriceScale*c틱);
}
2022-07-10
1873
글번호 160607
시스템