커뮤니티
수식 문의
2012-07-31 13:18:17
338
글번호 53375
아래는 기본 지표에 있는 '세븐바이너리지표'를 갭보정하여
매수,매도가 나올 수 있도록 시스템 수식으로 만든 것입니다.
아래 수식을
data2(같은 종목의 타주기)의 매수 매도 조건으로 하고
매수 ::::
data1에서는
조건1 : 스토캐스틱슬로우 4-3-3이 침체권 20에서 탈출하는 순간.
또는
조건2 : 스토캐스틱슬로우 4-3-3이 %K선이 %D선을 골드 크로스 치는 순간.
조건3 : 단 침체권 안에서의 골드크로스와 기준선 n값 이상에서의 골드크로스는 인정하지 않음)
매수 하되
조건4 : data2의 신호가 매수일때에만 위의 매수신호가 유효한 것으로 처리
(조건 1,2가 발생한 이후에 조건4가 충족될 때는 신호를 발생시키지 않습니다.)
매수 청산 :::
주가가 종가상 n봉 전의 price channel n2값 하단을 깨고 내려가면 청산.
또는
data2가 매도 조건이 뜨면 청산.
매도 ::::
data1에서는
조건1 : 스토캐스틱슬로우 4-3-3이 과열권 80에서 탈출하는 순간.
또는
조건2 : 스토캐스틱슬로우 4-3-3이 %K선이 %D선을 데드 크로스 치는 순간.
조건3 : 단 과열권 안에서의 데드크로스와 기준선 n값 이하에서의 골드크로스는 인정하지 않음)
매도 하되
조건4 : data2의 신호가 매도일때에만 위의 매수신호가 유효한 것으로 처리
(조건 1,2가 발생한 이후에 조건4가 충족될 때는 신호를 발생시키지 않습니다.)
매도 청산 :
주가가 종가상 n봉 전의 price channel n2값 상단을 뚫고 올라가면 청산.
또는
data2가 매수 조건이 뜨면 청산.
================
위의 수식의 모든 조건값을 직접 수정할 수 있도록 해주시기 바랍니다.
질문 :
data2의 조건을 data1에 그대로 옮겨 와서 (마치 일봉의 이평을 분봉에 옮겨 오듯이)
data2를 안 깔고 위의 매수매도 시그널을 뿌려줄 수는 없을까요?
(data2는 3분. data1은 1분)
--------아래 --------------
Input: shortPeriod(13), longPeriod(26), Period(6), maPeriod(13), ROCPeriod(9), stoPeriod1(10),
stoPeriod2(6), CCIPeriod(9);
input: P1(13),P2(26),P3(6);
var: value(0),BW_SEVEN(0);
var : sumGap(0), gap(0), GO(0), GH(0), GL(0), GC(0);
if date!=date[1] then { // 날짜가 변경되는 봉에서
gap = Open-Close[1]; // 일간갭
sumGap = sumGap+gap; // 일간갭 누적
}
GO = O - sumGap; // 시가에서 갭누적값을 차감
GH = H - sumGap; // 고가에서 갭누적값을 차감
GL = L - sumGap; // 저가에서 갭누적값을 차감
GC = C - sumGap; // 종가에서 갭누적값을 차감
//문장1 : MACD가 MACD 시그널선 보다 큼
if ema(gC,shortPeriod)-ema(gC,longPeriod) >= ema(ema(gC,shortPeriod)-ema(gC,longPeriod),Period) then
value = 1;
else
value = -1;
//문장2 : 종가가 이동평균선보다 큼
if gC >= ma(gC, maPeriod) then
value = value + 1;
else
value = value - 1;
//문장3 : Price ROC가 0선보다 큼
if (gC - gC[ROCPeriod]) / gC[ROCPeriod] * 100 >= 0 then
value = value + 1;
else
value = value - 1;
//문장4 : StochasticsK선이 50선 보다 큼
if ema((gC-lowest(gL, stoPeriod1)) / (highest(gH, stoPeriod1) - lowest(gL, stoPeriod1)) * 100, stoPeriod2)>=50 then
value = value + 1;
else
value = value - 1;
Variables: Sum(0), CCIcount(0), MD(0), Avgvalue(0),CCIV(0);
If CCIPeriod > 0 Then Begin
Avgvalue = Ma(GH + gL + GC, CCIPeriod);
MD = 0;
For CCIcount = 0 To CCIPeriod - 1 Begin
MD = MD + Abs(GH[CCIcount] + gL[CCIcount] + GC[CCIcount] - Avgvalue);
End;
MD = MD / CCIPeriod;
If MD == 0 Then
CCIv = 0;
Else
CCIv = (GH + gL + GC - Avgvalue) / (0.015 * MD);
End
Else
CCIv = 0;
//CCI가 0선 보다 큼
if CCIv > 0 then
value = value + 1;
else
value = value - 1;
//CO가 0선 보다 큼
if ema(accum(((gC -gL)-(gH- gC))/ (gH-gL)*V), 3) - ema(accum(((gC -gL)-(gH- gC))/(gH-gL)*V), 10) >=0 then
value = value + 1;
else
value = value - 1;
input : AF(0.02),AFMAX(0.2);
Var : Direction(0), SAR_Value(Close), AF_Value(.02), HighValue(h), LowValue(l), EP(0),Sarv(0);
if EP != 0 Then
{
if Direction == 1 then
{
EP = HighValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gh > HighValue then
{
HighValue = gh;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if gl < SAR_Value then
{
Direction = -1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
LowValue = gl;
}
}
else
{
EP = LowValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gl < LowValue then
{
LowValue = gl;
AF_Value = AF_Value + Af;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if gh > SAR_Value then
{
Direction = 1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
HighValue = gh;
}
}
Sarv = SAR_Value;
}
else
{
if SAR_Value != 0 && EP == 0 then
{
if Direction == 1 then
{
EP = HighValue;
AF_Value = AF;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gh > HighValue then
{
HighValue = gh;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
else
{
EP = LowValue;
AF_Value = Af;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gl < LowValue then
{
LowValue = gl;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
Sarv = SAR_Value;
}
else
{
if Direction == 0 then
{
if gc > gc[1] then Direction = 1;
else
if gc < gc[1] then Direction = -1;
}
else
{
if Direction == 1 then
{
if gc < gc[1] then
{
Direction = -1;
SAR_Value = HighValue;
Sarv = SAR_Value;
}
}
if Direction == -1 then
{
if gc > gc[1] then
{
Direction = 1;
SAR_Value = LowValue;
Sarv = SAR_Value;
}
}
}
LowValue = min(gl, LowValue);
HighValue = max(gh, HighValue);
}
}
//문장7 : 종가가 파라볼릭보다 큼
if Sarv < gC then
value = value + 1;
else
value = value - 1;
BW_SEVEN = value;
var1 = ema(BW_SEVEN,P1)- ema(BW_SEVEN,P2);
var2 = ema(var1,P3);
var3 = var1-var2;
# 매수/매도청산
If CrossUp(value,1) Then
{
Buy();
}
# 매도/매수청산
If CrossDown(value,-1) Then
{
Sell();
}
답변 1
예스스탁 예스스탁 답변
2012-07-31 14:33:33
안녕하세요
예스스탁입니다.
해당식은 data2로 변경해 사용하셔야만 합니다.
data1로 만으로는 작성할 수 없습니다.
Input: shortPeriod(13), longPeriod(26), Period(6), maPeriod(13), ROCPeriod(9), stoPeriod1(10),
stoPeriod2(6), CCIPeriod(9),n(50),n1(1),n2(10);
input: P1(13),P2(26),P3(6);
var: value(0,data2),BW_SEVEN(0,data2);
var : Va1(0,data2),va2(0,data2),va3(0,data2),D1Stok(0,data1),D1stod(0,data1);
var : sumGap(0,data2), gap(0,data2), GO(0,data2), GH(0,data2), GL(0,data2), GC(0,data2);
VAR : TCHAN(0,data1), BCHAN(0,data1);
if data2(date!=date[1]) then {
gap = data2(Open-Close[1]);
sumGap = sumGap+gap;
}
GO = data2(O - sumGap);
GH = data2(H - sumGap);
GL = data2(L - sumGap);
GC = data2(C - sumGap);
//문장1 : MACD가 MACD 시그널선 보다 큼
if data2(ema(gC,shortPeriod)-ema(gC,longPeriod) >= ema(ema(gC,shortPeriod)-ema(gC,longPeriod),Period)) then
value = 1;
else
value = -1;
//문장2 : 종가가 이동평균선보다 큼
if data2(gC >= ma(gC, maPeriod)) then
value = value + 1;
else
value = value - 1;
//문장3 : Price ROC가 0선보다 큼
if data2((gC - gC[ROCPeriod]) / gC[ROCPeriod] * 100 >= 0) then
value = value + 1;
else
value = value - 1;
//문장4 : StochasticsK선이 50선 보다 큼
if data2(ema((gC-lowest(gL, stoPeriod1)) / (highest(gH, stoPeriod1) - lowest(gL, stoPeriod1)) * 100, stoPeriod2)>=50) then
value = value + 1;
else
value = value - 1;
Variables: Sum(0), CCIcount(0), MD(0), Avgvalue(0),CCIV(0);
If CCIPeriod > 0 Then Begin
Avgvalue = data2(Ma(GH + gL + GC, CCIPeriod));
MD = 0;
For CCIcount = 0 To CCIPeriod - 1 Begin
MD = MD + data2(Abs(GH[CCIcount] + gL[CCIcount] + GC[CCIcount] - Avgvalue));
End;
MD = data2(MD / CCIPeriod);
If MD == 0 Then
CCIv = 0;
Else
CCIv = data2((GH + gL + GC - Avgvalue) / (0.015 * MD));
End
Else
CCIv = 0;
//CCI가 0선 보다 큼
if CCIv > 0 then
value = value + 1;
else
value = value - 1;
//CO가 0선 보다 큼
if data2(ema(accum(((gC -gL)-(gH- gC))/ (gH-gL)*V), 3) - ema(accum(((gC -gL)-(gH- gC))/(gH-gL)*V), 10) >=0) then
value = value + 1;
else
value = value - 1;
input : AF(0.02),AFMAX(0.2);
Var : Direction(0), SAR_Value(Close), AF_Value(.02), HighValue(h), LowValue(l), EP(0),Sarv(0);
if EP != 0 Then
{
if Direction == 1 then
{
EP = HighValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gh > HighValue then
{
HighValue = gh;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if gl < SAR_Value then
{
Direction = -1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
LowValue = gl;
}
}
else
{
EP = LowValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gl < LowValue then
{
LowValue = gl;
AF_Value = AF_Value + Af;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if gh > SAR_Value then
{
Direction = 1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
HighValue = gh;
}
}
Sarv = SAR_Value;
}
else
{
if SAR_Value != 0 && EP == 0 then
{
if Direction == 1 then
{
EP = HighValue;
AF_Value = AF;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gh > HighValue then
{
HighValue = gh;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
else
{
EP = LowValue;
AF_Value = Af;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gl < LowValue then
{
LowValue = gl;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
Sarv = SAR_Value;
}
else
{
if Direction == 0 then
{
if gc > gc[1] then Direction = 1;
else
if gc < gc[1] then Direction = -1;
}
else
{
if Direction == 1 then
{
if gc < gc[1] then
{
Direction = -1;
SAR_Value = HighValue;
Sarv = SAR_Value;
}
}
if Direction == -1 then
{
if gc > gc[1] then
{
Direction = 1;
SAR_Value = LowValue;
Sarv = SAR_Value;
}
}
}
LowValue = min(gl, LowValue);
HighValue = max(gh, HighValue);
}
}
//문장7 : 종가가 파라볼릭보다 큼
if Sarv < gC then
value = value + 1;
else
value = value - 1;
BW_SEVEN = value;
va1 = data2(ema(BW_SEVEN,P1)- ema(BW_SEVEN,P2));
va2 = data2(ema(va1,P3));
va3 = data2(va1-va2);
d1stoK = data1(StochasticsK(4,3));
d1stoD = data1(StochasticsD(4,3,3));
TCHAN = HIGHEST(HIGH, n2);
BCHAN = LOWEST(LOW, n2);
If CrossUp(value,1) and (crossup(D1stok,20) or (crossup(D1stok,D1Stod) and D1stok >= 20 and D1stok < N)) Then
{
Buy();
}
If CrossDown(value,-1) or Crossdown(c,BCHAN[n1]) Then
{
ExitLong();
}
# 매도/매수청산
If CrossDown(value,-1) and (CrossDown(D1stok,80) or (CrossDown(D1stok,D1Stod) and D1stok <= 80 and D1stok > N)) Then
{
Sell();
}
If Crossup(value,1) or crossup(c,TCHAN[n1]) Then
{
Sell();
}
즐거운 하루되세요
> 흑수돌 님이 쓴 글입니다.
> 제목 : 수식 문의
> 아래는 기본 지표에 있는 '세븐바이너리지표'를 갭보정하여
매수,매도가 나올 수 있도록 시스템 수식으로 만든 것입니다.
아래 수식을
data2(같은 종목의 타주기)의 매수 매도 조건으로 하고
매수 ::::
data1에서는
조건1 : 스토캐스틱슬로우 4-3-3이 침체권 20에서 탈출하는 순간.
또는
조건2 : 스토캐스틱슬로우 4-3-3이 %K선이 %D선을 골드 크로스 치는 순간.
조건3 : 단 침체권 안에서의 골드크로스와 기준선 n값 이상에서의 골드크로스는 인정하지 않음)
매수 하되
조건4 : data2의 신호가 매수일때에만 위의 매수신호가 유효한 것으로 처리
(조건 1,2가 발생한 이후에 조건4가 충족될 때는 신호를 발생시키지 않습니다.)
매수 청산 :::
주가가 종가상 n봉 전의 price channel n2값 하단을 깨고 내려가면 청산.
또는
data2가 매도 조건이 뜨면 청산.
매도 ::::
data1에서는
조건1 : 스토캐스틱슬로우 4-3-3이 과열권 80에서 탈출하는 순간.
또는
조건2 : 스토캐스틱슬로우 4-3-3이 %K선이 %D선을 데드 크로스 치는 순간.
조건3 : 단 과열권 안에서의 데드크로스와 기준선 n값 이하에서의 골드크로스는 인정하지 않음)
매도 하되
조건4 : data2의 신호가 매도일때에만 위의 매수신호가 유효한 것으로 처리
(조건 1,2가 발생한 이후에 조건4가 충족될 때는 신호를 발생시키지 않습니다.)
매도 청산 :
주가가 종가상 n봉 전의 price channel n2값 상단을 뚫고 올라가면 청산.
또는
data2가 매수 조건이 뜨면 청산.
================
위의 수식의 모든 조건값을 직접 수정할 수 있도록 해주시기 바랍니다.
질문 :
data2의 조건을 data1에 그대로 옮겨 와서 (마치 일봉의 이평을 분봉에 옮겨 오듯이)
data2를 안 깔고 위의 매수매도 시그널을 뿌려줄 수는 없을까요?
(data2는 3분. data1은 1분)
--------아래 --------------
Input: shortPeriod(13), longPeriod(26), Period(6), maPeriod(13), ROCPeriod(9), stoPeriod1(10),
stoPeriod2(6), CCIPeriod(9);
input: P1(13),P2(26),P3(6);
var: value(0),BW_SEVEN(0);
var : sumGap(0), gap(0), GO(0), GH(0), GL(0), GC(0);
if date!=date[1] then { // 날짜가 변경되는 봉에서
gap = Open-Close[1]; // 일간갭
sumGap = sumGap+gap; // 일간갭 누적
}
GO = O - sumGap; // 시가에서 갭누적값을 차감
GH = H - sumGap; // 고가에서 갭누적값을 차감
GL = L - sumGap; // 저가에서 갭누적값을 차감
GC = C - sumGap; // 종가에서 갭누적값을 차감
//문장1 : MACD가 MACD 시그널선 보다 큼
if ema(gC,shortPeriod)-ema(gC,longPeriod) >= ema(ema(gC,shortPeriod)-ema(gC,longPeriod),Period) then
value = 1;
else
value = -1;
//문장2 : 종가가 이동평균선보다 큼
if gC >= ma(gC, maPeriod) then
value = value + 1;
else
value = value - 1;
//문장3 : Price ROC가 0선보다 큼
if (gC - gC[ROCPeriod]) / gC[ROCPeriod] * 100 >= 0 then
value = value + 1;
else
value = value - 1;
//문장4 : StochasticsK선이 50선 보다 큼
if ema((gC-lowest(gL, stoPeriod1)) / (highest(gH, stoPeriod1) - lowest(gL, stoPeriod1)) * 100, stoPeriod2)>=50 then
value = value + 1;
else
value = value - 1;
Variables: Sum(0), CCIcount(0), MD(0), Avgvalue(0),CCIV(0);
If CCIPeriod > 0 Then Begin
Avgvalue = Ma(GH + gL + GC, CCIPeriod);
MD = 0;
For CCIcount = 0 To CCIPeriod - 1 Begin
MD = MD + Abs(GH[CCIcount] + gL[CCIcount] + GC[CCIcount] - Avgvalue);
End;
MD = MD / CCIPeriod;
If MD == 0 Then
CCIv = 0;
Else
CCIv = (GH + gL + GC - Avgvalue) / (0.015 * MD);
End
Else
CCIv = 0;
//CCI가 0선 보다 큼
if CCIv > 0 then
value = value + 1;
else
value = value - 1;
//CO가 0선 보다 큼
if ema(accum(((gC -gL)-(gH- gC))/ (gH-gL)*V), 3) - ema(accum(((gC -gL)-(gH- gC))/(gH-gL)*V), 10) >=0 then
value = value + 1;
else
value = value - 1;
input : AF(0.02),AFMAX(0.2);
Var : Direction(0), SAR_Value(Close), AF_Value(.02), HighValue(h), LowValue(l), EP(0),Sarv(0);
if EP != 0 Then
{
if Direction == 1 then
{
EP = HighValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gh > HighValue then
{
HighValue = gh;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if gl < SAR_Value then
{
Direction = -1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
LowValue = gl;
}
}
else
{
EP = LowValue;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gl < LowValue then
{
LowValue = gl;
AF_Value = AF_Value + Af;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
if gh > SAR_Value then
{
Direction = 1;
SAR_Value = EP;
AF_Value = 0;
EP = 0;
HighValue = gh;
}
}
Sarv = SAR_Value;
}
else
{
if SAR_Value != 0 && EP == 0 then
{
if Direction == 1 then
{
EP = HighValue;
AF_Value = AF;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gh > HighValue then
{
HighValue = gh;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
else
{
EP = LowValue;
AF_Value = Af;
SAR_Value = SAR_Value + AF_Value * (EP - SAR_Value);
if gl < LowValue then
{
LowValue = gl;
AF_Value = AF_Value + AF;
if AF_Value >= AFMAX then AF_Value = AFMAX;
}
}
Sarv = SAR_Value;
}
else
{
if Direction == 0 then
{
if gc > gc[1] then Direction = 1;
else
if gc < gc[1] then Direction = -1;
}
else
{
if Direction == 1 then
{
if gc < gc[1] then
{
Direction = -1;
SAR_Value = HighValue;
Sarv = SAR_Value;
}
}
if Direction == -1 then
{
if gc > gc[1] then
{
Direction = 1;
SAR_Value = LowValue;
Sarv = SAR_Value;
}
}
}
LowValue = min(gl, LowValue);
HighValue = max(gh, HighValue);
}
}
//문장7 : 종가가 파라볼릭보다 큼
if Sarv < gC then
value = value + 1;
else
value = value - 1;
BW_SEVEN = value;
var1 = ema(BW_SEVEN,P1)- ema(BW_SEVEN,P2);
var2 = ema(var1,P3);
var3 = var1-var2;
# 매수/매도청산
If CrossUp(value,1) Then
{
Buy();
}
# 매도/매수청산
If CrossDown(value,-1) Then
{
Sell();
}
다음글
이전글