커뮤니티

매수신호와 청산신호 동시 발생

프로필 이미지
민현종
2023-01-26 16:59:17
831
글번호 165737
답변완료

첨부 이미지

안녕하세요, 다음의 수식에서 매수신호와 청산신호가 동시에 발생하는 오류가 생겨 문의드립니다. //매수 If MarketPosition == 0 AND COND_B == 1 Then Buy("B1", OnClose, Def, 1); //종가대비 100pt 하락시 추가매수, 이후 50pt씩 하락시 잔고 5개 될때까지 추가매수 반복 If IsEntryName("B1", 1) == True AND C < DayClosePrice - 100 Then Buy("B2", OnClose, Def, 1); If IsEntryName("B2", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B3", OnClose, Def, 1); If IsEntryName("B3", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B4", OnClose, Def, 1); If IsEntryName("B4", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B5", OnClose, Def, 1); //종가대비 100pt 상승시 매수청산 1개, 이후 50pt씩 오를 때 잔고 0 될때 까지 추가 매수청산 If C > EntryPrice(1) Then Begin If C > DayClosePrice + 100 Then ExitLong("EL1", OnClose, Def, "", 1, 1); If CurrentContracts >= 2 AND C > ExitPrice(1) + 50 Then ExitLong("EL2", OnClose, Def, "", 1, 2); End //매도 If MarketPosition == 0 AND COND_B == -1 Then Sell("S1", OnClose, Def, 1); //종가대비 100pt 상승시 추가매도, 이후 50pt씩 상승시 잔고 5개 될때까지 추가매도 반복 If IsEntryName("S1", 1) == True AND C > DayClosePrice + 100 Then Sell("S2", OnClose, Def, 1); If IsEntryName("S2", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S3", OnClose, Def, 1); If IsEntryName("S3", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S4", OnClose, Def, 1); If IsEntryName("S4", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S5", OnClose, Def, 1); //종가대비 100pt 하락시 매도청산, 이후 50pt씩 하락시 잔고 0 될때까지 매도청산 If C < EntryPrice(1) Then Begin If C < DayClosePrice - 100 Then ExitShort("ES1", OnClose, Def, "", 1, 1); If CurrentContracts >= 2 AND C < ExitPrice(1) - 50 Then ExitShort("ES2", OnClose, Def, "", 1, 2); End
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2023-01-27 09:47:41

