커뮤니티

시스템 수정문의

프로필 이미지
파쿠3
2013-08-16 13:57:32
156
글번호 66517
답변완료
시스템문의드립니다. 아래와 같이 2종류의 시스템 식이 있습니다. 피라미딩은 2가지 모두 2건입니다. A코드는 B코드를 함수화 한 코드입니다. 문제는 B코드는 zero == 2 일때, N ==5 일때 음봉(봉크기제일큼) - 음봉 - 도지봉 - 도지봉 - 음봉 - 음봉 - 음봉 - 도지봉 일때, 최근 2번째 음봉 종가에서만 진입이 1회 이루어집니다만, A코드는 최근 2번째 음봉에서 진입 및 최근 1번째 도지봉에서 진입이 됩니다. 총 2번 진입입니다. B코드가 정확안 진입이고, A코드의 최근 도지봉에서의 진입은 잘못된 진입입니다. A코드를 좀 수정해주셨으면 합니다. 참고로, 동일코드에서 이러한 경우에는 진입이 맞으며,, 정상적으로 움직입니다. 음봉(봉크기제일큼) - 음봉(봉크기2번째로큼) -도지봉 -도지봉 - 음봉 - 음봉 - 음봉 - 음봉 이럴경우에는 최근 음봉과 최근2번째 음봉에서 각각 진입하는 것이 맞고, 정상적으로 움직입니다. 또한, c코드는 5분봉챠트에서 10분봉을 거래하는 겁니다만, 마찬가지로, zero == 2 일때, N ==5 일때 음봉(봉크기제일큼) - 음봉 - 도지봉 - 도지봉 - 음봉 - 음봉 - 음봉 - 도지봉 최근 2번째 음봉에서 진입 및 최근 1번째 도지봉에서 진입이 됩니다. 총 2번 진입입니다. 현상이 나타납니다. ---A코드--- input : CT(0); // CT(1)=양봉 O<C , CT(0)=음봉 O>C input : N(5); input : Zero(2); var : cnt(0),absv(0),sellcond(false); Array : DD[20](0),FF[20](0); Absv = abs(O-C); if C > O Then{ DD[0] = 1; FF[0] = absv; for cnt = 1 to 19{ DD[cnt] = DD[cnt-1][1]; ff[cnt] = ff[cnt-1][1]; } } if C < O Then{ DD[0] = -1; FF[0] = absv; for cnt = 1 to 19{ DD[cnt] = DD[cnt-1][1]; ff[cnt] = ff[cnt-1][1]; } } sellcond = false;#초기값(매봉 아래수식 수행전 false로 초기화) #zero가 2이면 if Zero == 2 Then{ var1 = 0; var2 = 0; for cnt = 0 to N-1{ var1 = var1+DD[cnt]; if FF[cnt] > var2 Then var2 = FF[cnt]; } if CT == 0 and Var1 == -N and FF[N-1] == var2 Then sellcond = true; if CT == 1 and Var1 == N and FF[N-1] == var2 Then sellcond = true; } if sellcond == true Then Buy("A", OnClose, DEF, 1); ----B코드--- If C < O Then { Var1 = 1; Var2 = Var1[1]; Var3 = Var2[1]; Var4 = Var3[1]; Var5 = Var4[1]; Var11 = Abs(C-O); Var12 = Var11[1]; Var13 = Var12[1]; Var14 = Var13[1]; Var15 = Var14[1]; If Var1 == 1 and Var2 ==1 and Var3 ==1 and var4 == 1 and Var5 == 1 and Var15 >= Max( Var14, Var13, Var12, Var11) Then { Buy("A", OnClose, DEF, 1); } } If C > O Then { Var1 = -1; Var2 = Var1[1]; Var3 = Var2[1]; Var4 = Var3[1]; Var5 = Var4[1]; Var11 = Abs(C-O); Var12 = Var11[1]; Var13 = Var12[1]; Var14 = Var13[1]; Var15 = Var14[1]; } ---c 코드 input : CT(0); // CT(1)=양봉 O<C , CT(0)=음봉 O>C input : N(5); input : Zero(0); var : TF(0),OpenV(0),CloseV(0),cnt(0),sellcond(false); var : count11(0),count12(0),count21(0),count22(0),count31(0),count32(0); var : A1max(0),a2max(0); Array : D1[20](0),A1[20](0),D2[20](0),A2[20](0),CC[20](0),OO[20](0); TF = TimeToMinutes(stime)%10; if dayindex == 0 or (TF < TF[1] ) Then openV = O; //CloseV = C; if TF == 5 Then{ if C > OpenV Then{ CC[0] = C; OO[0] = OpenV; D1[0] = 1; A1[0] = abs(OpenV-C); D2[0] = 1; A2[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; D2[cnt] = D1[cnt-1][1]; A2[cnt] = A2[cnt-1][1]; } } if CloseV < OpenV Then{ CC[0] = c; OO[0] = OpenV; D1[0] = -1; A1[0] = abs(OpenV-C); D2[0] = -1; A2[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; D2[cnt] = D2[cnt-1][1]; A2[cnt] = A2[cnt-1][1]; } } if CloseV == OpenV Then{ CC[0] = c; OO[0] = OpenV; D1[0] = 0; A1[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; } } } sellcond = false;#초기값(매봉 아래수식 수행전 false로 초기화) count11 = 0; count12 = 0; count21 = 0; count22 = 0; count31 = 0; count32 = 0; A1max = 0; A2max = 0; for cnt = 0 to N-1{ #d1 N개봉 양봉인 횟수 if D1[cnt] == 1 Then count11 = count11+1; #d1 N개봉 음봉인 횟수 if D1[cnt] == -1 Then count12 = count12+1; #d1 N개봉 도지봉이나 양봉인 횟수 if D1[cnt] >= 0 Then count21 = count21+1; #d1 N개봉 도지봉이나 음봉인 횟수 if D1[cnt] <= 0 Then count22 = count22+1; #D2 N개봉 도지봉이나 양봉인 횟수 if D2[cnt] == 1 Then count31 = count31+1; #D2 N개봉 도지봉이나 음봉인 횟수 if D2[cnt] == -1 Then count32 = count32+1; if A1[cnt] > A1max Then A1max = A1[cnt]; if A2[cnt] > A2max Then A2max = A2[cnt]; } #zero가 2이면 if Zero == 2 Then{ if CT == 0 and count32 == N and A2[N-1] == A2max Then sellcond = true; if CT == 1 and count31 == N and A2[N-1] == A2max Then sellcond = true; } if sellcond == true Then buy("C", OnClose, DEF, 1); SetStopProfittarget(0.0012,PointStop); SetStopLoss(0.0040,PointStop);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-08-16 16:47:58

