예스스탁
예스스탁 답변
2021-05-12 11:00:00
안녕하세요
예스스탁입니다.
input : T(1),N(4),조건(2),매수전략(2),매도전략(0),매수기간(10),매도기간(0),매수청산(5),매도청산(0),매수트레일링스탑사용(0),매수트레일링스탑(0),매도트레일링스탑사용(0),매도트레일링스탑(0),매수로스컷위치(0),매도로스컷위치(0),손절(0);
input : 플러스매도청산(0),마이너스매수청산(0),제로매수청산(0),제로매도청산(0),StartTime(070000),EndTime(070000),로스컷횟수(3),매매정지(10),매수포인트(0),매도포인트(0);
var : LL(0),HH(0),최저가(0),최고가(0),cnt(0),sum(0),CL(0),CS(0),Lss(0),S(false),acounting(0),TS_L(0),TS_S(0),first(false),second(false);
var : Tcond(false),S1(0),D1(0),TM(0),b_vv(0),losscut_point(0),hhh(0),lll(0);
Array : VV[20](0);
if 조건 == 1 then
{
Condition1 = L[4]>L[3] and L[3] >L[2] and H>H[1] and H[1]>H[2] and min(L[2],L[1],L) == L[2];
Condition2 = H[4]<H[3] and H[3]<H[2] and L<L[1] and L[1]<L[2] and max(H[2],H[1],H) == H[2] ;
}
else if 조건 ==2 then
{
Condition1 = L[4]>L[2] and H>H[2] and min(L[4],L[3],L[2],L[1],L) == L[2];
Condition2 = H[4]<H[2] and L<L[2] and max(H[4],H[3],H[2],H[1],H) == H[2] ;
}
if ( ( var2 == 0 and C > hh and vv[0] == -1 ) or LL == 0 or (CL !=0 and C > CL) ) and condition1 == true and Condition1[1] == False Then
{
var1 = var1+1;
LL = L[2];
CL = C;
CS = 0;
if 매수트레일링스탑사용 == 1 then
TS_L = L[매수트레일링스탑];
else
TS_L = 0;
if acounting <= 0 then
acounting = 1;
else
acounting = acounting + 1;
VV[0] = 1;
For cnt = 1 to 19
{
VV[cnt] = VV[cnt-1][1];
}
if VV[N-1] != 0 Then
{
sum = 0;
For cnt = 0 to N-1
{
sum = sum + VV[cnt];
}
}
}
else
{
if L < LL Then
{
var1 = 0;
}
}
if (( var1 == 0 and C < ll and vv[0] ==1) or hh == 0 or (CS != 0 and C < CS) ) and condition2 == true and Condition2[1] == False Then
{
var2 = var2+1;
HH = H[2];
CS = C;
CL = 0;
if 매도트레일링스탑사용 == 1 then
TS_S = H[매도트레일링스탑];
else
TS_S = 0;
if acounting >= 0 then
acounting = -1;
else
acounting = acounting - 1;
VV[0] = -1;
For cnt = 1 to 19
{
VV[cnt] = VV[cnt-1][1];
}
if VV[N-1] != 0 Then
{
sum = 0;
For cnt = 0 to N-1
{
sum = sum + VV[cnt];
}
}
}
Else
{
if H > HH Then
{
var2 = 0;
}
}
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
Condition4 = False;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
}
#청산이 이루어질 때마다 아래와 같이 진행
if TotalTrades > TotalTrades[1] Then
{
Condition4 = False;
losscut_point ==0;
TS_L = 0;
TS_S = 0;
#3회 연속손실 여부
if PositionProfit(1) < 0 Then
Lss = Lss+1;
Else
Lss = 0;
if lss >= 로스컷횟수 Then
{
Condition4 = true;
Lss = 0;
}
}
#최근을 제외한 이전 4개 포인트 합
b_vv = vv[4]+vv[3]+vv[2]+vv[1];
#새로운 포인트가 나왔는지 확인하는 수식
if acounting != acounting[1] then
S = true;
else
S = false;
#매매조건
condition5 = sum >= 매수포인트 and vv[0] == 1; #매수조건
condition6 = sum <= 매도포인트 and vv[0] == -1; #매도조건
#돌파매수기준점
hhh = Highest(h,매수기간);
lll = Lowest(l,매도기간);
#거래시간 설정
if T == 0 Then
Condition7 = (sTime > starttime and sTime < Endtime);
Else if T == 1 Then
Condition7 = (sTime > starttime or sTime < Endtime);
#정해진 매매시간에 포지션이 없으면
if condition7 == true Then
{
if 매수전략 !=0 and 매수전략 == 1 then
{
#매수조조건에 만족하고 새로운 포인트가 나왔으며 최근봉 저가와 종가가 다르면
if condition5 == true and S == true and L != C then
{ #3번연속 손실이 발생했는지 확인
if condition4 == false then
{
Buy("1전략매수");
S = False;
if marketposition == 0 then
{
losscut_point = L[매수로스컷위치];
}
}
if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
Buy("1전략매수2");
Condition4 = False;
S = False;
if marketposition == 0 then
{
losscut_point = L[매수로스컷위치];
}
}
}
}
if 매도전략 !=0 and 매도전략 == 1 then
{
#매도조건에 만족하고 새로운 포인트가 나왔으며 최근봉 고가와 종가가 다르면
if condition6 == true and S == true and H != C then
{
#3번연속 손실이 발생했는지 확인
if condition4 == false then
{
sell("1전략매도");
S = False;
if marketposition == 0 then
{
losscut_point = H[매도로스컷위치];
}
}
if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
sell("1전략매도2");
Condition4 = False;
S = False;
if marketposition == 0 then
{
losscut_point = H[매도로스컷위치];
}
}
}
}
#전략2 실행
if 매수전략 != 0 and 매수전략 == 2 then
{
#매수조건을 만족하면
if condition5 == true then
{
#3번연속 손실이 발생했는지 확인
if condition4 == false and C > hhh[1] then
{
buy("돌파매수");
}
if condition4 == true and C > hhh[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
Condition4 = False;
buy("돌파매수2");
}
}
}
if 매도전략 != 0 and 매도전략 == 2 then
{
#매도조건을 만족하면
if condition6 == true Then
{
#3번연속 손실이 발생했는지 확인
if condition4 == false and C < lll[1] Then
{
sell("돌파매도");
}
if condition4 == true and C < lll[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
Condition4 = False;
sell("돌파매도2");
}
}
}
}
#청산조건
if marketposition > 0 then
{
if 매수전략 == 1 then
{ if sum ==0 and b_vv == 2 and 제로매수청산 == 1 Then
ExitLong("0포인트 매수청산");
if vv[0] == -1 and 마이너스매수청산 == 1 Then
Exitlong("'-1' 매도청산");
ExitLong("매수로스컷",atstop,losscut_point);
If 매수트레일링스탑사용 == 1 then
Exitlong("매수트레일링스탑",atstop,TS_L);
}
if 매수전략 == 2 then
{
if 매수청산 != 0 then
ExitLong("돌파매수청산",atstop,Lowest( Low ,매수청산));
}
}
if MarketPosition < 0 then
{
if 매도전략 == 1 then
{ if sum ==0 and b_vv == -2 and 제로매도청산 == 1 Then
Exitshort("0포인트 매도청산");
if vv[0] == 1 and 플러스매도청산 == 1 Then
ExitShort("'+1' 매도청산");
Exitshort("매도로스컷",atstop,losscut_point);
If 매도트레일링스탑사용 == 1 then
Exitshort("매도트레일링스탑",atstop,TS_S);
}
if 매도전략 == 2 then
{
if 매도청산 != 0 then
ExitShort("돌파매도청산",atstop,Highest( High ,매도청산));
}
}
#타겟청산
SetStopLoss( 손절 ,PointStop);
즐거운 하루되세요
> 산이보리 님이 쓴 글입니다.
> 제목 : 수식 수정 부탁드립니다
> 안녕하세요
아래 수식에 로스컷 3회 연속 걸리면 매매정지가 되도록 돼 있습니다
문제점은 '23시 이후 로스컷이 될 경우 경우 익일 오전 7시가 되어야 매매를 재개'한다는 것 입니다
항상 감사합니다
----
input : T(1),N(4),조건(2),매수전략(2),매도전략(0),매수기간(10),매도기간(0),매수청산(5),매도청산(0),매수트레일링스탑사용(0),매수트레일링스탑(0),매도트레일링스탑사용(0),매도트레일링스탑(0),매수로스컷위치(0),매도로스컷위치(0),손절(0);
input : 플러스매도청산(0),마이너스매수청산(0),제로매수청산(0),제로매도청산(0),StartTime(070000),EndTime(070000),로스컷횟수(3),매매정지(10),매수포인트(0),매도포인트(0);
var : LL(0),HH(0),최저가(0),최고가(0),cnt(0),sum(0),CL(0),CS(0),Lss(0),S(false),acounting(0),TS_L(0),TS_S(0),first(false),second(false);
var : Tcond(false),S1(0),D1(0),TM(0),b_vv(0),losscut_point(0),hhh(0),lll(0);
Array : VV[20](0);
if 조건 == 1 then
{
Condition1 = L[4]>L[3] and L[3] >L[2] and H>H[1] and H[1]>H[2] and min(L[2],L[1],L) == L[2];
Condition2 = H[4]<H[3] and H[3]<H[2] and L<L[1] and L[1]<L[2] and max(H[2],H[1],H) == H[2] ;
}
else if 조건 ==2 then
{
Condition1 = L[4]>L[2] and H>H[2] and min(L[4],L[3],L[2],L[1],L) == L[2];
Condition2 = H[4]<H[2] and L<L[2] and max(H[4],H[3],H[2],H[1],H) == H[2] ;
}
if ( ( var2 == 0 and C > hh and vv[0] == -1 ) or LL == 0 or (CL !=0 and C > CL) ) and condition1 == true and Condition1[1] == False Then
{
var1 = var1+1;
LL = L[2];
CL = C;
CS = 0;
if 매수트레일링스탑사용 == 1 then
TS_L = L[매수트레일링스탑];
else
TS_L = 0;
if acounting <= 0 then
acounting = 1;
else
acounting = acounting + 1;
VV[0] = 1;
For cnt = 1 to 19
{
VV[cnt] = VV[cnt-1][1];
}
if VV[N-1] != 0 Then
{
sum = 0;
For cnt = 0 to N-1
{
sum = sum + VV[cnt];
}
}
}
else
{
if L < LL Then
{
var1 = 0;
}
}
if (( var1 == 0 and C < ll and vv[0] ==1) or hh == 0 or (CS != 0 and C < CS) ) and condition2 == true and Condition2[1] == False Then
{
var2 = var2+1;
HH = H[2];
CS = C;
CL = 0;
if 매도트레일링스탑사용 == 1 then
TS_S = H[매도트레일링스탑];
else
TS_S = 0;
if acounting >= 0 then
acounting = -1;
else
acounting = acounting - 1;
VV[0] = -1;
For cnt = 1 to 19
{
VV[cnt] = VV[cnt-1][1];
}
if VV[N-1] != 0 Then
{
sum = 0;
For cnt = 0 to N-1
{
sum = sum + VV[cnt];
}
}
}
Else
{
if H > HH Then
{
var2 = 0;
}
}
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
Condition4 = False;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
}
#청산이 이루어질 때마다 아래와 같이 진행
if TotalTrades > TotalTrades[1] Then
{
Condition4 = False;
losscut_point ==0;
TS_L = 0;
TS_S = 0;
#3회 연속손실 여부
if PositionProfit(1) < 0 Then
Lss = Lss+1;
Else
Lss = 0;
if lss >= 로스컷횟수 Then
{
Condition4 = true;
Lss = 0;
}
}
#최근을 제외한 이전 4개 포인트 합
b_vv = vv[4]+vv[3]+vv[2]+vv[1];
#새로운 포인트가 나왔는지 확인하는 수식
if acounting != acounting[1] then
S = true;
else
S = false;
#매매조건
condition5 = sum >= 매수포인트 and vv[0] == 1; #매수조건
condition6 = sum <= 매도포인트 and vv[0] == -1; #매도조건
#돌파매수기준점
hhh = Highest(h,매수기간);
lll = Lowest(l,매도기간);
#거래시간 설정
if T == 0 Then
Condition7 = (sTime > starttime and sTime < Endtime);
Else if T == 1 Then
Condition7 = (sTime > starttime or sTime < Endtime);
#정해진 매매시간에 포지션이 없으면
if condition7 == true Then
{
if 매수전략 !=0 and 매수전략 == 1 then
{
#매수조조건에 만족하고 새로운 포인트가 나왔으며 최근봉 저가와 종가가 다르면
if condition5 == true and S == true and L != C then
{ #3번연속 손실이 발생했는지 확인
if condition4 == false then
{
Buy("1전략매수");
S = False;
if marketposition == 0 then
{
losscut_point = L[매수로스컷위치];
}
}
if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
Buy("1전략매수2");
S = False;
if marketposition == 0 then
{
losscut_point = L[매수로스컷위치];
}
}
}
}
if 매도전략 !=0 and 매도전략 == 1 then
{
#매도조건에 만족하고 새로운 포인트가 나왔으며 최근봉 고가와 종가가 다르면
if condition6 == true and S == true and H != C then
{ #3번연속 손실이 발생했는지 확인
if condition4 == false then
{
sell("1전략매도");
S = False;
if marketposition == 0 then
{
losscut_point = H[매도로스컷위치];
}
}
if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
sell("1전략매도2");
S = False;
if marketposition == 0 then
{
losscut_point = H[매도로스컷위치];
}
}
}
}
#전략2 실행
if 매수전략 != 0 and 매수전략 == 2 then
{
#매수조건을 만족하면
if condition5 == true then
{ #3번연속 손실이 발생했는지 확인
if condition4 == false and C > hhh[1] then
{
buy("돌파매수");
}
if condition4 == true and C > hhh[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
buy("돌파매수2");
}
}
}
if 매도전략 != 0 and 매도전략 == 2 then
{
#매도조건을 만족하면
if condition6 == true Then
{ #3번연속 손실이 발생했는지 확인
if condition4 == false and C < lll[1] Then
{
sell("돌파매도");
}
if condition4 == true and C < lll[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then
{
sell("돌파매도2");
}
}
}
}
#청산조건
if marketposition > 0 then
{
if 매수전략 == 1 then
{ if sum ==0 and b_vv == 2 and 제로매수청산 == 1 Then
ExitLong("0포인트 매수청산");
if vv[0] == -1 and 마이너스매수청산 == 1 Then
Exitlong("'-1' 매도청산");
ExitLong("매수로스컷",atstop,losscut_point);
If 매수트레일링스탑사용 == 1 then
Exitlong("매수트레일링스탑",atstop,TS_L);
}
if 매수전략 == 2 then
{
if 매수청산 != 0 then
ExitLong("돌파매수청산",atstop,Lowest( Low ,매수청산));
}
}
if MarketPosition < 0 then
{
if 매도전략 == 1 then
{ if sum ==0 and b_vv == -2 and 제로매도청산 == 1 Then
Exitshort("0포인트 매도청산");
if vv[0] == 1 and 플러스매도청산 == 1 Then
ExitShort("'+1' 매도청산");
Exitshort("매도로스컷",atstop,losscut_point);
If 매도트레일링스탑사용 == 1 then
Exitshort("매도트레일링스탑",atstop,TS_S);
}
if 매도전략 == 2 then
{
if 매도청산 != 0 then
ExitShort("돌파매도청산",atstop,Highest( High ,매도청산));
}
}
#타겟청산
SetStopLoss( 손절 ,PointStop);