커뮤니티

질문이 많아 죄송합니다.

프로필 이미지
말비
2023-03-28 08:53:39
1647
글번호 167601
답변완료
밑에 식의 문제가 이익볼때는 몇번이고 계속 이익보고 손실볼때는 몇번이고 계속 손실보는데요. 이번 매매 손실보면 다음번 매매부터 매수매도를 토글 시킬는 시스템을 구현할수 도 있나요?(손실 청산하고 조금 텀을 주더라도) 항상 감사드립니다. 항상 행복하고 건강하시길 바랍니다~^^ ↓↓##전번에 알려주신 지그재그식 ##↓↓ input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; Buy(); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; Sell(); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } }
시스템
답변 4
프로필 이미지

예스스탁 예스스탁 답변

2023-03-28 13:05:22

안녕하세요 예스스탁입니다. 현재 시스템이 매수와 매도가 반복되는 스위칭 시스템입니다. 반대조건 만족시 손실이면 청산만 하고 진입은 되지 않게 작성해 드립니다. input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; if (MarketPosition == 0 ) or (MarketPosition == -1 and PositionProfit(0) >= 0) Then Buy("b"); if MarketPosition == -1 and PositionProfit(1) > 0 Then ExitShort("sx"); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; if (MarketPosition == 0 ) or (MarketPosition == 1 and PositionProfit(0) >= 0) Then Sell("s"); if MarketPosition == 1 and PositionProfit(1) > 0 Then ExitLong("bx"); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } } 즐거운 하루되세요 > 말비 님이 쓴 글입니다. > 제목 : 질문이 많아 죄송합니다. > 밑에 식의 문제가 이익볼때는 몇번이고 계속 이익보고 손실볼때는 몇번이고 계속 손실보는데요. 이번 매매 손실보면 다음번 매매부터 매수매도를 토글 시킬는 시스템을 구현할수 도 있나요?(손실 청산하고 조금 텀을 주더라도) 항상 감사드립니다. 항상 행복하고 건강하시길 바랍니다~^^ ↓↓##전번에 알려주신 지그재그식 ##↓↓ input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; Buy(); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; Sell(); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } }
프로필 이미지

말비

2023-03-28 14:41:48

잘 되다가 중간에 멈추는데 이유가 몰까요? 그냥 한세트 돌고 멈춰버리는것 같아보여요. 제가 말한건 # 에이코스 이전 매매 손실여부초기화 만약 상승추세시 {매수} 하방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매도전환} 손절이였을경우 [비코스]로 만약 하방추세시 {매도} 상방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [비코스]로 # 비코스 이전 매매 손실여부초기화 만약 상승추세시 {매도} 하방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [에이코스]로 만약 하방추세시 {매도} 상방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [에이코스]로 말이 안되는거 같기도 하고... 그냥 시스템언어 까막눈이라 생각나는데로만 적어봤습니다. 항상 감사드립니다~ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 질문이 많아 죄송합니다. > 안녕하세요 예스스탁입니다. 현재 시스템이 매수와 매도가 반복되는 스위칭 시스템입니다. 반대조건 만족시 손실이면 청산만 하고 진입은 되지 않게 작성해 드립니다. input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; if (MarketPosition == 0 ) or (MarketPosition == -1 and PositionProfit(0) >= 0) Then Buy("b"); if MarketPosition == -1 and PositionProfit(1) > 0 Then ExitShort("sx"); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; if (MarketPosition == 0 ) or (MarketPosition == 1 and PositionProfit(0) >= 0) Then Sell("s"); if MarketPosition == 1 and PositionProfit(1) > 0 Then ExitLong("bx"); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } } 즐거운 하루되세요 > 말비 님이 쓴 글입니다. > 제목 : 질문이 많아 죄송합니다. > 밑에 식의 문제가 이익볼때는 몇번이고 계속 이익보고 손실볼때는 몇번이고 계속 손실보는데요. 이번 매매 손실보면 다음번 매매부터 매수매도를 토글 시킬는 시스템을 구현할수 도 있나요?(손실 청산하고 조금 텀을 주더라도) 항상 감사드립니다. 항상 행복하고 건강하시길 바랍니다~^^ ↓↓##전번에 알려주신 지그재그식 ##↓↓ input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; Buy(); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; Sell(); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } }
프로필 이미지

예스스탁 예스스탁 답변

2023-03-29 08:49:22