안녕하세요 예스스탁입니다. 1 진입신호가 발생하면 청산함수가 발생할 수 있는데 MarketPosition조건이 없어 진입봉과 같은봉에서 조건이 동시만족하고 있습니다. 청신식에 MarketPosition으로 포지션 확인후 신호가 발생하게 하셔야 합니다. 2 현재 청산식에 EntryPrice(1),ExitPrice(1)등이 사용되었는데 해당값은 청산완료된 직전거래의 진입가와 청산가격입니다. 현재진입중인 진입의 첫진입가는 EntryPrice(0),분할청산중에 직전청산가는 LatestExitPrice(0)입니다. 3 If MarketPosition == 0 AND COND_B == 1 Then Buy("B1", OnClose, Def, 1); //종가대비 100pt 하락시 추가매수, 이후 50pt씩 하락시 잔고 5개 될때까지 추가매수 반복 if MarketPosition == 1 Then { If LatestExitName(0) == "B1" AND C < DayClosePrice - 100 Then Buy("B2", OnClose, Def, 1); If LatestExitName(0) == "B2" AND C < LatestEntryPrice(0) - 50 Then Buy("B3", OnClose, Def, 1); If LatestExitName(0) == "B3" AND C < LatestEntryPrice(0) - 50 Then Buy("B4", OnClose, Def, 1); If LatestExitName(0) == "B4" AND C < LatestEntryPrice(0) - 50 Then Buy("B5", OnClose, Def, 1); //종가대비 100pt 상승시 매수청산 1개, 이후 50pt씩 오를 때 잔고 0 될때 까지 추가 매수청산 If Condition1 == False then { if C > DayClosePrice + 100 Then { ExitLong("EL1", OnClose, Def, "", 1, 1); Condition1 = true; } } Else { If C > LatestExitPrice(0) + 50 Then ExitLong("EL2", OnClose, Def, "", 1, 2); } } Else Condition1 = False; //매도 If MarketPosition == 0 AND COND_B == -1 Then Sell("S1", OnClose, Def, 1); //종가대비 100pt 상승시 추가매도, 이후 50pt씩 상승시 잔고 5개 될때까지 추가매도 반복 if MarketPosition == -1 Then { If LatestExitName(0) == "S1" and C > DayClosePrice + 100 Then Sell("S2", OnClose, Def, 1); If LatestExitName(0) == "S2" AND C > LatestEntryPrice(0) + 50 Then Sell("S3", OnClose, Def, 1); If LatestExitName(0) == "S3" AND C > LatestEntryPrice(0) + 50 Then Sell("S4", OnClose, Def, 1); If LatestExitName(0) == "S4" AND C > LatestEntryPrice(0) + 50 Then Sell("S5", OnClose, Def, 1); //종가대비 100pt 하락시 매도청산, 이후 50pt씩 하락시 잔고 0 될때까지 매도청산 If Condition2 == False then { if C < DayClosePrice - 100 Then { ExitShort("ES1", OnClose, Def, "", 1, 1); Condition1 = true; } } Else { If C < LatestExitPrice(0) - 50 Then ExitShort("ES2", OnClose, Def, "", 1, 2); } } Else Condition2 = False; 즐거운 하루되세요 > 민현종 님이 쓴 글입니다. > 제목 : 매수신호와 청산신호 동시 발생 > 안녕하세요, 다음의 수식에서 매수신호와 청산신호가 동시에 발생하는 오류가 생겨 문의드립니다. //매수 If MarketPosition == 0 AND COND_B == 1 Then Buy("B1", OnClose, Def, 1); //종가대비 100pt 하락시 추가매수, 이후 50pt씩 하락시 잔고 5개 될때까지 추가매수 반복 If IsEntryName("B1", 1) == True AND C < DayClosePrice - 100 Then Buy("B2", OnClose, Def, 1); If IsEntryName("B2", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B3", OnClose, Def, 1); If IsEntryName("B3", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B4", OnClose, Def, 1); If IsEntryName("B4", 1) == True AND C < LatestEntryPrice(0) - 50 Then Buy("B5", OnClose, Def, 1); //종가대비 100pt 상승시 매수청산 1개, 이후 50pt씩 오를 때 잔고 0 될때 까지 추가 매수청산 If C > EntryPrice(1) Then Begin If C > DayClosePrice + 100 Then ExitLong("EL1", OnClose, Def, "", 1, 1); If CurrentContracts >= 2 AND C > ExitPrice(1) + 50 Then ExitLong("EL2", OnClose, Def, "", 1, 2); End //매도 If MarketPosition == 0 AND COND_B == -1 Then Sell("S1", OnClose, Def, 1); //종가대비 100pt 상승시 추가매도, 이후 50pt씩 상승시 잔고 5개 될때까지 추가매도 반복 If IsEntryName("S1", 1) == True AND C > DayClosePrice + 100 Then Sell("S2", OnClose, Def, 1); If IsEntryName("S2", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S3", OnClose, Def, 1); If IsEntryName("S3", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S4", OnClose, Def, 1); If IsEntryName("S4", 1) == True AND C > LatestEntryPrice(0) + 50 Then Sell("S5", OnClose, Def, 1); //종가대비 100pt 하락시 매도청산, 이후 50pt씩 하락시 잔고 0 될때까지 매도청산 If C < EntryPrice(1) Then Begin If C < DayClosePrice - 100 Then ExitShort("ES1", OnClose, Def, "", 1, 1); If CurrentContracts >= 2 AND C < ExitPrice(1) - 50 Then ExitShort("ES2", OnClose, Def, "", 1, 2); End
프로필 이미지

