예스스탁
예스스탁 답변
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
주신 수식으로 수정해보았으나 (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
사실 수식의 기존 취지는 전일 시장 종가를 보고 청산을 결정하는 것이었습니다.
이게 가능할까요?
즉, 청산신호를 '진입 후 하루를 넘겼을 때' 발생시키는 방법이 있을까요?