커뮤니티

도움 부탁드립니다.

프로필 이미지
데몬
2015-05-11 06:16:35
172
글번호 85889
답변완료
안녕하세요- 저- 아래 절취선(>>>>>) 밑에 전략 2개(거의 같은)가 있습니다. 두개의 전략에 대래 EQUITY 라는 변수로 수익률 그래프를 지표로 구현 부탁드립니다. 바로 밑은 저 혼자서 예전 유사전략을 수익률 그래프로 만들었던 것입니다. 제가 안하려는 것이 아니고..미세한 오차 발생분에 대해 정확한 구현을 도움부탁드리고자 이렇게 올립니다. 혹시 작업중 필요하시면 연락부탁드립니다. (01054410350) 번거로우시겠지만, SETSTOPLOSS(C*0.03,POINTSTOP); 등까지도 구현해주시면 감사하겠습니다. 다시 한번 먼저 감사드립니다. # 유사 전략 수익률그래프 INPUT : init(400),risk(0.08),CAP(100000),f(3); VAR : PV_ZW(100),POINTV2(100),POINTV3(100),POINTV4(100); VAR : BET1(0), BET2(0), BET3(0), BET4(0); VAR : BET_T1(0), BET_T2(0), BET_T3(0), BET_T4(0); VAR : TRADE(0), T1(0), T2(0), TEMP_L(0), TEMP_H(0), CC(0); VAR : PST1(0), EP1(0), EX1(0), TR(0), CNT(0); ARRAY : PROFIT[100](0),ECURVE[100](0),RATE[100](0); PV_ZW = 50; BET1 = 1; IF PST1[2] == 0 AND PST1 <> 0 THEN { #MessageLog("[PST] %.3f",PST1); MessageLog("betsize %.3f %.3f %.3f %.3f %.3f %.3f",BET1,(CAP+(ECURVE[0]*PV_ZW))*f/(C[2]*PV_ZW),ECURVE[0]); } IF (DATA2(L) <> TEMP_L) AND (DATA2(H) <> TEMP_H) THEN { T1 = STIME[10]; T2 = STIME + 10000; TEMP_L = DATA2(L); TEMP_H = DATA2(H); } IF (STIME[1] < T2 AND STIME >= T2) THEN TRADE = 1; # 수익그래프 IF (STIME[2] < T1 AND STIME[1] >= T1) THEN { IF PST1 == 1 THEN { PROFIT[0] = (EP1-O)*BET_T1; #MessageLog("매수이익1 %.3f %.3f %.3f",O,EP1,PROFIT[0]); FOR CNT = 1 TO 99 { PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; FOR CNT = 1 TO 99 { ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } IF PST1 == -1 THEN { PROFIT[0] = (O-EP1)*BET_T1; #MessageLog("매도이익1 %.3f %.3f %.3f",O,EP1,PROFIT[0]); FOR CNT = 1 TO 99{ PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; for CNT = 1 TO 99{ ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } TR = 0; } # IF SDATE[1] != SDATE[2] THEN TR = 1; IF (STIME[2] < T2 AND STIME[1] >= T2) THEN TR = 1; # 진입 IF TR == 1 AND PST1 == PST1[1] AND DATA2(H) <> DATA2(L) THEN { IF (L[1] <= DATA2(L) AND L[2] > DATA2(L)) OR (L[1] <= DATA2(L) AND TR[2] == 0 AND TR[1] == 1) THEN { IF O[1] > DATA2(L) THEN { EX1 = DATA2(L); } ELSE { EX1 = O[1]; #MessageLog("매수시점 %.3f %.f %.3f %.3f %.3f %.3f %.3f %.3f",EX1,STIME,DATA2(H),DATA2(L),DATA2(H[1]),DATA2(L[1]),DATA2(H[2]),DATA2(L[2])); } IF PST1 == -1 THEN { PROFIT[0] = (EX1-EP1)*BET_T1; #MessageLog("매도이익2 %.3f %.3f %.3f",EX1,EP1,PROFIT[0]); FOR CNT = 1 TO 99{ PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; for CNT = 1 TO 99{ ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } IF PST1[1] <> 1 THEN { PST1 = 1; EP1 = EX1; #MessageLog("매수시점 %.3f",EP1); BET_T1 = BET1; } } IF (H[1] >= DATA2(H) AND H[2] < DATA2(H)) OR (H[1] >= DATA2(H) AND TR[2] == 0 AND TR[1] == 1) THEN { IF O[1] < DATA2(H) THEN { EX1 = DATA2(H); } ELSE { EX1 = O[1]; } IF PST1 == 1 THEN { PROFIT[0] = (EP1-EX1)*BET_T1; #MessageLog("매수이익2 %.3f %.3f %.3f",EX1,EP1,PROFIT[0]); FOR CNT = 1 TO 99 { PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; FOR CNT = 1 TO 99 { ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } IF PST1[1] <> -1 THEN { PST1 = -1; EP1 = EX1; #MessageLog("매도시점 %.3f",EP1); BET_T1 = BET1; } } } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # 전략1 VAR : ET(0,DATA1), XT(0,DATA1); VAR : TR(0,DATA1), BET(1,DATA1); ET = 140000; XT = 150000; ST = 93000; IF MARKETPOSITION <> 0 AND (DATA2(H)-DATA2(L)) > C*0.005 AND MAXPOSITIONPROFIT < C*0.002 AND STIME[1] < ST AND STIME >= ST THEN { EXITLONG(); EXITSHORT(); TR = 0; } IF STIME[1] < XT AND STIME >= XT THEN { EXITLONG("매수청산",ATMARKET); EXITSHORT("매도청산",ATMARKET); TR = 0; } IF STIME[1] < ET AND STIME >= ET THEN { TR = 1; } IF TR == 1 AND DATA2(H) <> DATA2(L) AND MARKETPOSITION == MARKETPOSITION[1] THEN { BUY("B",ATSTOP,DATA2(H),BET); SELL("S",ATSTOP,DATA2(L),BET); } SETSTOPLOSS(C*0.03,POINTSTOP); #전략2 VAR : ET(0,DATA1), XT(0,DATA1); VAR : TR(0,DATA1), BET(1,DATA1);; ET = 140000; XT = 150000; ST = 93000; IF MARKETPOSITION <> 0 AND (DATA2(H)-DATA2(L)) > C*0.005 AND MAXPOSITIONPROFIT < C*0.002 AND STIME[1] < ST AND STIME >= ST THEN { SELL("S1",ATSTOP,DATA2(L-C*0.015),BET); # 이 부분이 서로 다릅니다. TR = 0; } IF STIME[1] < XT AND STIME >= XT THEN { EXITLONG("매수청산",ATMARKET); TR = 0; } IF STIME[1] < ET AND STIME >= ET THEN { TR = 1; } IF TR == 1 AND DATA2(H) <> DATA2(L) AND MARKETPOSITION == MARKETPOSITION[1] THEN { BUY("B1",ATLIMIT,DATA2(L),BET); }
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-05-12 11:34:24

