커뮤니티

수식 문의

프로필 이미지
흑수돌
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(); }