커뮤니티
시스템식 다시 문의드립니다.
2016-05-18 09:07:05
162
글번호 98202
안녕하세요.
도와주신 수식 잘 테스트해보고 있습니다.
감사합니다!
1.
대우건설 3월 3일부터 솔브레인 2월 22부터 새로 갱신이 안됩니다.
이것도 적용이 되게 수정 부탁드립니다
2.
엑셀로 신고가와 폭, 1차매수 가격을 프린트 명령어를 이용해 저장해 보고 싶은데, 방법도 부탁드립니다.
3. 60분봉으로도 아래의 식을 적용해 보고 싶습니다.
모든 내용은 다 같습니다.
분봉에서 20일선을 적용해서 시스템식이 가능할지요?
----------------------------------------------------------------------------
input : 시작날짜(20160108),매수1차(1000000),매수2차(1500000),매수3차(2000000);
var : T(0),HH(0),Price1(0),Price2(0),Price3(0),diff(0);
var1 = ma(C,20);
if sdate >= 시작날짜 then{
#이평 데드되었다가 골드되면 최고폭저장변수는 0으로 초기화
if crossup(C,var1) Then{
T = 1;
HH = 0;
}
if CrossDown(C,var1) Then{
T = -1;
Condition1 = false;
}
#20이평 위에서만 신고가 갱신시 최대폭을 구함
if T == 1 and H > Highest(H,20)[1] Then{
#최근 폭
diff = HH;
Condition1 = true;
#이평위에서 최대폭과 매수가격
if H-L > HH Then{
HH = H-L;
}
Price1 = H-HH*1;
Price2 = H-HH*2;
Price3 = H-HH*3;
}
if MarketPosition == 1 Then
Condition1 = false;
#가격이 하락해 1차매수가격 이하이면 매수
if MarketPosition == 0 and Price1 > 0 and Condition1 == true Then
buy("b1",atlimit,Price1,Floor(매수1차/C));
#가격이 하락해 2차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 1 and Price2 > 0 Then
buy("b2",atlimit,Price2,Floor(매수2차/C));
#가격이 하락해 3차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 2 and Price3 > 0 Then
buy("b3",atlimit,Price3,Floor(매수3차/C));
if MarketPosition == 1 Then{
#진입이후로 한번도 20선 아래로 내려가지 않은경우
#진입이후 최저가에서 폭만큼 상승하면 청산
if countif(C<var1,BarsSinceEntry) == 0 Then
ExitLong("bx1",atlimit,lowest(L,BarsSinceEntry)+diff);
#진입이후로 20선 아래로 한번이상 내려간 경우
#진입이후 최저가에서 폭의 절반만큼 상승하면 청산
if countif(C<var1,BarsSinceEntry) == 0 Then
ExitLong("bx2",atlimit,lowest(L,BarsSinceEntry)+diff*0.5);
#일괄매도 = 현재 20일 신고가 이후 최저가 + 최대폭(75%)
ExitLong("일괄매도",atlimit,lowest(L,BarsSinceEntry)+diff*0.75);
}
}
답변 1
예스스탁 예스스탁 답변
2016-05-19 11:44:26
안녕하세요
예스스탁입니다.
1
현재 신고가를 갱신을
현재봉 고가와 한봉전 기준20개봉 최고가와 비교해서 조건판단을 합니다.
현재봉 고가가 현재봉포함 20개봉 최고가와 같으면 산출하게 변경했습니다.
input : 시작날짜(20160108),매수1차(1000000),매수2차(1500000),매수3차(2000000);
var : T(0),HH(0),Price1(0),Price2(0),Price3(0),diff(0);
var1 = ma(C,20);
if sdate >= 시작날짜 then{
#이평 데드되었다가 골드되면 최고폭저장변수는 0으로 초기화
if crossup(C,var1) Then{
T = 1;
HH = 0;
}
if CrossDown(C,var1) Then{
T = -1;
Condition1 = false;
}
#20이평 위에서만 신고가 갱신시 최대폭을 구함
if T == 1 and H == Highest(H,20) Then{
#최근 폭
diff = HH;
Condition1 = true;
#이평위에서 최대폭과 매수가격
if H-L > HH Then{
HH = H-L;
}
Price1 = H-HH*1;
Price2 = H-HH*2;
Price3 = H-HH*3;
}
if MarketPosition == 1 Then
Condition1 = false;
#가격이 하락해 1차매수가격 이하이면 매수
if MarketPosition == 0 and Price1 > 0 and L >= Price1 Then
buy("b1",atlimit,Price1,Floor(매수1차/C));
#가격이 하락해 2차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 1 and Price2 > 0 Then
buy("b2",atlimit,Price2,Floor(매수2차/C));
#가격이 하락해 3차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 2 and Price3 > 0 Then
buy("b3",atlimit,Price3,Floor(매수3차/C));
if MarketPosition == 1 Then{
#진입이후로 한번도 20선 아래로 내려가지 않은경우
#진입이후 최저가에서 폭만큼 상승하면 청산
if countif(C<var1,BarsSinceEntry) == 0 Then
ExitLong("bx1",atlimit,lowest(L,BarsSinceEntry)+diff);
#진입이후로 20선 아래로 한번이상 내려간 경우
#진입이후 최저가에서 폭의 절반만큼 상승하면 청산
if countif(C<var1,BarsSinceEntry) == 0 Then
ExitLong("bx2",atlimit,lowest(L,BarsSinceEntry)+diff*0.5);
#일괄매도 = 현재 20일 신고가 이후 최저가 + 최대폭(75%)
ExitLong("일괄매도",atlimit,lowest(L,BarsSinceEntry)+diff*0.75);
}
}
print("data.csv",",신고가,%.f,폭,%.2f,1차매수가,%.f",H,HH,H-HH*1);
2.
값을 추출하는 함수는 print함수입니다.
print함수로 csv파일로 추출되게 추가했습니다
엑셀파일 자체로 추출은 가능하지 않고
csv파일로 추출하고 해당 파일 클릭하시면 자동으로 엑셀에서 읽습니다.
데이터의 추출은 시뮬레이션 차트에서는 가능하지 않고 전략실행차트에서만 가능합니다.
해당 함수사용에 대한 아래 도움말 참고하시기 바랍니다.
https://www.yesstock.com/YesTrader/YesLanguage/YesLanguage_help/4_3.htm
3
20일 이평을 일봉이평으로 계산하게 수정했습니다.
input : P(20),시작날짜(20160108),매수1차(1000000),매수2차(1500000),매수3차(2000000);
var : T(0),HH(0),Price1(0),Price2(0),Price3(0),diff(0),sum(0),mav(0),cnt(0);
sum = 0;
for cnt = 0 to P-1{
sum = sum+DayClose(cnt);
}
mav = sum/P;
if sdate >= 시작날짜 then{
#이평 데드되었다가 골드되면 최고폭저장변수는 0으로 초기화
if crossup(C,mav) Then{
T = 1;
HH = 0;
}
if CrossDown(C,mav) Then{
T = -1;
Condition1 = false;
}
#20이평 위에서만 신고가 갱신시 최대폭을 구함
if T == 1 and H == Highest(H,20) Then{
#최근 폭
diff = HH;
Condition1 = true;
#이평위에서 최대폭과 매수가격
if H-L > HH Then{
HH = H-L;
}
Price1 = H-HH*1;
Price2 = H-HH*2;
Price3 = H-HH*3;
}
if MarketPosition == 1 Then
Condition1 = false;
#가격이 하락해 1차매수가격 이하이면 매수
if MarketPosition == 0 and Price1 > 0 and L >= Price1 Then
buy("b1",atlimit,Price1,Floor(매수1차/C));
#가격이 하락해 2차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 1 and Price2 > 0 Then
buy("b2",atlimit,Price2,Floor(매수2차/C));
#가격이 하락해 3차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 2 and Price3 > 0 Then
buy("b3",atlimit,Price3,Floor(매수3차/C));
if MarketPosition == 1 Then{
#진입이후로 한번도 20선 아래로 내려가지 않은경우
#진입이후 최저가에서 폭만큼 상승하면 청산
if countif(C<mav,BarsSinceEntry) == 0 Then
ExitLong("bx1",atlimit,lowest(L,BarsSinceEntry)+diff);
#진입이후로 20선 아래로 한번이상 내려간 경우
#진입이후 최저가에서 폭의 절반만큼 상승하면 청산
if countif(C<mav,BarsSinceEntry) == 0 Then
ExitLong("bx2",atlimit,lowest(L,BarsSinceEntry)+diff*0.5);
#일괄매도 = 현재 20일 신고가 이후 최저가 + 최대폭(75%)
ExitLong("일괄매도",atlimit,lowest(L,BarsSinceEntry)+diff*0.75);
}
}
print("data.csv",",신고가,%.f,폭,%.2f,1차매수가,%.f",H,HH,H-HH*1);
즐거운 하루되세요
> 단순점진일관 님이 쓴 글입니다.
> 제목 : 시스템식 다시 문의드립니다.
> 안녕하세요.
도와주신 수식 잘 테스트해보고 있습니다.
감사합니다!
1.
대우건설 3월 3일부터 솔브레인 2월 22부터 새로 갱신이 안됩니다.
이것도 적용이 되게 수정 부탁드립니다
2.
엑셀로 신고가와 폭, 1차매수 가격을 프린트 명령어를 이용해 저장해 보고 싶은데, 방법도 부탁드립니다.
3. 60분봉으로도 아래의 식을 적용해 보고 싶습니다.
모든 내용은 다 같습니다.
분봉에서 20일선을 적용해서 시스템식이 가능할지요?
----------------------------------------------------------------------------
input : 시작날짜(20160108),매수1차(1000000),매수2차(1500000),매수3차(2000000);
var : T(0),HH(0),Price1(0),Price2(0),Price3(0),diff(0);
var1 = ma(C,20);
if sdate >= 시작날짜 then{
#이평 데드되었다가 골드되면 최고폭저장변수는 0으로 초기화
if crossup(C,var1) Then{
T = 1;
HH = 0;
}
if CrossDown(C,var1) Then{
T = -1;
Condition1 = false;
}
#20이평 위에서만 신고가 갱신시 최대폭을 구함
if T == 1 and H > Highest(H,20)[1] Then{
#최근 폭
diff = HH;
Condition1 = true;
#이평위에서 최대폭과 매수가격
if H-L > HH Then{
HH = H-L;
}
Price1 = H-HH*1;
Price2 = H-HH*2;
Price3 = H-HH*3;
}
if MarketPosition == 1 Then
Condition1 = false;
#가격이 하락해 1차매수가격 이하이면 매수
if MarketPosition == 0 and Price1 > 0 and Condition1 == true Then
buy("b1",atlimit,Price1,Floor(매수1차/C));
#가격이 하락해 2차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 1 and Price2 > 0 Then
buy("b2",atlimit,Price2,Floor(매수2차/C));
#가격이 하락해 3차매수가격 이하이면 매수
if MarketPosition == 1 and MaxEntries == 2 and Price3 > 0 Then
buy("b3",atlimit,Price3,Floor(매수3차/C));
if MarketPosition == 1 Then{
#진입이후로 한번도 20선 아래로 내려가지 않은경우
#진입이후 최저가에서 폭만큼 상승하면 청산
if countif(C<var1,BarsSinceEntry) == 0 Then
ExitLong("bx1",atlimit,lowest(L,BarsSinceEntry)+diff);
#진입이후로 20선 아래로 한번이상 내려간 경우
#진입이후 최저가에서 폭의 절반만큼 상승하면 청산
if countif(C<var1,BarsSinceEntry) == 0 Then
ExitLong("bx2",atlimit,lowest(L,BarsSinceEntry)+diff*0.5);
#일괄매도 = 현재 20일 신고가 이후 최저가 + 최대폭(75%)
ExitLong("일괄매도",atlimit,lowest(L,BarsSinceEntry)+diff*0.75);
}
}