민현종

2023-01-27 10:48:10

주신 수식으로 수정해보았으나 (Condition 1, 2에 대한 오류도 보정함) 문제가 지속됩니다. --------------------------------------------------- If MarketPosition == 0 AND COND_B == 1 Then Buy("B1", OnClose, Def, 1); //종가대비 100pt 하락시 추가매수, 이후 50pt씩 하락시 잔고 5개 될때까지 추가매수 반복 if MarketPosition == 1 Then { If LatestExitName(0) == "B1" AND C < DayClosePrice - 100 Then Buy("B2", OnClose, Def, 1); If LatestExitName(0) == "B2" AND C < LatestEntryPrice(0) - 50 Then Buy("B3", OnClose, Def, 1); If LatestExitName(0) == "B3" AND C < LatestEntryPrice(0) - 50 Then Buy("B4", OnClose, Def, 1); If LatestExitName(0) == "B4" AND C < LatestEntryPrice(0) - 50 Then Buy("B5", OnClose, Def, 1); //종가대비 100pt 상승시 매수청산 1개, 이후 50pt씩 오를 때 잔고 0 될때 까지 추가 매수청산 If Condition1 == False then { if C > DayClosePrice + 100 Then { ExitLong("EL1", OnClose, Def, "", 1, 1); Condition1 = True; } } Else { If C > LatestExitPrice(0) + 50 Then ExitLong("EL2", OnClose, Def, "", 1, 2); } } Else Condition1 = False; //매도 If MarketPosition == 0 AND COND_B == -1 Then Sell("S1", OnClose, Def, 1); //종가대비 100pt 상승시 추가매도, 이후 50pt씩 상승시 잔고 5개 될때까지 추가매도 반복 if MarketPosition == -1 Then { If LatestExitName(0) == "S1" and C > DayClosePrice + 100 Then Sell("S2", OnClose, Def, 1); If LatestExitName(0) == "S2" AND C > LatestEntryPrice(0) + 50 Then Sell("S3", OnClose, Def, 1); If LatestExitName(0) == "S3" AND C > LatestEntryPrice(0) + 50 Then Sell("S4", OnClose, Def, 1); If LatestExitName(0) == "S4" AND C > LatestEntryPrice(0) + 50 Then Sell("S5", OnClose, Def, 1); //종가대비 100pt 하락시 매도청산, 이후 50pt씩 하락시 잔고 0 될때까지 매도청산 If Condition2 == False then { if C < DayClosePrice - 100 Then { ExitShort("ES1", OnClose, Def, "", 1, 1); Condition2 = True; } } Else { If C < LatestExitPrice(0) - 50 Then ExitShort("ES2", OnClose, Def, "", 1, 2); } } Else Condition2 = False; ----------------------------------------------------------- 확인해보니 'DayClosePrice'라는 다음의 수식때문에 생기는 오류이지 않을까 생각이 됩니다. 위 수식에 따르면 1) MarketPosition == 1 2) C > DayClosePrice + 100 일 때 매수청산 신호가 발생되는데 2)에서 문제가 발생하는 것 같습니다. DayClosePrice는 매일 매일의 시장종가 (미국시장 기준 05:55~05:59 06:55~06:59)를 산정하는 수식인데 다음과 같습니다. (DayClose는 00시 기준으로 작동하더라구요) //종가 Vars: DayClosePrice(0); If SummerTime == 1 Then Begin If sTime > 055500 AND sTime < 055900 Then DayClosePrice = Close; End If SummerTime == -1 Then Begin If sTime > 065500 AND sTime < 065900 Then DayClosePrice = Close; End 사실 수식의 기존 취지는 전일 시장 종가를 보고 청산을 결정하는 것이었습니다. 이게 가능할까요? 즉, 청산신호를 '진입 후 하루를 넘겼을 때' 발생시키는 방법이 있을까요?
프로필 이미지

예스스탁 예스스탁 답변

2023-01-27 11:09:05