안녕하세요 예스스탁입니다. 식을 수정했습니다. 상승전환시 기존에 진입한 매도포지션이 수익이면 청산하고 매수진입 실행 손실이면 청산만 실행 하락전환시 기존에 진입한 매수포지션이 수익이면 청산하고 매도진입 실행 손실이면 청산만 실행 위 구조로 동작하게 됩니다. 스위칭시 손실이면 스위칭을 하지 않고 진입을 한번 건너뛰게 됩니다. input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; if (MarketPosition == 0 ) or (MarketPosition == -1 and PositionProfit(0) >= 0) Then Buy("b"); if MarketPosition == -1 and PositionProfit(0) > 0 Then ExitShort("sx"); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; if (MarketPosition == 0 ) or (MarketPosition == 1 and PositionProfit(0) >= 0) Then Sell("s"); if MarketPosition == 1 and PositionProfit(0) > 0 Then ExitLong("bx"); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } } 즐거운 하루되세요 > 말비 님이 쓴 글입니다. > 제목 : Re : Re : 질문이 많아 죄송합니다. > 잘 되다가 중간에 멈추는데 이유가 몰까요? 그냥 한세트 돌고 멈춰버리는것 같아보여요. 제가 말한건 # 에이코스 이전 매매 손실여부초기화 만약 상승추세시 {매수} 하방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매도전환} 손절이였을경우 [비코스]로 만약 하방추세시 {매도} 상방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [비코스]로 # 비코스 이전 매매 손실여부초기화 만약 상승추세시 {매도} 하방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [에이코스]로 만약 하방추세시 {매도} 상방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [에이코스]로 말이 안되는거 같기도 하고... 그냥 시스템언어 까막눈이라 생각나는데로만 적어봤습니다. 항상 감사드립니다~ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 질문이 많아 죄송합니다. > 안녕하세요 예스스탁입니다. 현재 시스템이 매수와 매도가 반복되는 스위칭 시스템입니다. 반대조건 만족시 손실이면 청산만 하고 진입은 되지 않게 작성해 드립니다. input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; if (MarketPosition == 0 ) or (MarketPosition == -1 and PositionProfit(0) >= 0) Then Buy("b"); if MarketPosition == -1 and PositionProfit(1) > 0 Then ExitShort("sx"); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; if (MarketPosition == 0 ) or (MarketPosition == 1 and PositionProfit(0) >= 0) Then Sell("s"); if MarketPosition == 1 and PositionProfit(1) > 0 Then ExitLong("bx"); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } } 즐거운 하루되세요 > 말비 님이 쓴 글입니다. > 제목 : 질문이 많아 죄송합니다. > 밑에 식의 문제가 이익볼때는 몇번이고 계속 이익보고 손실볼때는 몇번이고 계속 손실보는데요. 이번 매매 손실보면 다음번 매매부터 매수매도를 토글 시킬는 시스템을 구현할수 도 있나요?(손실 청산하고 조금 텀을 주더라도) 항상 감사드립니다. 항상 행복하고 건강하시길 바랍니다~^^ ↓↓##전번에 알려주신 지그재그식 ##↓↓ input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; Buy(); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; Sell(); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } }
프로필 이미지

말비

2023-03-29 09:16:35