안녕하세요 예스스탁입니다. 전화로 답변드린부분과 같이 시스템식의 체계를 지표로 구현하기 어려운 부분이 있습니다. 아래 내용 참고하시기 바랍니다. 도움을 드리지 못해 죄송합니다. VAR : ET(0,DATA1), XT(0,DATA1), ST(0,data1); VAR : TR(0,DATA1), BET(1,DATA1),pst(0,data1); var : EC(0,data1), XC(0,data1); var : H2(0,data1), L2(0,data1); var : HH(0,data1), LL(0,data1); var : EQUITY(0,data1); ET = 140000; XT = 150000; ST = 93000; H2 = data2(H); L2 = data2(L); #SETSTOPLOSS(C*0.03,POINTSTOP); if pst == 1 and pst[1] == 1 Then{ if L <= EC-C[1]*0.03 Then{ pst = 0; if O <= EC-C[1]*0.03 Then XC = O; Else XC = iff(FracPortion((EC-C[1]*0.03)/PriceScale) == 0,EC-C[1]*0.03,floor((EC-C[1]*0.03)/PriceScale)*PriceScale); EQUITY = EQUITY + (XC-EC)*BET-(PriceScale*2)*BET; IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if H >= H2[1] Then{ EC = XC; pst = 1; HH = 0; } } IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if L <= L2[1] Then{ EC = XC; pst = -1; LL = 99999999; } } } } if pst == -1 and pst[1] == -1 Then{ if H >= EC+C[1]*0.03 Then{ pst = 0; if O >= EC+C[1]*0.03 Then XC = O; Else XC = iff(FracPortion((EC+C[1]*0.03)/PriceScale) == 0,EC+C[1]*0.03,(floor((EC+C[1]*0.03)/PriceScale)+1)*PriceScale); EQUITY = EQUITY + (EC-XC)*BET-(PriceScale*2)*BET; IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if H >= H2[1] Then{ EC = XC; pst = 1; HH = 0; } } IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if L <= L2[1] Then{ EC = XC; pst = -1; LL = 99999999; } } } } if pst == 1 and pst[1] == 1 Then{ if H > HH Then HH = H; } if pst == -1 and pst[1] == -1 Then{ if L < LL Then LL = L; } IF PST <> 0 AND (DATA2(H)-DATA2(L)) > C*0.005 AND STIME[1] < ST AND STIME >= ST THEN { if pst == 1 and (HH-EC) < C*0.002 then{ Pst = 0; XC = c; EQUITY = EQUITY + (XC-EC)*BET-(PriceScale*2)*BET; IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if H >= H2[1] Then{ EC = XC; pst = 1; HH = 0; } } IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if L <= L2[1] Then{ EC = XC; pst = -1; LL = 99999999; } } } if pst == -1 and (HH-EC) < C*0.002 Then{ Pst = 0; XC = c; EQUITY = EQUITY + (EC-XC)*BET-(PriceScale*2)*BET; IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if H >= H2[1] Then{ EC = XC; pst = 1; HH = 0; } } IF H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if L <= L2[1] Then{ EC = XC; pst = -1; LL = 99999999; } } } TR = 0; } IF STIME[1] < XT AND STIME >= XT THEN { if pst == 1 Then{ XC = NextBarOpen; EQUITY = EQUITY + (XC-EC)*BET-(PriceScale*2)*BET; } if pst == -1 Then{ XC = NextBarOpen; EQUITY = EQUITY + (EC-XC)*BET-(PriceScale*2)*BET; } pst = 0; TR = 0; } IF STIME[1] < ET AND STIME >= ET THEN { TR = 1; } IF TR[1] == 1 and TR == 1 AND H2[1] <> L2[1] AND Pst[1] == Pst[2] THEN { if pst <= 0 and H >= H2[1] Then{ if O >= H2[1] Then EC = O; Else EC = iff(FracPortion((H2[1])/PriceScale) == 0,H2[1],(floor((H2[1])/PriceScale)+1)*PriceScale); if Pst == -1 Then{ XC = EC; EQUITY = EQUITY + (EC[1]-XC)*BET-(PriceScale*2)*BET; } pst = 1; HH = 0; } if Pst >= 0 and L <= L2[1] Then{ if O <= L2[1] Then EC = O; Else EC = iff(FracPortion((L2[1])/PriceScale) == 0,L2[1],(floor((L2[1])/PriceScale))*PriceScale); if Pst == 1 Then{ XC = EC; EQUITY = EQUITY + (XC-EC[1])*BET-(PriceScale*2)*BET; } pst = -1; LL = 99999999; } } plot1(EQUITY); 즐거운 하루되세요 > 데몬 님이 쓴 글입니다. > 제목 : 도움 부탁드립니다. > 안녕하세요- 저- 아래 절취선(>>>>>) 밑에 전략 2개(거의 같은)가 있습니다. 두개의 전략에 대래 EQUITY 라는 변수로 수익률 그래프를 지표로 구현 부탁드립니다. 바로 밑은 저 혼자서 예전 유사전략을 수익률 그래프로 만들었던 것입니다. 제가 안하려는 것이 아니고..미세한 오차 발생분에 대해 정확한 구현을 도움부탁드리고자 이렇게 올립니다. 혹시 작업중 필요하시면 연락부탁드립니다. (01054410350) 번거로우시겠지만, SETSTOPLOSS(C*0.03,POINTSTOP); 등까지도 구현해주시면 감사하겠습니다. 다시 한번 먼저 감사드립니다. # 유사 전략 수익률그래프 INPUT : init(400),risk(0.08),CAP(100000),f(3); VAR : PV_ZW(100),POINTV2(100),POINTV3(100),POINTV4(100); VAR : BET1(0), BET2(0), BET3(0), BET4(0); VAR : BET_T1(0), BET_T2(0), BET_T3(0), BET_T4(0); VAR : TRADE(0), T1(0), T2(0), TEMP_L(0), TEMP_H(0), CC(0); VAR : PST1(0), EP1(0), EX1(0), TR(0), CNT(0); ARRAY : PROFIT[100](0),ECURVE[100](0),RATE[100](0); PV_ZW = 50; BET1 = 1; IF PST1[2] == 0 AND PST1 <> 0 THEN { #MessageLog("[PST] %.3f",PST1); MessageLog("betsize %.3f %.3f %.3f %.3f %.3f %.3f",BET1,(CAP+(ECURVE[0]*PV_ZW))*f/(C[2]*PV_ZW),ECURVE[0]); } IF (DATA2(L) <> TEMP_L) AND (DATA2(H) <> TEMP_H) THEN { T1 = STIME[10]; T2 = STIME + 10000; TEMP_L = DATA2(L); TEMP_H = DATA2(H); } IF (STIME[1] < T2 AND STIME >= T2) THEN TRADE = 1; # 수익그래프 IF (STIME[2] < T1 AND STIME[1] >= T1) THEN { IF PST1 == 1 THEN { PROFIT[0] = (EP1-O)*BET_T1; #MessageLog("매수이익1 %.3f %.3f %.3f",O,EP1,PROFIT[0]); FOR CNT = 1 TO 99 { PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; FOR CNT = 1 TO 99 { ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } IF PST1 == -1 THEN { PROFIT[0] = (O-EP1)*BET_T1; #MessageLog("매도이익1 %.3f %.3f %.3f",O,EP1,PROFIT[0]); FOR CNT = 1 TO 99{ PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; for CNT = 1 TO 99{ ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } TR = 0; } # IF SDATE[1] != SDATE[2] THEN TR = 1; IF (STIME[2] < T2 AND STIME[1] >= T2) THEN TR = 1; # 진입 IF TR == 1 AND PST1 == PST1[1] AND DATA2(H) <> DATA2(L) THEN { IF (L[1] <= DATA2(L) AND L[2] > DATA2(L)) OR (L[1] <= DATA2(L) AND TR[2] == 0 AND TR[1] == 1) THEN { IF O[1] > DATA2(L) THEN { EX1 = DATA2(L); } ELSE { EX1 = O[1]; #MessageLog("매수시점 %.3f %.f %.3f %.3f %.3f %.3f %.3f %.3f",EX1,STIME,DATA2(H),DATA2(L),DATA2(H[1]),DATA2(L[1]),DATA2(H[2]),DATA2(L[2])); } IF PST1 == -1 THEN { PROFIT[0] = (EX1-EP1)*BET_T1; #MessageLog("매도이익2 %.3f %.3f %.3f",EX1,EP1,PROFIT[0]); FOR CNT = 1 TO 99{ PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; for CNT = 1 TO 99{ ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } IF PST1[1] <> 1 THEN { PST1 = 1; EP1 = EX1; #MessageLog("매수시점 %.3f",EP1); BET_T1 = BET1; } } IF (H[1] >= DATA2(H) AND H[2] < DATA2(H)) OR (H[1] >= DATA2(H) AND TR[2] == 0 AND TR[1] == 1) THEN { IF O[1] < DATA2(H) THEN { EX1 = DATA2(H); } ELSE { EX1 = O[1]; } IF PST1 == 1 THEN { PROFIT[0] = (EP1-EX1)*BET_T1; #MessageLog("매수이익2 %.3f %.3f %.3f",EX1,EP1,PROFIT[0]); FOR CNT = 1 TO 99 { PROFIT[CNT] = PROFIT[CNT-1][1]; } ECURVE[0] = ECURVE[0] + PROFIT[0]; FOR CNT = 1 TO 99 { ECURVE[CNT] = ECURVE[CNT-1][1]; } #MessageLog("수익 %.3f",ECURVE[0]); PST1 = 0; } IF PST1[1] <> -1 THEN { PST1 = -1; EP1 = EX1; #MessageLog("매도시점 %.3f",EP1); BET_T1 = BET1; } } } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # 전략1 VAR : ET(0,DATA1), XT(0,DATA1); VAR : TR(0,DATA1), BET(1,DATA1); ET = 140000; XT = 150000; ST = 93000; IF MARKETPOSITION <> 0 AND (DATA2(H)-DATA2(L)) > C*0.005 AND MAXPOSITIONPROFIT < C*0.002 AND STIME[1] < ST AND STIME >= ST THEN { EXITLONG(); EXITSHORT(); TR = 0; } IF STIME[1] < XT AND STIME >= XT THEN { EXITLONG("매수청산",ATMARKET); EXITSHORT("매도청산",ATMARKET); TR = 0; } IF STIME[1] < ET AND STIME >= ET THEN { TR = 1; } IF TR == 1 AND DATA2(H) <> DATA2(L) AND MARKETPOSITION == MARKETPOSITION[1] THEN { BUY("B",ATSTOP,DATA2(H),BET); SELL("S",ATSTOP,DATA2(L),BET); } SETSTOPLOSS(C*0.03,POINTSTOP); #전략2 VAR : ET(0,DATA1), XT(0,DATA1); VAR : TR(0,DATA1), BET(1,DATA1);; ET = 140000; XT = 150000; ST = 93000; IF MARKETPOSITION <> 0 AND (DATA2(H)-DATA2(L)) > C*0.005 AND MAXPOSITIONPROFIT < C*0.002 AND STIME[1] < ST AND STIME >= ST THEN { SELL("S1",ATSTOP,DATA2(L-C*0.015),BET); # 이 부분이 서로 다릅니다. TR = 0; } IF STIME[1] < XT AND STIME >= XT THEN { EXITLONG("매수청산",ATMARKET); TR = 0; } IF STIME[1] < ET AND STIME >= ET THEN { TR = 1; } IF TR == 1 AND DATA2(H) <> DATA2(L) AND MARKETPOSITION == MARKETPOSITION[1] THEN { BUY("B1",ATLIMIT,DATA2(L),BET); }