커뮤니티
시스템 수정부탁드립니다.
2017-03-07 13:41:01
135
글번호 107524
항상 도움 주셔서 감사합니다.
아래 시스템식에서 라인에 닿을때 청산이 안됩니다.
[테스트 환경 오일 4월물 - 5분봉]
//========================================================
// 추세선 지정하여 매매하기
//========================================================
input : 추세선시작일1(20170303),추세선시작시간1(220000); //추세선1-저가
input : 추세선종료일1(20170306),추세선종료시간1(171000); //추세선1-저가2
input : 추세선시작일2(20170306),추세선시작시간2(081000); //추세선2-고가
input : 추세선종료일2(20170306),추세선종료시간2(185000); //추세선2-고가2
input : X1(0.72),X11(-0.72),X2(0.42),X22(-0.42) ;// 추세선 이동
input : loss(10),profit(30),Tp(10),Ts(5); // 수익,손절,트레일링스탑
var : TL1(0),TLL1(0),TLLL1(0),T1(0); //추세선1-지지
var : TL2(0),TLL2(0),TLLL2(0),T2(0); //추세선2-저항
##### 추세선 그리기 #####
// 추세선1 - 저가
if sdate == 추세선시작일1 and time == 추세선시작시간1 Then{
T1 = 1;
var1 = L;
}
if T1 == 1 and sdate == 추세선종료일1 and time == 추세선종료시간1 Then{
var2 = L;
TL1 = TL_New(추세선시작일1,추세선시작시간1,var1,추세선종료일1,추세선종료시간1,var2);
TL_SetExtLeft(TL1,true);
TL_SetExtRight(TL1,true);
TL_SetColor(TL1,BLUE) ;
T1 = 2;
TLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x1,추세선종료일1,추세선종료시간1,var2+x1); //추세선 복사
TL_SetExtLeft(TLL1,true);
TL_SetExtRight(TLL1,true);
TL_SetColor(TLL1,BLUE) ;
TLLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x11,추세선종료일1,추세선종료시간1,var2+x11); //추세선 복사
TL_SetExtLeft(TLLL1,true);
TL_SetExtRight(TLLL1,true);
TL_SetColor(TLLL1,BLUE) ;
}
// 추세선2 - 고가
if sdate == 추세선시작일2 and time == 추세선시작시간2 Then{
T2 = 1;
var3 = H;
}
if T2 == 1 and sdate == 추세선종료일2 and time == 추세선종료시간2 Then{
var4 = H;
TL2 = TL_New(추세선시작일2,추세선시작시간2,var3,추세선종료일2,추세선종료시간2,var4);
TL_SetExtLeft(TL2,true);
TL_SetExtRight(TL2,true);
TL_SetColor(TL2,RED) ;
T2 = 2;
TLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x2,추세선종료일2,추세선종료시간2,var4+x2);
TL_SetExtLeft(TLL2,true);
TL_SetExtRight(TLL2,true);
TL_SetColor(TLL2,RED) ;
TLLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x22,추세선종료일2,추세선종료시간2,var4+x22);
TL_SetExtLeft(TLLL2,true);
TL_SetExtRight(TLLL2,true);
TL_SetColor(TLLL2,RED) ;
}
##### 시스템매매 #####
// 진입 시스템
// 매매시간 시작
if sdate >= 추세선종료일1 and stime >= 추세선종료시간1 then {
// 하락
if T1 == 2 and MarketPosition == 0 then { //and s_line1 > -1 and s_line4 < 0 then{
if C < TL_GetValue(TL1,sdate,stime) and C[1] > TL_GetValue(TL1,sdate[1],stime[1]) Then
sell("S");
}
// 상승
if T2 == 2 and MarketPosition == 0 then { //and s_line1 < 1 and s_line4 > 0 then{
if C > TL_GetValue(TL2,sdate,stime) and C[1] < TL_GetValue(TL2,sdate[1],stime[1]) Then
Buy("B");
}
// 청산 시스템
// 매도청산
// X1,X2에 닿을 경우
if MarketPosition == -1 then{
if (L <= TL_GetValue(TLLL1,sdate,stime) and L[1] > TL_GetValue(TLLL1,sdate[1],stime[1]))
or (L <= TL_GetValue(TLLL2,sdate,stime) and L[1] > TL_GetValue(TLLL2,sdate[1],stime[1])) Then
ExitShort("SX");
}
// 매수청산
// // X11,X22에 닿을 경우
if MarketPosition == 1 then{
if (H >= TL_GetValue(TLL1,sdate,stime) and H[1] < TL_GetValue(TLL1,sdate[1],stime[1]))
or (H >= TL_GetValue(TLL2,sdate,stime) and H[1] < TL_GetValue(TLL2,sdate[1],stime[1])) Then
ExitLong("BX");
}
// 매매시간종료
}
// 당일 청산
if stime == 065000 or (stime > 065000 and stime[1] < 065000) Then{
if MarketPosition == 1 Then
exitlong("BDF");
if MarketPosition == -1 Then
ExitShort("SDF");
}
##### 스탑로스 #####
//SetStopProfittarget(Profit*PriceScale,PointStop);
SetStopLoss(loss*PriceScale,PointStop);
//SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop);
문1) X1추세선 라인이나 X2 추세선 라인 또는 X11 추세선 라인이나 X22 추세선 라인에
고가나 저가가 닿을 경우 청산하고 싶은데 청산이 안됩니다.
코딩 수정 및 점검 부탁드립니다.
문2) 추세선 라인 옆에 X1,X11 등의 추세선의 이름을 차트에 표시하고 싶습니다.
도움 부탁드립니다.
답변 1
예스스탁 예스스탁 답변
2017-03-07 14:59:08
안녕하세요
예스스탁입니다
진입청산식을
sdate >= 추세선종료일1 and stime >= 추세선종료시간1
위 조건으로 지정하므로 지정한 날짜 이후에
지정한 시간 이후에만 신호가 발생합니다.
input : 추세선종료일1(20170306),추세선종료시간1(171000); //추세선1-저가2
if sdate >= 추세선종료일1 and stime >= 추세선종료시간1 then
plot1(1);
Else
plot1(0);
위 내용 지표로 작성해 적용해 보시면
해당 if문이 만족하는 봉이 어떤 시간의 봉인지 보실수 있습니다.
3월 6일 이후에 매일 17시10분 이후에만 신호가 발생하라는 내용이 됩니다.
T1변수로 지정한 날짜와 시간이 지나면 값이 2로 변경되므로
T1이 2가 된 이후에 신호가 발생하게 처리하시면 됩니다.
즉 기존수식이 시간 제한때문에 나오지 않은 것입니다.
input : 추세선시작일1(20170303),추세선시작시간1(220000); //추세선1-저가
input : 추세선종료일1(20170306),추세선종료시간1(171000); //추세선1-저가2
input : 추세선시작일2(20170306),추세선시작시간2(081000); //추세선2-고가
input : 추세선종료일2(20170306),추세선종료시간2(185000); //추세선2-고가2
input : X1(0.72),X11(-0.72),X2(0.42),X22(-0.42) ;// 추세선 이동
input : loss(10),profit(30),Tp(10),Ts(5); // 수익,손절,트레일링스탑
var : TL1(0),TLL1(0),TLLL1(0),T1(0); //추세선1-지지
var : TL2(0),TLL2(0),TLLL2(0),T2(0); //추세선2-저항
##### 추세선 그리기 #####
// 추세선1 - 저가
if sdate == 추세선시작일1 and time == 추세선시작시간1 Then{
T1 = 1;
var1 = L;
}
if T1 == 1 and sdate == 추세선종료일1 and time == 추세선종료시간1 Then{
var2 = L;
TL1 = TL_New(추세선시작일1,추세선시작시간1,var1,추세선종료일1,추세선종료시간1,var2);
TL_SetExtLeft(TL1,true);
TL_SetExtRight(TL1,true);
TL_SetColor(TL1,BLUE) ;
T1 = 2;
TLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x1,추세선종료일1,추세선종료시간1,var2+x1); //추세선 복사
TL_SetExtLeft(TLL1,true);
TL_SetExtRight(TLL1,true);
TL_SetColor(TLL1,BLUE) ;
TLLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x11,추세선종료일1,추세선종료시간1,var2+x11); //추세선 복사
TL_SetExtLeft(TLLL1,true);
TL_SetExtRight(TLLL1,true);
TL_SetColor(TLLL1,BLUE) ;
}
// 추세선2 - 고가
if sdate == 추세선시작일2 and time == 추세선시작시간2 Then{
T2 = 1;
var3 = H;
}
if T2 == 1 and sdate == 추세선종료일2 and time == 추세선종료시간2 Then{
var4 = H;
TL2 = TL_New(추세선시작일2,추세선시작시간2,var3,추세선종료일2,추세선종료시간2,var4);
TL_SetExtLeft(TL2,true);
TL_SetExtRight(TL2,true);
TL_SetColor(TL2,RED) ;
T2 = 2;
TLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x2,추세선종료일2,추세선종료시간2,var4+x2);
TL_SetExtLeft(TLL2,true);
TL_SetExtRight(TLL2,true);
TL_SetColor(TLL2,RED) ;
TLLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x22,추세선종료일2,추세선종료시간2,var4+x22);
TL_SetExtLeft(TLLL2,true);
TL_SetExtRight(TLLL2,true);
TL_SetColor(TLLL2,RED) ;
}
var : tx1(0),tx2(0),tx3(0),tx4(0),tx5(0),tx6(0);
Text_Delete(Tx1);
if TL_GetValue(TL1,sdate,stime) > 0 Then{
tx1 = Text_New(sdate,stime,TL_GetValue(TL1,sdate,stime),"TL1");
}
Text_Delete(Tx2);
if TL_GetValue(TLL1,sdate,stime) > 0 Then{
tx2 = Text_New(sdate,stime,TL_GetValue(TLL1,sdate,stime),"TLL1");
}
Text_Delete(Tx3);
if TL_GetValue(TLLL1,sdate,stime) > 0 Then{
tx3 = Text_New(sdate,stime,TL_GetValue(TLLL1,sdate,stime),"TLLL1");
}
Text_Delete(Tx4);
if TL_GetValue(TL2,sdate,stime) > 0 Then{
tx4 = Text_New(sdate,stime,TL_GetValue(TL2,sdate,stime),"TL2");
}
Text_Delete(Tx5);
if TL_GetValue(TLL2,sdate,stime) > 0 Then{
tx5 = Text_New(sdate,stime,TL_GetValue(TLL2,sdate,stime),"TLL2");
}
Text_Delete(Tx6);
if TL_GetValue(TLLL2,sdate,stime) > 0 Then{
tx6 = Text_New(sdate,stime,TL_GetValue(TLLL2,sdate,stime),"TLLL2");
}
##### 시스템매매 #####
// 진입 시스템
// 매매시간 시작
if T1 == 2 then {
// 하락
if T1 == 2 and MarketPosition == 0 then { //and s_line1 > -1 and s_line4 < 0 then{
if C < TL_GetValue(TL1,sdate,stime) and C[1] > TL_GetValue(TL1,sdate[1],stime[1]) Then
sell("S");
}
// 상승
if T2 == 2 and MarketPosition == 0 then { //and s_line1 < 1 and s_line4 > 0 then{
if C > TL_GetValue(TL2,sdate,stime) and C[1] < TL_GetValue(TL2,sdate[1],stime[1]) Then
Buy("B");
}
// 청산 시스템
// 매도청산
// X1,X2에 닿을 경우
if MarketPosition == -1 then{
if (L <= TL_GetValue(TLLL1,sdate,stime) and L[1] > TL_GetValue(TLLL1,sdate[1],stime[1]))
or (L <= TL_GetValue(TLLL2,sdate,stime) and L[1] > TL_GetValue(TLLL2,sdate[1],stime[1])) Then
ExitShort("SX");
}
// 매수청산
// // X11,X22에 닿을 경우
if MarketPosition == 1 then{
if (H >= TL_GetValue(TLL1,sdate,stime) and H[1] < TL_GetValue(TLL1,sdate[1],stime[1]))
or (H >= TL_GetValue(TLL2,sdate,stime) and H[1] < TL_GetValue(TLL2,sdate[1],stime[1])) Then
ExitLong("BX");
}
}
// 당일 청산
if stime == 065000 or (stime > 065000 and stime[1] < 065000) Then{
if MarketPosition == 1 Then
exitlong("BDF");
if MarketPosition == -1 Then
ExitShort("SDF");
}
##### 스탑로스 #####
//SetStopProfittarget(Profit*PriceScale,PointStop);
SetStopLoss(loss*PriceScale,PointStop);
//SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop);
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 시스템 수정부탁드립니다.
> 항상 도움 주셔서 감사합니다.
아래 시스템식에서 라인에 닿을때 청산이 안됩니다.
[테스트 환경 오일 4월물 - 5분봉]
//========================================================
// 추세선 지정하여 매매하기
//========================================================
input : 추세선시작일1(20170303),추세선시작시간1(220000); //추세선1-저가
input : 추세선종료일1(20170306),추세선종료시간1(171000); //추세선1-저가2
input : 추세선시작일2(20170306),추세선시작시간2(081000); //추세선2-고가
input : 추세선종료일2(20170306),추세선종료시간2(185000); //추세선2-고가2
input : X1(0.72),X11(-0.72),X2(0.42),X22(-0.42) ;// 추세선 이동
input : loss(10),profit(30),Tp(10),Ts(5); // 수익,손절,트레일링스탑
var : TL1(0),TLL1(0),TLLL1(0),T1(0); //추세선1-지지
var : TL2(0),TLL2(0),TLLL2(0),T2(0); //추세선2-저항
##### 추세선 그리기 #####
// 추세선1 - 저가
if sdate == 추세선시작일1 and time == 추세선시작시간1 Then{
T1 = 1;
var1 = L;
}
if T1 == 1 and sdate == 추세선종료일1 and time == 추세선종료시간1 Then{
var2 = L;
TL1 = TL_New(추세선시작일1,추세선시작시간1,var1,추세선종료일1,추세선종료시간1,var2);
TL_SetExtLeft(TL1,true);
TL_SetExtRight(TL1,true);
TL_SetColor(TL1,BLUE) ;
T1 = 2;
TLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x1,추세선종료일1,추세선종료시간1,var2+x1); //추세선 복사
TL_SetExtLeft(TLL1,true);
TL_SetExtRight(TLL1,true);
TL_SetColor(TLL1,BLUE) ;
TLLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x11,추세선종료일1,추세선종료시간1,var2+x11); //추세선 복사
TL_SetExtLeft(TLLL1,true);
TL_SetExtRight(TLLL1,true);
TL_SetColor(TLLL1,BLUE) ;
}
// 추세선2 - 고가
if sdate == 추세선시작일2 and time == 추세선시작시간2 Then{
T2 = 1;
var3 = H;
}
if T2 == 1 and sdate == 추세선종료일2 and time == 추세선종료시간2 Then{
var4 = H;
TL2 = TL_New(추세선시작일2,추세선시작시간2,var3,추세선종료일2,추세선종료시간2,var4);
TL_SetExtLeft(TL2,true);
TL_SetExtRight(TL2,true);
TL_SetColor(TL2,RED) ;
T2 = 2;
TLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x2,추세선종료일2,추세선종료시간2,var4+x2);
TL_SetExtLeft(TLL2,true);
TL_SetExtRight(TLL2,true);
TL_SetColor(TLL2,RED) ;
TLLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x22,추세선종료일2,추세선종료시간2,var4+x22);
TL_SetExtLeft(TLLL2,true);
TL_SetExtRight(TLLL2,true);
TL_SetColor(TLLL2,RED) ;
}
##### 시스템매매 #####
// 진입 시스템
// 매매시간 시작
if sdate >= 추세선종료일1 and stime >= 추세선종료시간1 then {
// 하락
if T1 == 2 and MarketPosition == 0 then { //and s_line1 > -1 and s_line4 < 0 then{
if C < TL_GetValue(TL1,sdate,stime) and C[1] > TL_GetValue(TL1,sdate[1],stime[1]) Then
sell("S");
}
// 상승
if T2 == 2 and MarketPosition == 0 then { //and s_line1 < 1 and s_line4 > 0 then{
if C > TL_GetValue(TL2,sdate,stime) and C[1] < TL_GetValue(TL2,sdate[1],stime[1]) Then
Buy("B");
}
// 청산 시스템
// 매도청산
// X1,X2에 닿을 경우
if MarketPosition == -1 then{
if (L <= TL_GetValue(TLLL1,sdate,stime) and L[1] > TL_GetValue(TLLL1,sdate[1],stime[1]))
or (L <= TL_GetValue(TLLL2,sdate,stime) and L[1] > TL_GetValue(TLLL2,sdate[1],stime[1])) Then
ExitShort("SX");
}
// 매수청산
// // X11,X22에 닿을 경우
if MarketPosition == 1 then{
if (H >= TL_GetValue(TLL1,sdate,stime) and H[1] < TL_GetValue(TLL1,sdate[1],stime[1]))
or (H >= TL_GetValue(TLL2,sdate,stime) and H[1] < TL_GetValue(TLL2,sdate[1],stime[1])) Then
ExitLong("BX");
}
// 매매시간종료
}
// 당일 청산
if stime == 065000 or (stime > 065000 and stime[1] < 065000) Then{
if MarketPosition == 1 Then
exitlong("BDF");
if MarketPosition == -1 Then
ExitShort("SDF");
}
##### 스탑로스 #####
//SetStopProfittarget(Profit*PriceScale,PointStop);
SetStopLoss(loss*PriceScale,PointStop);
//SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop);
문1) X1추세선 라인이나 X2 추세선 라인 또는 X11 추세선 라인이나 X22 추세선 라인에
고가나 저가가 닿을 경우 청산하고 싶은데 청산이 안됩니다.
코딩 수정 및 점검 부탁드립니다.
문2) 추세선 라인 옆에 X1,X11 등의 추세선의 이름을 차트에 표시하고 싶습니다.
도움 부탁드립니다.
이전글