> 민현종 님이 쓴 글입니다. > 제목 : Re : Re : 매수신호와 청산신호 동시 발생 (문제지속, 다른 문제점 제기) > 주신 수식으로 수정해보았으나 (Condition 1, 2에 대한 오류도 보정함) 문제가 지속됩니다. --------------------------------------------------- If MarketPosition == 0 AND COND_B == 1 Then Buy("B1", OnClose, Def, 1); //종가대비 100pt 하락시 추가매수, 이후 50pt씩 하락시 잔고 5개 될때까지 추가매수 반복 if MarketPosition == 1 Then { If LatestExitName(0) == "B1" AND C < DayClosePrice - 100 Then Buy("B2", OnClose, Def, 1); If LatestExitName(0) == "B2" AND C < LatestEntryPrice(0) - 50 Then Buy("B3", OnClose, Def, 1); If LatestExitName(0) == "B3" AND C < LatestEntryPrice(0) - 50 Then Buy("B4", OnClose, Def, 1); If LatestExitName(0) == "B4" AND C < LatestEntryPrice(0) - 50 Then Buy("B5", OnClose, Def, 1); //종가대비 100pt 상승시 매수청산 1개, 이후 50pt씩 오를 때 잔고 0 될때 까지 추가 매수청산 If Condition1 == False then { if C > DayClosePrice + 100 Then { ExitLong("EL1", OnClose, Def, "", 1, 1); Condition1 = True; } } Else { If C > LatestExitPrice(0) + 50 Then ExitLong("EL2", OnClose, Def, "", 1, 2); } } Else Condition1 = False; //매도 If MarketPosition == 0 AND COND_B == -1 Then Sell("S1", OnClose, Def, 1); //종가대비 100pt 상승시 추가매도, 이후 50pt씩 상승시 잔고 5개 될때까지 추가매도 반복 if MarketPosition == -1 Then { If LatestExitName(0) == "S1" and C > DayClosePrice + 100 Then Sell("S2", OnClose, Def, 1); If LatestExitName(0) == "S2" AND C > LatestEntryPrice(0) + 50 Then Sell("S3", OnClose, Def, 1); If LatestExitName(0) == "S3" AND C > LatestEntryPrice(0) + 50 Then Sell("S4", OnClose, Def, 1); If LatestExitName(0) == "S4" AND C > LatestEntryPrice(0) + 50 Then Sell("S5", OnClose, Def, 1); //종가대비 100pt 하락시 매도청산, 이후 50pt씩 하락시 잔고 0 될때까지 매도청산 If Condition2 == False then { if C < DayClosePrice - 100 Then { ExitShort("ES1", OnClose, Def, "", 1, 1); Condition2 = True; } } Else { If C < LatestExitPrice(0) - 50 Then ExitShort("ES2", OnClose, Def, "", 1, 2); } } Else Condition2 = False; ----------------------------------------------------------- 확인해보니 'DayClosePrice'라는 다음의 수식때문에 생기는 오류이지 않을까 생각이 됩니다. 위 수식에 따르면 1) MarketPosition == 1 2) C > DayClosePrice + 100 일 때 매수청산 신호가 발생되는데 2)에서 문제가 발생하는 것 같습니다. DayClosePrice는 매일 매일의 시장종가 (미국시장 기준 05:55~05:59 06:55~06:59)를 산정하는 수식인데 다음과 같습니다. (DayClose는 00시 기준으로 작동하더라구요) //종가 Vars: DayClosePrice(0); If SummerTime == 1 Then Begin If sTime > 055500 AND sTime < 055900 Then DayClosePrice = Close; End If SummerTime == -1 Then Begin If sTime > 065500 AND sTime < 065900 Then DayClosePrice = Close; End 사실 수식의 기존 취지는 전일 시장 종가를 보고 청산을 결정하는 것이었습니다. 이게 가능할까요? 즉, 청산신호를 '진입 후 하루를 넘겼을 때' 발생시키는 방법이 있을까요?