커뮤니티
안녕하세요?
2018-12-20 21:13:52
362
글번호 124647
60540 추가 질문입니다.
xabcd 일치하는 파동만 출력되고
꼭지점에 xabcd도 테스트로 출력 되도록 부탁드립니다.
Input:length(10);
Var:TL1(0),TL2(0),TL2_exist(0),color(0),T(0),
종가사용여부(0), // 종가로 계산하려면 1로 설정한다.
TL_NewBit(0), // 1:NewLine 2:SetEndLine
slope(0),mid_idx(0),mid_val(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit);
// HiLoLineZigZag는 사용자함수입니다. 링크에서 내려받으세요..
If Value1 == 1 Then { // 고점
T = 1;
If TL_NewBit == 1 Then { // 신규
If 고[2,1] < 고[1,1] Then { // 신규 고점이 이전 고점을 상향 돌파
// y = 기울기 * x + 절편
// x = (y - 절편) / 기울기
// y = 고[2,1]
// 절편 = 저[1,1]
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); // 추세선의 기울기
mid_idx = Floor((고[2,1] - 저[1,1]) / slope); // 고[2,1]과 만나는 지점
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx); // 추세선의 중간지점 x좌표
TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2]; // 이전 색깔을 따라감
TL_SetColor(TL1,color[Var2]);
color = RED; // 상향 돌파했으므로 빨간색으로 전환
TL_SetColor(TL2,color);
TL2_exist = 1; // 추세선 2개를 연결해서 그린 것이므로 추세선이 2개임을 저장
} Else {
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2); // 추세선이 2개면 두번째 추세선도 삭제
If 고[2,1] < 고[1,1] Then {
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]);
mid_idx = Floor((고[2,1] - 저[1,1]) / slope);
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx);
TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2];
TL_SetColor(TL1,color[Var2]);
color = RED;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
} Else If Value1 == -1 Then { // 저점
T = -1;
If TL_NewBit == 1 Then { // 신규
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2);
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
}
TL_SetSize(TL1,2);
TL_SetSize(TL2,2);
var : CC(0),BB(0),AA(0),XX(0);
if T == -1 then
{
CC = 고[1,1];
BB = 저[2,1];
AA = 고[2,1];
XX = 저[3,1];
if BB <= AA-(AA-XX)*0.618 and BB >= AA-(AA-XX)*0.786 and
CC >= BB+(AA-BB)*0.618 and BB <= BB+(AA-BB)*0.786 and
CC < AA and
CrossDown(C,AA-(AA-XX)*0.786) Then
buy();
}
if MarketPosition == 1 then
{
ExitLong("bl",AtStop,XX[BarsSinceEntry]-PriceScale*1);
ExitLong("bp",AtLimit,저[1,1]+(AA[BarsSinceEntry]-저[1,1])*0.618);
}
if T == 1 then
{
CC = 저[1,1];
BB = 고[2,1];
AA = 저[2,1];
XX = 고[3,1];
if BB >= AA+(XX-AA)*0.618 and BB <= AA+(XX-AA)*0.786 and
CC <= BB-(BB-AA)*0.618 and BB >= BB-(BB-AA)*0.786 and
CC > AA and
CrossUp(C,AA+(XX-AA)*0.786) Then
Sell();
}
if MarketPosition == -1 then
{
ExitShort("sl",AtStop,XX[BarsSinceEntry]+PriceScale*1);
ExitShort("sp",AtLimit,저[1,1]-(저[1,1]-AA[BarsSinceEntry])*0.618);
}
- 1. 888-1.PNG (0.03 MB)
답변 1
예스스탁 예스스탁 답변
2018-12-21 10:16:17
안녕하세요
예스스탁입니다.
Input:length(10);
Var:TL1(0),TL2(0),TL2_exist(0),color(0),T(0),
종가사용여부(0), // 종가로 계산하려면 1로 설정한다.
TL_NewBit(0), // 1:NewLine 2:SetEndLine
slope(0),mid_idx(0),mid_val(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit);
// HiLoLineZigZag는 사용자함수입니다. 링크에서 내려받으세요..
If Value1 == 1 Then { // 고점
T = 1;
If TL_NewBit == 1 Then { // 신규
If 고[2,1] < 고[1,1] Then { // 신규 고점이 이전 고점을 상향 돌파
// y = 기울기 * x + 절편
// x = (y - 절편) / 기울기
// y = 고[2,1]
// 절편 = 저[1,1]
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); // 추세선의 기울기
mid_idx = Floor((고[2,1] - 저[1,1]) / slope); // 고[2,1]과 만나는 지점
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx); // 추세선의 중간지점 x좌표
//TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
//TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2]; // 이전 색깔을 따라감
TL_SetColor(TL1,color[Var2]);
color = RED; // 상향 돌파했으므로 빨간색으로 전환
TL_SetColor(TL2,color);
TL2_exist = 1; // 추세선 2개를 연결해서 그린 것이므로 추세선이 2개임을 저장
} Else {
//TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
//TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2); // 추세선이 2개면 두번째 추세선도 삭제
If 고[2,1] < 고[1,1] Then {
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]);
mid_idx = Floor((고[2,1] - 저[1,1]) / slope);
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx);
//TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
//TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2];
TL_SetColor(TL1,color[Var2]);
color = RED;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
//TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
} Else If Value1 == -1 Then { // 저점
T = -1;
If TL_NewBit == 1 Then { // 신규
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
//TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
//TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
//TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
//TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2);
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
//TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
//TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
//TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
}
TL_SetSize(TL1,2);
TL_SetSize(TL2,2);
var : CC(0),BB(0),AA(0),XX(0);
var : TL11(0),TL12(0),TL13(0),TL14(0),TL15(0);
var : Tx11(0),Tx12(0),Tx13(0),Tx14(0),tx15(0);
if T == -1 then
{
if T[1] != -1 Then
{
Condition1 = false;
}
CC = 고[1,1];
BB = 저[2,1];
AA = 고[2,1];
XX = 저[3,1];
if BB <= AA-(AA-XX)*0.618 and BB >= AA-(AA-XX)*0.786 and
CC >= BB+(AA-BB)*0.618 and BB <= BB+(AA-BB)*0.786 and
CC < AA and
CrossDown(C,AA-(AA-XX)*0.786) and MarketPosition <= 0 Then
{
buy();
Condition1 = true;
TL11 = TL_New(저[3,3],저[3,4],저[3,1],고[2,3],고[2,4],고[2,1]);
TL12 = TL_New(고[2,3],고[2,4],고[2,1],저[2,3],저[2,4],저[2,1]);
TL13 = TL_New(저[2,3],저[2,4],저[2,1],고[1,3],고[1,4],고[1,1]);
TL14 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL11,red);
TL_SetColor(TL12,blue);
TL_SetColor(TL13,red);
TL_SetColor(TL14,blue);
TL_SetSize(TL11,2);
TL_SetSize(TL12,2);
TL_SetSize(TL13,2);
TL_SetSize(TL14,2);
tx11 = Text_New(저[3,3],저[3,4],저[3,1],"X");
tx12 = Text_New(고[2,3],고[2,4],고[2,1],"A");
tx13 = Text_New(저[2,3],저[2,4],저[2,1],"B");
tx14 = Text_New(고[1,3],고[1,4],고[1,1],"C");
tx15 = Text_New(저[1,3],저[1,4],저[1,1],"D");
Text_SetStyle(tx11,2,0);
Text_SetStyle(tx12,2,1);
Text_SetStyle(tx13,2,0);
Text_SetStyle(tx14,2,1);
Text_SetStyle(tx15,2,0);
}
if Condition1 == true Then
{
TL_SetEnd(TL14,저[1,3],저[1,4],저[1,1]);
Text_SetLocation(Tx15,저[1,3],저[1,4],저[1,1]);
}
}
if MarketPosition == 1 then
{
ExitLong("bl",AtStop,XX[BarsSinceEntry]-PriceScale*1);
ExitLong("bp",AtLimit,저[1,1]+(AA[BarsSinceEntry]-저[1,1])*0.618);
}
if T == 1 then
{
if T[1] != 1 Then
{
Condition2 = false;
}
CC = 저[1,1];
BB = 고[2,1];
AA = 저[2,1];
XX = 고[3,1];
if BB >= AA+(XX-AA)*0.618 and BB <= AA+(XX-AA)*0.786 and
CC <= BB-(BB-AA)*0.618 and BB >= BB-(BB-AA)*0.786 and
CC > AA and
CrossUp(C,AA+(XX-AA)*0.786) and MarketPosition >= 0 Then
{
Condition2 = true;
Sell();
TL11 = TL_New(고[3,3],고[3,4],고[3,1],저[2,3],저[2,4],저[2,1]);
TL12 = TL_New(저[2,3],저[2,4],저[2,1],고[2,3],고[2,4],고[2,1]);
TL13 = TL_New(고[2,3],고[2,4],고[2,1],저[1,3],저[1,4],저[1,1]);
TL14 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL11,blue);
TL_SetColor(TL12,red);
TL_SetColor(TL13,blue);
TL_SetColor(TL14,red);
TL_SetSize(TL11,2);
TL_SetSize(TL12,2);
TL_SetSize(TL13,2);
TL_SetSize(TL14,2);
tx11 = Text_New(고[3,3],고[3,4],고[3,1],"X");
tx12 = Text_New(저[2,3],저[2,4],저[2,1],"A");
tx13 = Text_New(고[2,3],고[2,4],고[2,1],"B");
tx14 = Text_New(저[1,3],저[1,4],저[1,1],"C");
tx15 = Text_New(고[1,3],고[1,4],고[1,1],"D");
Text_SetStyle(tx11,2,1);
Text_SetStyle(tx12,2,0);
Text_SetStyle(tx13,2,1);
Text_SetStyle(tx14,2,0);
Text_SetStyle(tx15,2,1);
}
if Condition2 == true Then
{
TL_SetEnd(TL14,고[1,3],고[1,4],고[1,1]);
Text_SetLocation(Tx15,고[1,3],고[1,4],고[1,1]);
}
}
if MarketPosition == -1 then
{
ExitShort("sl",AtStop,XX[BarsSinceEntry]+PriceScale*1);
ExitShort("sp",AtLimit,저[1,1]-(저[1,1]-AA[BarsSinceEntry])*0.618);
}
즐거운 하루되세요
> 상중하 님이 쓴 글입니다.
> 제목 : 안녕하세요?
> 60540 추가 질문입니다.
xabcd 일치하는 파동만 출력되고
꼭지점에 xabcd도 테스트로 출력 되도록 부탁드립니다.
Input:length(10);
Var:TL1(0),TL2(0),TL2_exist(0),color(0),T(0),
종가사용여부(0), // 종가로 계산하려면 1로 설정한다.
TL_NewBit(0), // 1:NewLine 2:SetEndLine
slope(0),mid_idx(0),mid_val(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit);
// HiLoLineZigZag는 사용자함수입니다. 링크에서 내려받으세요..
If Value1 == 1 Then { // 고점
T = 1;
If TL_NewBit == 1 Then { // 신규
If 고[2,1] < 고[1,1] Then { // 신규 고점이 이전 고점을 상향 돌파
// y = 기울기 * x + 절편
// x = (y - 절편) / 기울기
// y = 고[2,1]
// 절편 = 저[1,1]
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); // 추세선의 기울기
mid_idx = Floor((고[2,1] - 저[1,1]) / slope); // 고[2,1]과 만나는 지점
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx); // 추세선의 중간지점 x좌표
TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2]; // 이전 색깔을 따라감
TL_SetColor(TL1,color[Var2]);
color = RED; // 상향 돌파했으므로 빨간색으로 전환
TL_SetColor(TL2,color);
TL2_exist = 1; // 추세선 2개를 연결해서 그린 것이므로 추세선이 2개임을 저장
} Else {
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2); // 추세선이 2개면 두번째 추세선도 삭제
If 고[2,1] < 고[1,1] Then {
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]);
mid_idx = Floor((고[2,1] - 저[1,1]) / slope);
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx);
TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2];
TL_SetColor(TL1,color[Var2]);
color = RED;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
} Else If Value1 == -1 Then { // 저점
T = -1;
If TL_NewBit == 1 Then { // 신규
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2);
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
}
TL_SetSize(TL1,2);
TL_SetSize(TL2,2);
var : CC(0),BB(0),AA(0),XX(0);
if T == -1 then
{
CC = 고[1,1];
BB = 저[2,1];
AA = 고[2,1];
XX = 저[3,1];
if BB <= AA-(AA-XX)*0.618 and BB >= AA-(AA-XX)*0.786 and
CC >= BB+(AA-BB)*0.618 and BB <= BB+(AA-BB)*0.786 and
CC < AA and
CrossDown(C,AA-(AA-XX)*0.786) Then
buy();
}
if MarketPosition == 1 then
{
ExitLong("bl",AtStop,XX[BarsSinceEntry]-PriceScale*1);
ExitLong("bp",AtLimit,저[1,1]+(AA[BarsSinceEntry]-저[1,1])*0.618);
}
if T == 1 then
{
CC = 저[1,1];
BB = 고[2,1];
AA = 저[2,1];
XX = 고[3,1];
if BB >= AA+(XX-AA)*0.618 and BB <= AA+(XX-AA)*0.786 and
CC <= BB-(BB-AA)*0.618 and BB >= BB-(BB-AA)*0.786 and
CC > AA and
CrossUp(C,AA+(XX-AA)*0.786) Then
Sell();
}
if MarketPosition == -1 then
{
ExitShort("sl",AtStop,XX[BarsSinceEntry]+PriceScale*1);
ExitShort("sp",AtLimit,저[1,1]-(저[1,1]-AA[BarsSinceEntry])*0.618);
}