예스스탁
예스스탁 답변
2021-01-19 13:59:08
안녕하세요
예스스탁입니다.
수식에서 사용하는 봉번호가
index와 data2(index)가 혼재되어 있어 신호가 달랐습니다.
i1 = data2(index);
i1에 data2의 index가 저장되어 있는데
if index > i1 와 같이 기본차트 index 와 비교하는 내용이 있었습니다
수식에서 사용되는 모든 index는 data2(index)로 변경해 드립니다.
input : 거래횟수(20),시작시간(090000);
input : d1(100),ER1(100),EF1(100),X1(99999),CR1(0),CF1(0);
input : d2(100),ER2(100),EF2(100),X2(99999),CR2(0),CF2(0);
var : T1(0,Data1),entry(0,Data1),HH(0,Data1),LL(0,Data1),EH(0,Data1),EL(0,Data1),E1(0,Data1),H1(0,Data1),i1(0,Data1),S1(0,Data1),L1(0,Data1),V1(0,Data1);
var : sum(0,Data1);
sum = Data2(c)+ data3(c);
if Data2((sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간)) Then
{
T1 = TotalTrades;
E1 = 0;
HH = sum;
}
if data2(stime >= 시작시간) then
{
if sum > HH Then
HH = sum;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then
{
if E1 == 0 and sum <= HH-data2(PriceScale)*d1 and sum[1] < HH-data2(PriceScale)*d1 Then
{
E1 = 1;
L1 = sum;
i1 = data2(index);
V1 = HH; //시작점 종가
}
if E1 == 1 and data2(index) > i1 then
{
if sum < L1 Then
L1 = sum;
#고가가 시작봉종가보다 작을 때만 눌림체크
if sum <= V1 and sum >= L1+data2(PriceScale)*ER1 Then
{
E1 = 2;
i1 = data2(index);
S1 = L1;
}
}
//시작점 종가보다 높은 가격이 발생하면 초기화
if E1 >= 1 and sum > V1 Then
{
E1 = 0;
HH = sum;
}
if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF1 and Data2(NextBarSdate == sDate) Then
{
sell("s1");
}
}
if TotalTrades > TotalTrades[1] Then
{
E1 = 0;
HH = sum;
}
if sum > HH Then
HH = sum;
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then
{
if E1 == 0 and sum <= HH-data2(PriceScale)*d2 and sum[1] < HH-data2(PriceScale)*d2 Then
{
E1 = 1;
L1 = sum;
i1 = data2(index);
}
if E1 == 1 and data2(index) > i1 then
{
if sum < L1 Then
L1 = sum;
if sum >= L1+data2(PriceScale)*ER2 Then
{
E1 = 2;
i1 = data2(index);
S1 = L1;
}
}
if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF2 and Data2(NextBarSdate == sDate) Then
{
sell("s2");
E1 = 0;
}
}
if MarketPosition == -1 and IsEntryName("s1") == true Then
{
if entry >= 1 then
{
if CurrentContracts > CurrentContracts[1] Then
{
EL = sum;
E1 = 0;
}
if sum < EL Then
{
EL = sum;
E1 = 0;
}
if E1 == 0 and sum >= EL+data2(PriceScale)*X1 Then
{
E1 = 1;
H1 = sum;
i1 = data2(index);
}
if E1 == 1 and data2(index) > i1 Then
{
if sum > H1 Then
H1 = sum;
if sum <= H1-data2(PriceScale)*CR1 Then
{
E1 = 2;
I1 = data2(index);
S1 = H1;
}
}
if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF1 Then
{
ExitShort("sx1");
E1 = 0;
}
}
}
if MarketPosition == -1 and IsEntryName("s2") == true Then
{
if entry >= 1 then
{
if CurrentContracts > CurrentContracts[1] Then
{
EL = sum;
E1 = 0;
}
if sum < EL Then
{
EL = sum;
E1 = 0;
}
if E1 == 0 and sum >= EL+data2(PriceScale)*X2 Then
{
E1 = 1;
H1 = sum;
i1 = data2(index);
}
if E1 == 1 and data2(index) > i1 Then
{
if sum > H1 Then
H1 = sum;
if sum <= H1-data2(PriceScale)*CR2 Then
{
E1 = 2;
I1 = data2(index);
S1 = H1;
}
}
if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF2 Then
{
ExitShort("sx2");
E1 = 0;
}
}
}
}
즐거운 하루되세요
> 좌오비우오비 님이 쓴 글입니다.
> 제목 : 문의
> 아래는 sell 전용수식입니다.
시뮬레이션한 결과는 첨부파일1
전략실행차트로 세팅한 결과는 첨부파일2
질문
동일한 수식인데
시뮬레이션 결과대로 전략실행차트가 실행되지 않습니다.
살펴주셨으면 합니다.
수정내용은 수식에 # 표시를 해주시면 고맙겠습니다.
***************************************************************************************
input : 거래횟수(20),시작시간(090000);
input : d1(100),ER1(100),EF1(100),X1(99999),CR1(0),CF1(0);
input : d2(100),ER2(100),EF2(100),X2(99999),CR2(0),CF2(0);
var : T1(0,Data1),entry(0,Data1),HH(0,Data1),LL(0,Data1),EH(0,Data1),EL(0,Data1),E1(0,Data1),H1(0,Data1),i1(0,Data1),S1(0,Data1),L1(0,Data1),V1(0,Data1);
var : sum(0,Data1);
sum = Data2(c)+ data3(c);
if Data2((sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간)) Then{
T1 = TotalTrades;
E1 = 0;
HH = sum;
}
if data2(stime >= 시작시간) then{
if sum > HH Then
HH = sum;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if E1 == 0 and sum <= HH-data2(PriceScale)*d1 and sum[1] < HH-data2(PriceScale)*d1 Then{
E1 = 1;
L1 = sum;
i1 = data2(index);
V1 = HH; //시작점 종가
}
if E1 == 1 and index > i1 then{
if sum < L1 Then
L1 = sum;
#고가가 시작봉종가보다 작을 때만 눌림체크
if sum <= V1 and sum >= L1+data2(PriceScale)*ER1 Then{
E1 = 2;
i1 = data2(index);
S1 = L1;
}
}
//시작점 종가보다 높은 가격이 발생하면 초기화
if E1 >= 1 and sum > V1 Then{
E1 = 0;
HH = sum;
}
if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF1 and Data2(NextBarSdate == sDate) Then{
sell("s1");
}
}
if TotalTrades > TotalTrades[1] Then{
E1 = 0;
HH = sum;
}
if sum > HH Then
HH = sum;
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if E1 == 0 and sum <= HH-data2(PriceScale)*d2 and sum[1] < HH-data2(PriceScale)*d2 Then{
E1 = 1;
L1 = sum;
i1 = data2(index);
}
if E1 == 1 and data2(index) > i1 then{
if sum < L1 Then
L1 = sum;
if sum >= L1+data2(PriceScale)*ER2 Then{
E1 = 2;
i1 = data2(index);
S1 = L1;
}
}
if E1 == 2 and data2(index) > i1 and sum <= S1-data2(PriceScale)*EF2 and Data2(NextBarSdate == sDate) Then{
sell("s2");
E1 = 0;
}
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EL = sum;
E1 = 0;
}
if sum < EL Then{
EL = sum;
E1 = 0;
}
if E1 == 0 and sum >= EL+data2(PriceScale)*X1 Then{
E1 = 1;
H1 = sum;
i1 = index;
}
if E1 == 1 and data2(index) > i1 Then{
if sum > H1 Then
H1 = sum;
if sum <= H1-data2(PriceScale)*CR1 Then{
E1 = 2;
I1 = data2(index);
S1 = H1;
}
}
if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF1 Then{
ExitShort("sx1");
E1 = 0;
}
}
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EL = sum;
E1 = 0;
}
if sum < EL Then{
EL = sum;
E1 = 0;
}
if E1 == 0 and sum >= EL+data2(PriceScale)*X2 Then{
E1 = 1;
H1 = sum;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if sum > H1 Then
H1 = sum;
if sum <= H1-data2(PriceScale)*CR2 Then{
E1 = 2;
I1 = data2(index);
S1 = H1;
}
}
if E1 == 2 and data2(index) > i1 and sum >= S1+data2(PriceScale)*CF2 Then{
ExitShort("sx2");
E1 = 0;
}
}
}
}