안녕하세요 예스스탁입니다. 1. A코드의 경우 가장 최근 음봉과 양봉의 값을 저장해 사용해서 음봉진행중인 도지봉에서도 신호가 발생했습니다. 기본 B코드는 진입자체트가 양봉이란느 조건식 안에 있는데 해당 식은 외부에 있었습니다. 조건식에 해당 내용 추가했습니다. input : CT(0); // CT(1)=양봉 O<C , CT(0)=음봉 O>C input : N(5); input : Zero(2); var : cnt(0),absv(0),sellcond(false); Array : DD[20](0),FF[20](0); Absv = abs(O-C); if C > O Then{ DD[0] = 1; FF[0] = absv; for cnt = 1 to 19{ DD[cnt] = DD[cnt-1][1]; ff[cnt] = ff[cnt-1][1]; } } if C < O Then{ DD[0] = -1; FF[0] = absv; for cnt = 1 to 19{ DD[cnt] = DD[cnt-1][1]; ff[cnt] = ff[cnt-1][1]; } } sellcond = false;#초기값(매봉 아래수식 수행전 false로 초기화) #zero가 2이면 if Zero == 2 Then{ var1 = 0; var2 = 0; for cnt = 0 to N-1{ var1 = var1+DD[cnt]; if FF[cnt] > var2 Then var2 = FF[cnt]; } if CT == 0 and Var1 == -N and FF[N-1] == var2 and C < O Then sellcond = true; if CT == 1 and Var1 == N and FF[N-1] == var2 and C < O Then sellcond = true; } if sellcond == true Then Buy("A", OnClose, DEF, 1); 2. input : CT(0); // CT(1)=양봉 O<C , CT(0)=음봉 O>C input : N(5); input : Zero(0); var : TF(0),OpenV(0),CloseV(0),cnt(0),sellcond(false); var : count11(0),count12(0),count21(0),count22(0),count31(0),count32(0); var : A1max(0),a2max(0); Array : D1[20](0),A1[20](0),D2[20](0),A2[20](0),CC[20](0),OO[20](0); TF = TimeToMinutes(stime)%10; if dayindex == 0 or (TF < TF[1] ) Then openV = O; CloseV = C; if TF == 5 Then{ if CloseV > OpenV Then{ CC[0] = C; OO[0] = OpenV; D1[0] = 1; A1[0] = abs(OpenV-C); D2[0] = 1; A2[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; D2[cnt] = D1[cnt-1][1]; A2[cnt] = A2[cnt-1][1]; } } if CloseV < OpenV Then{ CC[0] = c; OO[0] = OpenV; D1[0] = -1; A1[0] = abs(OpenV-C); D2[0] = -1; A2[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; D2[cnt] = D2[cnt-1][1]; A2[cnt] = A2[cnt-1][1]; } } if CloseV == OpenV Then{ CC[0] = c; OO[0] = OpenV; D1[0] = 0; A1[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; } } } sellcond = false;#초기값(매봉 아래수식 수행전 false로 초기화) count11 = 0; count12 = 0; count21 = 0; count22 = 0; count31 = 0; count32 = 0; A1max = 0; A2max = 0; for cnt = 0 to N-1{ #d1 N개봉 양봉인 횟수 if D1[cnt] == 1 Then count11 = count11+1; #d1 N개봉 음봉인 횟수 if D1[cnt] == -1 Then count12 = count12+1; #d1 N개봉 도지봉이나 양봉인 횟수 if D1[cnt] >= 0 Then count21 = count21+1; #d1 N개봉 도지봉이나 음봉인 횟수 if D1[cnt] <= 0 Then count22 = count22+1; #D2 N개봉 도지봉이나 양봉인 횟수 if D2[cnt] == 1 Then count31 = count31+1; #D2 N개봉 도지봉이나 음봉인 횟수 if D2[cnt] == -1 Then count32 = count32+1; if A1[cnt] > A1max Then A1max = A1[cnt]; if A2[cnt] > A2max Then A2max = A2[cnt]; } #zero가 2이면 if Zero == 2 Then{ if CT == 0 and count32 == N and A2[N-1] == A2max and CloseV < OpenV Then sellcond = true; if CT == 1 and count31 == N and A2[N-1] == A2max and CloseV < OpenV Then sellcond = true; } if sellcond == true and TF == 5 Then buy("C", OnClose, DEF, 1); SetStopProfittarget(0.0012,PointStop); SetStopLoss(0.0040,PointStop); 즐거운 하루되세요 > 파쿠3 님이 쓴 글입니다. > 제목 : 시스템 수정문의 > 시스템문의드립니다. 아래와 같이 2종류의 시스템 식이 있습니다. 피라미딩은 2가지 모두 2건입니다. A코드는 B코드를 함수화 한 코드입니다. 문제는 B코드는 zero == 2 일때, N ==5 일때 음봉(봉크기제일큼) - 음봉 - 도지봉 - 도지봉 - 음봉 - 음봉 - 음봉 - 도지봉 일때, 최근 2번째 음봉 종가에서만 진입이 1회 이루어집니다만, A코드는 최근 2번째 음봉에서 진입 및 최근 1번째 도지봉에서 진입이 됩니다. 총 2번 진입입니다. B코드가 정확안 진입이고, A코드의 최근 도지봉에서의 진입은 잘못된 진입입니다. A코드를 좀 수정해주셨으면 합니다. 참고로, 동일코드에서 이러한 경우에는 진입이 맞으며,, 정상적으로 움직입니다. 음봉(봉크기제일큼) - 음봉(봉크기2번째로큼) -도지봉 -도지봉 - 음봉 - 음봉 - 음봉 - 음봉 이럴경우에는 최근 음봉과 최근2번째 음봉에서 각각 진입하는 것이 맞고, 정상적으로 움직입니다. 또한, c코드는 5분봉챠트에서 10분봉을 거래하는 겁니다만, 마찬가지로, zero == 2 일때, N ==5 일때 음봉(봉크기제일큼) - 음봉 - 도지봉 - 도지봉 - 음봉 - 음봉 - 음봉 - 도지봉 최근 2번째 음봉에서 진입 및 최근 1번째 도지봉에서 진입이 됩니다. 총 2번 진입입니다. 현상이 나타납니다. ---A코드--- input : CT(0); // CT(1)=양봉 O<C , CT(0)=음봉 O>C input : N(5); input : Zero(2); var : cnt(0),absv(0),sellcond(false); Array : DD[20](0),FF[20](0); Absv = abs(O-C); if C > O Then{ DD[0] = 1; FF[0] = absv; for cnt = 1 to 19{ DD[cnt] = DD[cnt-1][1]; ff[cnt] = ff[cnt-1][1]; } } if C < O Then{ DD[0] = -1; FF[0] = absv; for cnt = 1 to 19{ DD[cnt] = DD[cnt-1][1]; ff[cnt] = ff[cnt-1][1]; } } sellcond = false;#초기값(매봉 아래수식 수행전 false로 초기화) #zero가 2이면 if Zero == 2 Then{ var1 = 0; var2 = 0; for cnt = 0 to N-1{ var1 = var1+DD[cnt]; if FF[cnt] > var2 Then var2 = FF[cnt]; } if CT == 0 and Var1 == -N and FF[N-1] == var2 Then sellcond = true; if CT == 1 and Var1 == N and FF[N-1] == var2 Then sellcond = true; } if sellcond == true Then Buy("A", OnClose, DEF, 1); ----B코드--- If C < O Then { Var1 = 1; Var2 = Var1[1]; Var3 = Var2[1]; Var4 = Var3[1]; Var5 = Var4[1]; Var11 = Abs(C-O); Var12 = Var11[1]; Var13 = Var12[1]; Var14 = Var13[1]; Var15 = Var14[1]; If Var1 == 1 and Var2 ==1 and Var3 ==1 and var4 == 1 and Var5 == 1 and Var15 >= Max( Var14, Var13, Var12, Var11) Then { Buy("A", OnClose, DEF, 1); } } If C > O Then { Var1 = -1; Var2 = Var1[1]; Var3 = Var2[1]; Var4 = Var3[1]; Var5 = Var4[1]; Var11 = Abs(C-O); Var12 = Var11[1]; Var13 = Var12[1]; Var14 = Var13[1]; Var15 = Var14[1]; } ---c 코드 input : CT(0); // CT(1)=양봉 O<C , CT(0)=음봉 O>C input : N(5); input : Zero(0); var : TF(0),OpenV(0),CloseV(0),cnt(0),sellcond(false); var : count11(0),count12(0),count21(0),count22(0),count31(0),count32(0); var : A1max(0),a2max(0); Array : D1[20](0),A1[20](0),D2[20](0),A2[20](0),CC[20](0),OO[20](0); TF = TimeToMinutes(stime)%10; if dayindex == 0 or (TF < TF[1] ) Then openV = O; //CloseV = C; if TF == 5 Then{ if C > OpenV Then{ CC[0] = C; OO[0] = OpenV; D1[0] = 1; A1[0] = abs(OpenV-C); D2[0] = 1; A2[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; D2[cnt] = D1[cnt-1][1]; A2[cnt] = A2[cnt-1][1]; } } if CloseV < OpenV Then{ CC[0] = c; OO[0] = OpenV; D1[0] = -1; A1[0] = abs(OpenV-C); D2[0] = -1; A2[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; D2[cnt] = D2[cnt-1][1]; A2[cnt] = A2[cnt-1][1]; } } if CloseV == OpenV Then{ CC[0] = c; OO[0] = OpenV; D1[0] = 0; A1[0] = abs(OpenV-C); for cnt = 1 to 19{ CC[cnt] = CC[cnt-1][1]; OO[cnt] = OO[cnt-1][1]; D1[cnt] = D1[cnt-1][1]; A1[cnt] = A1[cnt-1][1]; } } } sellcond = false;#초기값(매봉 아래수식 수행전 false로 초기화) count11 = 0; count12 = 0; count21 = 0; count22 = 0; count31 = 0; count32 = 0; A1max = 0; A2max = 0; for cnt = 0 to N-1{ #d1 N개봉 양봉인 횟수 if D1[cnt] == 1 Then count11 = count11+1; #d1 N개봉 음봉인 횟수 if D1[cnt] == -1 Then count12 = count12+1; #d1 N개봉 도지봉이나 양봉인 횟수 if D1[cnt] >= 0 Then count21 = count21+1; #d1 N개봉 도지봉이나 음봉인 횟수 if D1[cnt] <= 0 Then count22 = count22+1; #D2 N개봉 도지봉이나 양봉인 횟수 if D2[cnt] == 1 Then count31 = count31+1; #D2 N개봉 도지봉이나 음봉인 횟수 if D2[cnt] == -1 Then count32 = count32+1; if A1[cnt] > A1max Then A1max = A1[cnt]; if A2[cnt] > A2max Then A2max = A2[cnt]; } #zero가 2이면 if Zero == 2 Then{ if CT == 0 and count32 == N and A2[N-1] == A2max Then sellcond = true; if CT == 1 and count31 == N and A2[N-1] == A2max Then sellcond = true; } if sellcond == true Then buy("C", OnClose, DEF, 1); SetStopProfittarget(0.0012,PointStop); SetStopLoss(0.0040,PointStop);