이거 물건인긴한데 익절 할때까지 청산을 하지 않습니다^^ 좋은.. 건가요^^? ㅋㅋㅋ 손절이 없어요 ㅋㅋ 손실중이면 몇일이고 청산을 하지 않습니다^^ 이것도 소장해야겠네요^^ 감사하지만 수정도 부탁드립니다^^ 귀찮게 해드려 죄송합니다^^ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 질문이 많아 죄송합니다. > 안녕하세요 예스스탁입니다. 식을 수정했습니다. 상승전환시 기존에 진입한 매도포지션이 수익이면 청산하고 매수진입 실행 손실이면 청산만 실행 하락전환시 기존에 진입한 매수포지션이 수익이면 청산하고 매도진입 실행 손실이면 청산만 실행 위 구조로 동작하게 됩니다. 스위칭시 손실이면 스위칭을 하지 않고 진입을 한번 건너뛰게 됩니다. input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; if (MarketPosition == 0 ) or (MarketPosition == -1 and PositionProfit(0) >= 0) Then Buy("b"); if MarketPosition == -1 and PositionProfit(0) > 0 Then ExitShort("sx"); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; if (MarketPosition == 0 ) or (MarketPosition == 1 and PositionProfit(0) >= 0) Then Sell("s"); if MarketPosition == 1 and PositionProfit(0) > 0 Then ExitLong("bx"); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } } 즐거운 하루되세요 > 말비 님이 쓴 글입니다. > 제목 : Re : Re : 질문이 많아 죄송합니다. > 잘 되다가 중간에 멈추는데 이유가 몰까요? 그냥 한세트 돌고 멈춰버리는것 같아보여요. 제가 말한건 # 에이코스 이전 매매 손실여부초기화 만약 상승추세시 {매수} 하방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매도전환} 손절이였을경우 [비코스]로 만약 하방추세시 {매도} 상방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [비코스]로 # 비코스 이전 매매 손실여부초기화 만약 상승추세시 {매도} 하방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [에이코스]로 만약 하방추세시 {매도} 상방추세 전환시 {청산후 손절인지 익절인지 판단후 초기화상태 이거나 익절이였을경우 매수전환} 손절이였을경우 [에이코스]로 말이 안되는거 같기도 하고... 그냥 시스템언어 까막눈이라 생각나는데로만 적어봤습니다. 항상 감사드립니다~ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 질문이 많아 죄송합니다. > 안녕하세요 예스스탁입니다. 현재 시스템이 매수와 매도가 반복되는 스위칭 시스템입니다. 반대조건 만족시 손실이면 청산만 하고 진입은 되지 않게 작성해 드립니다. input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; if (MarketPosition == 0 ) or (MarketPosition == -1 and PositionProfit(0) >= 0) Then Buy("b"); if MarketPosition == -1 and PositionProfit(1) > 0 Then ExitShort("sx"); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; if (MarketPosition == 0 ) or (MarketPosition == 1 and PositionProfit(0) >= 0) Then Sell("s"); if MarketPosition == 1 and PositionProfit(1) > 0 Then ExitLong("bx"); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } } 즐거운 하루되세요 > 말비 님이 쓴 글입니다. > 제목 : 질문이 많아 죄송합니다. > 밑에 식의 문제가 이익볼때는 몇번이고 계속 이익보고 손실볼때는 몇번이고 계속 손실보는데요. 이번 매매 손실보면 다음번 매매부터 매수매도를 토글 시킬는 시스템을 구현할수 도 있나요?(손실 청산하고 조금 텀을 주더라도) 항상 감사드립니다. 항상 행복하고 건강하시길 바랍니다~^^ ↓↓##전번에 알려주신 지그재그식 ##↓↓ input : Period(5); Array : HD[10](0),HT[10](0),HV[10](0); //고점 날짜, 시간, 가격 저장할 배열 Array : LD[10](0),LT[10](0),LV[10](0); //저점 날짜, 시간, 가격 저장할 배열 var : cnt(0),Hprice(0),Lprice(0); var : UpTrend(false),DownTrend(False),Trend(0); var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0); HPrice = H; LPrice = L; if Index == 0 Then { //초기 최고값 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //초기 최저값 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; } Else { UpTrend = HPrice >= Highest(HPrice,Period)[1]; DownTrend = LPrice <= Lowest(LPrice,Period)[1]; //상승추세 전환 if trend <= 0 and UpTrend == true Then { //추세구분 1 trend = 1; Buy(); //과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { HD[cnt] = HD[cnt-1]; HT[cnt] = HT[cnt-1]; HV[cnt] = HV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //직전 저점에서 현재 고점까지 연결선 출력 ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]); //색상은 Red TL_SetColor(ZigZagTL,Gray); //추세선 굵기는 1 TL_SetSize(ZigZagTL,1); HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]); TL_SetColor(HTL,Red); HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2)); Text_SetStyle(HTX,2,1); } Else if trend >= 0 and DownTrend Then//하락추세 전환 { //추세구분은 -1 trend = -1; Sell(); //과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동 For cnt = 9 DownTo 1 { LD[cnt] = LD[cnt-1]; LT[cnt] = LT[cnt-1]; LV[cnt] = LV[cnt-1]; } //0번방에 날짜, 시간, 가격 저장 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //직전 고점에서 현재 저점까지 연결선 출력 ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]); //색상은 Blue TL_SetColor(ZigZagTL,Gray); //굴긱는 1 TL_SetSize(ZigZagTL,1); LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]); TL_SetColor(LTL,Blue); LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2)); Text_SetStyle(LTX,2,0); } Else { //상승구간 if trend == 1 Then { //고점이 갱신되면 if HPrice > HV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 HD[0] = sDate; HT[0] = sTime; HV[0] = HPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]); //고점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(HTL,HD[0],HT[0],HV[0]); Text_SetString(HTX,NumToStr(HV[0],2)); Text_SetLocation(HTX,HD[0],HT[0],HV[0]); } } //하락구간 if trend == -1 Then { //저점이 갱신되면 if LPrice < LV[0] Then { //갱신된 봉의 날짜/시간/가격으로 변경 LD[0] = sDate; LT[0] = sTime; LV[0] = LPrice; //지그재그 추세선의 끝점을 현재봉으로 이동 TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]); //저점 수평 추세선의 끝점을 현재봉으로 이동 TL_SetBegin(LTL,LD[0],LT[0],LV[0]); Text_SetString(LTX,NumToStr(LV[0],2)); Text_SetLocation(LTX,LD[0],LT[0],LV[0]); } } TL_SetEnd(HTL,sDate,sTime,HV[0]); TL_SetEnd(LTL,sDate,sTime,LV[0]); } }