커뮤니티
도움 부탁드립니다.
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);
}