커뮤니티
시스템식 수정 부탁드립니다.
2015-10-16 08:30:01
128
글번호 91343
아래 시스템은 15분봉상 지표를 3분봉에서 매매를 위한 시스템식입니다.
이것을 일봉상 지표로 적용해 3분봉에서 매매를 하도록 시스템식을 수정 부탁드립니다.
-------------------------------------------------------------------------------
input : 전략식시작일자(20151006), 전략식시작시간(150000), 전략총매수금액(100);
input : 매수위치1차(1), 매수위치2차(2), 매수위치3차(3);
input : 매도위치1차(1.5), 매도위치2차(2), 매도위치3차(2.5);
input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50);
input : 매도비중1차(20), 매도비중2차(30), 매도비중3차(50);
input : 전략식진입횟수(1);
input : 최종손절위치(4);
input : Period(384);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
Array : HH[400](0),LL[499](0);
TF = TimeToMinutes(stime)%15;
if date != date[1] or (date == date and TF < TF[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 399{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[Period] > 0 Then{
var1 = HH[0];
var2 = LL[0];
var11 = HH[1];
var12 = LL[1];
for cnt = 0 to Period-1{
if HH[cnt] > var1 Then
var1 = HH[cnt];
if HH[cnt+1] > var11 Then
var11 = HH[cnt+1];
if LL[cnt] < var2 Then
var2 = LL[cnt];
if LL[cnt+1] < var21 Then
var21 = LL[cnt+1];
}
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 and TotalTrades < 전략식진입횟수 then{
if MarketPosition == 0 and stime >= 전략식시작시간 and
((stime < 120000 and DayOpen > DayClose(1)*0.985) or (stime >= 120000 and C > V2)) and EntryCond1 == false Then{
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
if MarketPosition == 1 then{
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and L >= var1-value*(매수위치2차+1) and EntryCond2 == false Then
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
if MaxEntries == 2 and L >= var1-value*(매수위치3차+1) and EntryCond3 == false Then
buy("3차매수",atlimit,var1-value*(매수위치3차+1),Floor((전략총매수금액*10000*(매수비중3차/100))/C));
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
if LatestExitName(0) == "3차매도" Then
Condition3 = true;
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차,"",Floor(MaxContracts*(매도비중2차/100)),1);
if Condition3 == false then
exitlong("3차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치3차);
exitlong("최종손절",AtStop,var1-value*(최종손절위치+1));
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
}
}
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수" or LatestEntryName(0) == "1차매수.") Then
entrycond1 = true;
if MarketPosition == 1 and LatestEntryName(0) == "2차매수" Then
entrycond2 = true;
if MarketPosition == 1 and LatestEntryName(0) == "3차매수" Then
entrycond3 = true;
if MarketPosition == 0 Then{
entrycond1 = false;
entrycond2 = false;
entrycond3 = false;
}
답변 1
예스스탁 예스스탁 답변
2015-10-16 15:06:22
안녕하세요
예스스탁입니다.
분주기 이하의 차트에는 내부적으로
차트의 첫봉+99일치의 일봉데이터값이 제공됩니다.
지정한 Period일수만큼 데이터가 없으면 신호가 발생하지 않습니다.
input : 전략식시작일자(20151006), 전략식시작시간(150000), 전략총매수금액(100);
input : 매수위치1차(1), 매수위치2차(2), 매수위치3차(3);
input : 매도위치1차(1.5), 매도위치2차(2), 매도위치3차(2.5);
input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50);
input : 매도비중1차(20), 매도비중2차(30), 매도비중3차(50);
input : 전략식진입횟수(1);
input : 최종손절위치(4);
input : Period(384);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
if dayhigh(Period) > 0 Then{
var1 = dayhigh(0);
var2 = daylow(0);
var11 = dayhigh(1);
var12 = daylow(1);
for cnt = 0 to Period-1{
if DayHigh(cnt) > var1 Then
var1 = DayHigh(cnt);
if dayhigh(cnt+1) > var11 Then
var11 = dayhigh(cnt+1);
if daylow(cnt) < var2 Then
var2 = daylow(cnt);
if daylow(cnt+1) < var21 Then
var21 = daylow(cnt+1);
}
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 and TotalTrades < 전략식진입횟수 then{
if MarketPosition == 0 and stime >= 전략식시작시간 and
((stime < 120000 and DayOpen > DayClose(1)*0.985) or (stime >= 120000 and C > V2)) and EntryCond1 == false Then{
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
if MarketPosition == 1 then{
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and L >= var1-value*(매수위치2차+1) and EntryCond2 == false Then
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
if MaxEntries == 2 and L >= var1-value*(매수위치3차+1) and EntryCond3 == false Then
buy("3차매수",atlimit,var1-value*(매수위치3차+1),Floor((전략총매수금액*10000*(매수비중3차/100))/C));
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
if LatestExitName(0) == "3차매도" Then
Condition3 = true;
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차,"",Floor(MaxContracts*(매도비중2차/100)),1);
if Condition3 == false then
exitlong("3차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치3차);
exitlong("최종손절",AtStop,var1-value*(최종손절위치+1));
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
}
}
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수" or LatestEntryName(0) == "1차매수.") Then
entrycond1 = true;
if MarketPosition == 1 and LatestEntryName(0) == "2차매수" Then
entrycond2 = true;
if MarketPosition == 1 and LatestEntryName(0) == "3차매수" Then
entrycond3 = true;
if MarketPosition == 0 Then{
entrycond1 = false;
entrycond2 = false;
entrycond3 = false;
}
즐거운 하루되세요
> 종풍화성 님이 쓴 글입니다.
> 제목 : 시스템식 수정 부탁드립니다.
> 아래 시스템은 15분봉상 지표를 3분봉에서 매매를 위한 시스템식입니다.
이것을 일봉상 지표로 적용해 3분봉에서 매매를 하도록 시스템식을 수정 부탁드립니다.
-------------------------------------------------------------------------------
input : 전략식시작일자(20151006), 전략식시작시간(150000), 전략총매수금액(100);
input : 매수위치1차(1), 매수위치2차(2), 매수위치3차(3);
input : 매도위치1차(1.5), 매도위치2차(2), 매도위치3차(2.5);
input : 매수비중1차(20), 매수비중2차(30), 매수비중3차(50);
input : 매도비중1차(20), 매도비중2차(30), 매도비중3차(50);
input : 전략식진입횟수(1);
input : 최종손절위치(4);
input : Period(384);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
Array : HH[400](0),LL[499](0);
TF = TimeToMinutes(stime)%15;
if date != date[1] or (date == date and TF < TF[1]) Then{
HH[0] = H;
LL[0] = L;
for cnt = 1 to 399{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
if HH[Period] > 0 Then{
var1 = HH[0];
var2 = LL[0];
var11 = HH[1];
var12 = LL[1];
for cnt = 0 to Period-1{
if HH[cnt] > var1 Then
var1 = HH[cnt];
if HH[cnt+1] > var11 Then
var11 = HH[cnt+1];
if LL[cnt] < var2 Then
var2 = LL[cnt];
if LL[cnt+1] < var21 Then
var21 = LL[cnt+1];
}
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 and TotalTrades < 전략식진입횟수 then{
if MarketPosition == 0 and stime >= 전략식시작시간 and
((stime < 120000 and DayOpen > DayClose(1)*0.985) or (stime >= 120000 and C > V2)) and EntryCond1 == false Then{
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
if MarketPosition == 1 then{
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and L >= var1-value*(매수위치2차+1) and EntryCond2 == false Then
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
if MaxEntries == 2 and L >= var1-value*(매수위치3차+1) and EntryCond3 == false Then
buy("3차매수",atlimit,var1-value*(매수위치3차+1),Floor((전략총매수금액*10000*(매수비중3차/100))/C));
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
if LatestExitName(0) == "3차매도" Then
Condition3 = true;
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차,"",Floor(MaxContracts*(매도비중2차/100)),1);
if Condition3 == false then
exitlong("3차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치3차);
exitlong("최종손절",AtStop,var1-value*(최종손절위치+1));
}
Else{
Condition1 = false;
Condition2 = false;
Condition3 = false;
}
}
}
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수" or LatestEntryName(0) == "1차매수.") Then
entrycond1 = true;
if MarketPosition == 1 and LatestEntryName(0) == "2차매수" Then
entrycond2 = true;
if MarketPosition == 1 and LatestEntryName(0) == "3차매수" Then
entrycond3 = true;
if MarketPosition == 0 Then{
entrycond1 = false;
entrycond2 = false;
entrycond3 = false;
}
다음글
이전글