#공통, 전략
[설명]
1‑2‑3 Reversal 전략은 장기간 방향성 트렌드가 끝난 뒤에 나타나는
추세 반전을 포착하기 위해 고안되었습니다.
트렌드가 일정 방향으로 장기 진행된 뒤, 되돌림이나 방향 전환이 있을 때
“1-2-3”이라는 세 개의 포인트로 패턴을 인식하게 됩니다.
단기 차트는 속임수가 많기 때문에 가능한 큰 주기 차트에 사용이 권장됩니다.
고점과 저점을 규정하는 것과
피보나치 되돌림 도구(Fibonacci 38.2% 또는 50%)를 활용하는 것이 핵심입니다.
매도
step1 : 직전고점보다 높은 고점발생
step2 : 이후 하락해 저점 형성
step3 : 그 후 1-2라인의 38.2% 또는 50% 수준으로 되돌림 된 중간 고점 발생
이후 step2 지지라인 붕귀 시 매도
매수
step1 : 직전저점보다 낮은 저점발생
step2 : 이후 상승해 고점 형성
step3 : 그 후 1-2라인의 38.2% 또는 50% 수준으로 되돌림 된 중간 저점 발생
이후 step2 저항라인 돌파 시 매수
input : Length(20);
Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열
Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열
var : cnt(0),Hprice(0),Lprice(0);
var : UpTrend(false),DownTrend(False),Trend(0),BuyAble(False),SellAble(False);
var : ZigZagTL(0);
HPrice = H;
LPrice = L;
if Index == 0 Then
{
//초기 최고값
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//초기 최저값
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
}
Else
{
//ChangeMethod에 따른 추세전환 조건
//HPrice가 최근 n봉 최고가 갱신
UpTrend = HPrice >= Highest(HPrice,Length)[1];
//LPrice가 최근 n봉 최저가 갱신
DownTrend = LPrice <= Lowest(LPrice,Length)[1];
//상승추세 전환
if trend <= 0 and UpTrend == true Then
{
//추세구분 1
trend = 1;
//과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
HD[cnt] = HD[cnt-1];
HT[cnt] = HT[cnt-1];
HV[cnt] = HV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
BuyAble = true;
SellAble = False;
}
Else if trend >= 0 and DownTrend Then//하락추세 전환
{
//추세구분은 -1
trend = -1;
//과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
LD[cnt] = LD[cnt-1];
LT[cnt] = LT[cnt-1];
LV[cnt] = LV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
SellAble = true;
BuyAble = False;
}
Else
{
//상승구간
if trend == 1 Then
{
//고점이 갱신되면
if HPrice > HV[0] Then
{
//갱신된 봉의 날짜/시간/가격으로 변경
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
}
}
//하락구간
if trend == -1 Then
{
//저점이 갱신되면
if LPrice < LV[0] Then
{
//갱신된 봉의 날짜/시간/가격으로 변경
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
}
}
}
}
var : TL1(0),TL2(0),TL3(0);
var : TX1(0),TX2(0),TX3(0);
if BuyAble == true Then
{
if LV[2] > 0 and //최소한 최근 3개의 저점이 있고
LV[1] < LV[2] and #전저점이 전전저점보다 크고
LV[0] <= HV[1]-(HV[1]-LV[1])*0.382 and //최근저점은 전고점과 전저점의 38.2% 이하로 하락했고
C > HV[1] Then //종가가 전고점을 돌파하면 매수
{
Buy("B");
BuyAble = False;
TL1 = TL_New(LD[0],LT[0],LV[0],sDate,sTime,C);
TL2 = TL_New(HD[1],HT[1],HV[1],LD[0],LT[0],LV[0]);
TL3 = TL_New(LD[1],LT[1],LV[1],HD[1],HT[1],HV[1]);
TL_SetColor(TL1,Red);
TL_SetColor(TL2,Blue);
TL_SetColor(TL3,Red);
TX1 = Text_New(LD[1],LT[1],LV[1],"1");
TX2 = Text_New(HD[1],HT[1],HV[1],"2");
TX3 = Text_New(LD[0],LT[0],LV[0],"3");
text_SetColor(TX1,Red);
text_SetColor(TX2,Blue);
text_SetColor(TX3,Red);
Text_SetStyle(TX1,2,0);
Text_SetStyle(TX2,2,1);
Text_SetStyle(TX3,2,0);
Text_SetBold(TX1,1);
Text_SetBold(TX2,1);
Text_SetBold(TX3,1);
}
}
if SellAble == true Then
{
if HV[2] > 0 and //최소한 최근 3개의 고점이 있고
HV[1] > HV[2] and #전저점이 전전저점보다 크고
HV[0] >= LV[1]+(HV[1]-LV[1])*0.382 and //최근저점은 전고점과 전저점의 38.2% 이상으로 상승했고
C < LV[1] Then //종가가 전저점을 이탈하면 매도
{
Sell("S");
SellAble = False;
TL1 = TL_New(HD[0],HT[0],HV[0],sDate,sTime,C);
TL2 = TL_New(LD[1],LT[1],LV[1],HD[0],HT[0],HV[0]);
TL3 = TL_New(HD[1],HT[1],HV[1],LD[1],LT[1],LV[1]);
TL_SetColor(TL1,Red);
TL_SetColor(TL2,Blue);
TL_SetColor(TL3,Red);
TX1 = Text_New(HD[1],HT[1],HV[1],"1");
TX2 = Text_New(LD[1],LT[1],LV[1],"2");
TX3 = Text_New(HD[0],HT[0],HV[0],"3");
text_SetColor(TX1,Blue);
text_SetColor(TX2,Red);
text_SetColor(TX3,Blue);
Text_SetStyle(TX1,2,1);
Text_SetStyle(TX2,2,0);
Text_SetStyle(TX3,2,1);
Text_SetBold(TX1,1);
Text_SetBold(TX2,1);
Text_SetBold(TX3,1);
}
}
JavaScript
복사
