예스스탁
예스스탁 답변
2024-03-12 11:48:37
안녕하세요
예스스탁입니다.
1
올리신 청산함수에 모두 처리해 드리기 어려우므로 아래 내용 응용해서 처리하시기 바랍니다.
"타점1 5%익절"이 "타점1" 진입후 1회만 발동하면 되므로
진입이 발생했는데 진입명이 "타점1"이면 변수에 true를 저장하고
"타점1 5%익절"이 발생하면 false로 설정하면 1회만 발생하게 할 수 있습니다.
즉 해당 청산이 발생하는 조건이면 지정한 변수를 true로 지정해서
해당 청산은 지정한 변수가 true일때만 발동하게 하고
해당 청산이 발동하면 지정한 변수를 false로 만들어서
다음에 다시 동일조건이 발생해서 true가 되지 전까지는 재발동되지 않게 하는 내용입니다.
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "타점1" Then
Condition99 = true;
}
if CurrentContracts < CurrentContracts[1] Then
{
if LatestExitName(0) == "타점1 5%익절" Then
Condition99 = False;
}
if (LatestEntryName(0) == "타점1") and Condition99 == true Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3,1);
2
각 추가진입에 지정한 이름을 확인하시기 바랍니다.
첨부하신 그림에서 "타점 10%익절"청산이 발생했는데
타점1,타점2 진입에 지정한 가장 최근 청산명은 다른이름입니다.
봉완성시 최근 발생한 진입은 "타점 10%익절"이고
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
위 처럼 변경하면 신호가 발생합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 어제 시스템식 요청했던 사람입니다.
말씀해준신대로 수량옵션에서 1로 적용했더니 동일시간에는 동시에 수량이 빠지는게 없어졌는데
추후에 말씀해주신 문제점도 그대로 발생하게 되었습니다.
((다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다))
해당 문제를 해결하기 위해서 "진입명"도 넣고 해봤는데, 제가 원하는 식은 아예 나오질 않더라구요
혹시 아래의 문제를 해결할 수 있는 방법은 없을까요???
그리고 두번째 문제점은 위의 그림을 보시면 전고점 돌파했을때 매수가 들어가는 부분이 있는데
갭상으로 전고점을 돌파하면서, 10% 익절 매도청산까지 나갔을 경우에 돌파매수가 안됩니다.
여러가지 방식으로 이것저것 넣어봤지만 안되는데, 혹시 해결할수 있는 방법이 있을까요?
---------------------------------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
현재식에서 수량옵션 1로 하시면
동일날짜에 30주가 청산신호가 나오게 되지만
타점에서 해당 수량이 빠지게 됩니다.
타점에서 진입된 수량이 30주가 안되면 다음진입신호에서 나머지수량이 차감되게 됩니다.
청산신호는 진입명을 지정하지 않으면
먼저 나온신호에서 해당 수량을 차감해 청산하게 됩니다.
또한 다른 문제도 있는데
다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 오호~~~ 감사합니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
에서 수량옵션을 1로 수정하면
동일날짜에 "타점"과 "타점1"에서 합쳐서 30주를 청산하게 되는게 맞는건가요??
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
청산함수는 위와같이 6개의 옵션을 지정할 수 있습니다.
현재 작성하신 청산식은
if 문으로 최근 진입명이나 청산명이 어떤 이름일때 동작하라는 내용만 있습니다.
1
5번째와 6번째는 수량과 수량관련 옵션입니다.
수량옵션을 0으로 지정하면 피라미딩시 각 진입별로 지정한 수량을 청산하게 됩니다.
수량옵션을 1로 지정하면 지정한 수량만 차감하게 됩니다.
수량옵션은 생략하면 0이 적용됩니다.
작성하신 수식에서는 모두 수량옵션이 생략이 되어 있어 수량옵션은 0이 적용되고
첨부하신 그림과 같이 2회 매수진입이 있고
동일날짜에 "타점"과 "타점1"에서 각각 30주씩 청산이 된 것입니다.
2
4번째 옵션이 진입명입니다.
청산함수에 진입명을 지정하면 해당진입명에서만 지정한 수량을 청산하게 됩니다.
올리신 수식에서는 진입명 옵션을 이용해 제어를 하셔야 합니다.
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"타점1",Floor(베팅금/타점)*0.3);
위와 같이 진입명에 "타점1"을 지정하시면
가장 최근 진입이 "타점1"이고 진입가에서 5% 상승하면
타점1에서만 30주 청산해라 라는 내용이 됩니다,
3
분할청산을 할 때는
청산함수의 4,5,6번 매개변수를 이용해 원하시는 내용으로 청산이 발생하게 제어를 하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 수식을 작성하는데 어려움이 있어 이렇게 글을 남깁니다.
위의 그림 2, 3번을 보시면 대략적으로 그림으로 작성하였습니다.
타점 에서 100주 매수후 30주 매도 하고 중간에 30주 매도 해서 총 40주가 남은
상태에서 타점 1로 60주 매수해서 다시 100주가 되도록 맞췄습니다.
그런데 타점1 5% 익절에서 30주만 매도가 되어야 하는데
그림 1 성능보고서를 보시면, 타점에서 30주매도, 타점 1에서 30주 매도 총 60주가
매도 되었습니다.
타점, 타점 1이 따로따로 시스템식이 적용 되는것 같은데
어떻게 해야 할지 부탁드리겠습니다.
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
if MarketPosition == 1 Then
{
Condition1 = False;
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" Then
{
Condition1 = true;
Buy("타점1",OnClosE,DeF,Floor((베팅금)/타점*0.6));
}
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절 P618청산" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
#전봉대비 수량 감소(일부 청산발생을 위미)
if CurrentContracts < CurrentContracts[1] Then
{
#청산가 저장
var1 = LatestExitPrice(0);
if LatestExitName(0) == "타점 5%익절" or LatestExitName(0) == "타점1 5%익절" or LatestExitName(0) == "타점2 5%익절" Then
Condition11 = true;
if LatestExitName(0) == "타점 5%익절 P5청산" or LatestExitName(0) == "타점 10%익절" or LatestExitName(0) == "타점1 5%익절 P618청산"
or LatestExitName(0) == "타점1 10%익절" or LatestExitName(0) == "타점2 5%익절 P618청산" or LatestExitName(0) == "타점2 10%익절" Then
Condition22 = true;
if LatestExitName(0) == "타점 5%익절 P382청산" or LatestExitName(0) == "타점 10%익절 P618청산" or LatestExitName(0) == "타점1 5%익절 P5청산"
or LatestExitName(0) == "타점1 10%익절 P618청산" or LatestExitName(0) == "타점2 5%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P618청산" Then
Condition33 = true;
if LatestExitName(0) == "타점 10%익절 P5청산" or LatestExitName(0) == "타점1 10%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P5청산" Then
Condition44 = true;
}
#전봉대비 수량 증가(추가 진입발생을 의미)
if CurrentContracts > CurrentContracts[1] Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition11 = False;
Condition22 = False;
Condition33= False;
Condition44 = False;
}
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 10%익절",AtLimit,AvgEntryPrice*1.2,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 10%익절") and c <= P618 Then
ExitLong("타점 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점 10%익절 P618청산") and c <= P5 Then
ExitLong("타점 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절") and c <= P618 Then
ExitLong("타점1 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절 P618청산") and c <= 5 Then
ExitLong("타점1 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점1") Then
ExitLong("타점1 10%익절",AtLimit,latestEntryPrice*1.1,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 10%익절") and c <= P618 Then
ExitLong("타점1 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점1 10%익절 P618청산") and c <= P5 Then
ExitLong("타점1 10%익절 P5청산",AtLimit,P5,"",(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점2")Then
ExitLong("타점2 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절") and c <= P618 Then
ExitLong("타점2 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절 P618청산") and c <= 5 Then
ExitLong("타점2 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점2") Then
ExitLong("타점2 10%익절",AtLimit,latestEntryPrice*1.1,"",(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 10%익절") and c <= P618 Then
ExitLong("타점2 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점2 10%익절 P618청산") and c <= P5 Then
ExitLong("타점2 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
}
if MarketPosition == 1 and sTime > xtime and 손절 >= c Then
ExitLong("손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점1") and c <= latestEntryPrice*0.96 Then
ExitLong("5%돌파손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점2") and c <= latestEntryPrice*0.96 Then
ExitLong("10%돌파손절");
답변 주셔서 감사합니다.
1번 항목은 퇴근 후 집에가서 다시한번 설정해보겠습니다.
2번 항목에 대해서 한번 수정해서 적용했던 내용이라 다시 한번 요청드립니다.
해당 항목을 가장최근진입명으로 변경하게 되면, C >= HH[1] 이 해당조건이
충족이 안되어서 매수가 진행이 안되더라구요
왜냐면 전고점이 10프로 익절되고, 전고점 변수가 바뀌게 되더라구요
그래서 10프로 익절 타점봉에서 매수와 매도가 동시에 가능하게 할수 있을까요??
아니면 혹시 다른 방법이 있으시다면 알려주세요.ㅜ.ㅜ
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
1
올리신 청산함수에 모두 처리해 드리기 어려우므로 아래 내용 응용해서 처리하시기 바랍니다.
"타점1 5%익절"이 "타점1" 진입후 1회만 발동하면 되므로
진입이 발생했는데 진입명이 "타점1"이면 변수에 true를 저장하고
"타점1 5%익절"이 발생하면 false로 설정하면 1회만 발생하게 할 수 있습니다.
즉 해당 청산이 발생하는 조건이면 지정한 변수를 true로 지정해서
해당 청산은 지정한 변수가 true일때만 발동하게 하고
해당 청산이 발동하면 지정한 변수를 false로 만들어서
다음에 다시 동일조건이 발생해서 true가 되지 전까지는 재발동되지 않게 하는 내용입니다.
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "타점1" Then
Condition99 = true;
}
if CurrentContracts < CurrentContracts[1] Then
{
if LatestExitName(0) == "타점1 5%익절" Then
Condition99 = False;
}
if (LatestEntryName(0) == "타점1") and Condition99 == true Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3,1);
2
각 추가진입에 지정한 이름을 확인하시기 바랍니다.
첨부하신 그림에서 "타점 10%익절"청산이 발생했는데
타점1,타점2 진입에 지정한 가장 최근 청산명은 다른이름입니다.
봉완성시 최근 발생한 진입은 "타점 10%익절"이고
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
위 처럼 변경하면 신호가 발생합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 어제 시스템식 요청했던 사람입니다.
말씀해준신대로 수량옵션에서 1로 적용했더니 동일시간에는 동시에 수량이 빠지는게 없어졌는데
추후에 말씀해주신 문제점도 그대로 발생하게 되었습니다.
((다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다))
해당 문제를 해결하기 위해서 "진입명"도 넣고 해봤는데, 제가 원하는 식은 아예 나오질 않더라구요
혹시 아래의 문제를 해결할 수 있는 방법은 없을까요???
그리고 두번째 문제점은 위의 그림을 보시면 전고점 돌파했을때 매수가 들어가는 부분이 있는데
갭상으로 전고점을 돌파하면서, 10% 익절 매도청산까지 나갔을 경우에 돌파매수가 안됩니다.
여러가지 방식으로 이것저것 넣어봤지만 안되는데, 혹시 해결할수 있는 방법이 있을까요?
---------------------------------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
현재식에서 수량옵션 1로 하시면
동일날짜에 30주가 청산신호가 나오게 되지만
타점에서 해당 수량이 빠지게 됩니다.
타점에서 진입된 수량이 30주가 안되면 다음진입신호에서 나머지수량이 차감되게 됩니다.
청산신호는 진입명을 지정하지 않으면
먼저 나온신호에서 해당 수량을 차감해 청산하게 됩니다.
또한 다른 문제도 있는데
다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 오호~~~ 감사합니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
에서 수량옵션을 1로 수정하면
동일날짜에 "타점"과 "타점1"에서 합쳐서 30주를 청산하게 되는게 맞는건가요??
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
청산함수는 위와같이 6개의 옵션을 지정할 수 있습니다.
현재 작성하신 청산식은
if 문으로 최근 진입명이나 청산명이 어떤 이름일때 동작하라는 내용만 있습니다.
1
5번째와 6번째는 수량과 수량관련 옵션입니다.
수량옵션을 0으로 지정하면 피라미딩시 각 진입별로 지정한 수량을 청산하게 됩니다.
수량옵션을 1로 지정하면 지정한 수량만 차감하게 됩니다.
수량옵션은 생략하면 0이 적용됩니다.
작성하신 수식에서는 모두 수량옵션이 생략이 되어 있어 수량옵션은 0이 적용되고
첨부하신 그림과 같이 2회 매수진입이 있고
동일날짜에 "타점"과 "타점1"에서 각각 30주씩 청산이 된 것입니다.
2
4번째 옵션이 진입명입니다.
청산함수에 진입명을 지정하면 해당진입명에서만 지정한 수량을 청산하게 됩니다.
올리신 수식에서는 진입명 옵션을 이용해 제어를 하셔야 합니다.
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"타점1",Floor(베팅금/타점)*0.3);
위와 같이 진입명에 "타점1"을 지정하시면
가장 최근 진입이 "타점1"이고 진입가에서 5% 상승하면
타점1에서만 30주 청산해라 라는 내용이 됩니다,
3
분할청산을 할 때는
청산함수의 4,5,6번 매개변수를 이용해 원하시는 내용으로 청산이 발생하게 제어를 하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 수식을 작성하는데 어려움이 있어 이렇게 글을 남깁니다.
위의 그림 2, 3번을 보시면 대략적으로 그림으로 작성하였습니다.
타점 에서 100주 매수후 30주 매도 하고 중간에 30주 매도 해서 총 40주가 남은
상태에서 타점 1로 60주 매수해서 다시 100주가 되도록 맞췄습니다.
그런데 타점1 5% 익절에서 30주만 매도가 되어야 하는데
그림 1 성능보고서를 보시면, 타점에서 30주매도, 타점 1에서 30주 매도 총 60주가
매도 되었습니다.
타점, 타점 1이 따로따로 시스템식이 적용 되는것 같은데
어떻게 해야 할지 부탁드리겠습니다.
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
if MarketPosition == 1 Then
{
Condition1 = False;
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" Then
{
Condition1 = true;
Buy("타점1",OnClosE,DeF,Floor((베팅금)/타점*0.6));
}
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절 P618청산" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
#전봉대비 수량 감소(일부 청산발생을 위미)
if CurrentContracts < CurrentContracts[1] Then
{
#청산가 저장
var1 = LatestExitPrice(0);
if LatestExitName(0) == "타점 5%익절" or LatestExitName(0) == "타점1 5%익절" or LatestExitName(0) == "타점2 5%익절" Then
Condition11 = true;
if LatestExitName(0) == "타점 5%익절 P5청산" or LatestExitName(0) == "타점 10%익절" or LatestExitName(0) == "타점1 5%익절 P618청산"
or LatestExitName(0) == "타점1 10%익절" or LatestExitName(0) == "타점2 5%익절 P618청산" or LatestExitName(0) == "타점2 10%익절" Then
Condition22 = true;
if LatestExitName(0) == "타점 5%익절 P382청산" or LatestExitName(0) == "타점 10%익절 P618청산" or LatestExitName(0) == "타점1 5%익절 P5청산"
or LatestExitName(0) == "타점1 10%익절 P618청산" or LatestExitName(0) == "타점2 5%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P618청산" Then
Condition33 = true;
if LatestExitName(0) == "타점 10%익절 P5청산" or LatestExitName(0) == "타점1 10%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P5청산" Then
Condition44 = true;
}
#전봉대비 수량 증가(추가 진입발생을 의미)
if CurrentContracts > CurrentContracts[1] Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition11 = False;
Condition22 = False;
Condition33= False;
Condition44 = False;
}
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 10%익절",AtLimit,AvgEntryPrice*1.2,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 10%익절") and c <= P618 Then
ExitLong("타점 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점 10%익절 P618청산") and c <= P5 Then
ExitLong("타점 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절") and c <= P618 Then
ExitLong("타점1 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절 P618청산") and c <= 5 Then
ExitLong("타점1 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점1") Then
ExitLong("타점1 10%익절",AtLimit,latestEntryPrice*1.1,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 10%익절") and c <= P618 Then
ExitLong("타점1 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점1 10%익절 P618청산") and c <= P5 Then
ExitLong("타점1 10%익절 P5청산",AtLimit,P5,"",(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점2")Then
ExitLong("타점2 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절") and c <= P618 Then
ExitLong("타점2 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절 P618청산") and c <= 5 Then
ExitLong("타점2 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점2") Then
ExitLong("타점2 10%익절",AtLimit,latestEntryPrice*1.1,"",(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 10%익절") and c <= P618 Then
ExitLong("타점2 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점2 10%익절 P618청산") and c <= P5 Then
ExitLong("타점2 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
}
if MarketPosition == 1 and sTime > xtime and 손절 >= c Then
ExitLong("손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점1") and c <= latestEntryPrice*0.96 Then
ExitLong("5%돌파손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점2") and c <= latestEntryPrice*0.96 Then
ExitLong("10%돌파손절");
예스스탁
예스스탁 답변
2024-03-12 13:03:52
안녕하세요
예스스탁입니다.
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
첨부된 그림은 타점2 수식에서 최근 청산명만 변경해서 신호입니다.
"타점 10%익절"이 봉미완성시에 발생하는 신호이고
매수는 봉완성시이기에 최근 청산명 조건만 충족이 되고
종가가 전봉기준 최고값(HH[1])보다 크면 신호가 발생할 수 있습니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 답변 주셔서 감사합니다.
1번 항목은 퇴근 후 집에가서 다시한번 설정해보겠습니다.
2번 항목에 대해서 한번 수정해서 적용했던 내용이라 다시 한번 요청드립니다.
해당 항목을 가장최근진입명으로 변경하게 되면, C >= HH[1] 이 해당조건이
충족이 안되어서 매수가 진행이 안되더라구요
왜냐면 전고점이 10프로 익절되고, 전고점 변수가 바뀌게 되더라구요
그래서 10프로 익절 타점봉에서 매수와 매도가 동시에 가능하게 할수 있을까요??
아니면 혹시 다른 방법이 있으시다면 알려주세요.ㅜ.ㅜ
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
1
올리신 청산함수에 모두 처리해 드리기 어려우므로 아래 내용 응용해서 처리하시기 바랍니다.
"타점1 5%익절"이 "타점1" 진입후 1회만 발동하면 되므로
진입이 발생했는데 진입명이 "타점1"이면 변수에 true를 저장하고
"타점1 5%익절"이 발생하면 false로 설정하면 1회만 발생하게 할 수 있습니다.
즉 해당 청산이 발생하는 조건이면 지정한 변수를 true로 지정해서
해당 청산은 지정한 변수가 true일때만 발동하게 하고
해당 청산이 발동하면 지정한 변수를 false로 만들어서
다음에 다시 동일조건이 발생해서 true가 되지 전까지는 재발동되지 않게 하는 내용입니다.
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "타점1" Then
Condition99 = true;
}
if CurrentContracts < CurrentContracts[1] Then
{
if LatestExitName(0) == "타점1 5%익절" Then
Condition99 = False;
}
if (LatestEntryName(0) == "타점1") and Condition99 == true Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3,1);
2
각 추가진입에 지정한 이름을 확인하시기 바랍니다.
첨부하신 그림에서 "타점 10%익절"청산이 발생했는데
타점1,타점2 진입에 지정한 가장 최근 청산명은 다른이름입니다.
봉완성시 최근 발생한 진입은 "타점 10%익절"이고
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
위 처럼 변경하면 신호가 발생합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 어제 시스템식 요청했던 사람입니다.
말씀해준신대로 수량옵션에서 1로 적용했더니 동일시간에는 동시에 수량이 빠지는게 없어졌는데
추후에 말씀해주신 문제점도 그대로 발생하게 되었습니다.
((다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다))
해당 문제를 해결하기 위해서 "진입명"도 넣고 해봤는데, 제가 원하는 식은 아예 나오질 않더라구요
혹시 아래의 문제를 해결할 수 있는 방법은 없을까요???
그리고 두번째 문제점은 위의 그림을 보시면 전고점 돌파했을때 매수가 들어가는 부분이 있는데
갭상으로 전고점을 돌파하면서, 10% 익절 매도청산까지 나갔을 경우에 돌파매수가 안됩니다.
여러가지 방식으로 이것저것 넣어봤지만 안되는데, 혹시 해결할수 있는 방법이 있을까요?
---------------------------------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
현재식에서 수량옵션 1로 하시면
동일날짜에 30주가 청산신호가 나오게 되지만
타점에서 해당 수량이 빠지게 됩니다.
타점에서 진입된 수량이 30주가 안되면 다음진입신호에서 나머지수량이 차감되게 됩니다.
청산신호는 진입명을 지정하지 않으면
먼저 나온신호에서 해당 수량을 차감해 청산하게 됩니다.
또한 다른 문제도 있는데
다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 오호~~~ 감사합니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
에서 수량옵션을 1로 수정하면
동일날짜에 "타점"과 "타점1"에서 합쳐서 30주를 청산하게 되는게 맞는건가요??
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
청산함수는 위와같이 6개의 옵션을 지정할 수 있습니다.
현재 작성하신 청산식은
if 문으로 최근 진입명이나 청산명이 어떤 이름일때 동작하라는 내용만 있습니다.
1
5번째와 6번째는 수량과 수량관련 옵션입니다.
수량옵션을 0으로 지정하면 피라미딩시 각 진입별로 지정한 수량을 청산하게 됩니다.
수량옵션을 1로 지정하면 지정한 수량만 차감하게 됩니다.
수량옵션은 생략하면 0이 적용됩니다.
작성하신 수식에서는 모두 수량옵션이 생략이 되어 있어 수량옵션은 0이 적용되고
첨부하신 그림과 같이 2회 매수진입이 있고
동일날짜에 "타점"과 "타점1"에서 각각 30주씩 청산이 된 것입니다.
2
4번째 옵션이 진입명입니다.
청산함수에 진입명을 지정하면 해당진입명에서만 지정한 수량을 청산하게 됩니다.
올리신 수식에서는 진입명 옵션을 이용해 제어를 하셔야 합니다.
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"타점1",Floor(베팅금/타점)*0.3);
위와 같이 진입명에 "타점1"을 지정하시면
가장 최근 진입이 "타점1"이고 진입가에서 5% 상승하면
타점1에서만 30주 청산해라 라는 내용이 됩니다,
3
분할청산을 할 때는
청산함수의 4,5,6번 매개변수를 이용해 원하시는 내용으로 청산이 발생하게 제어를 하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 수식을 작성하는데 어려움이 있어 이렇게 글을 남깁니다.
위의 그림 2, 3번을 보시면 대략적으로 그림으로 작성하였습니다.
타점 에서 100주 매수후 30주 매도 하고 중간에 30주 매도 해서 총 40주가 남은
상태에서 타점 1로 60주 매수해서 다시 100주가 되도록 맞췄습니다.
그런데 타점1 5% 익절에서 30주만 매도가 되어야 하는데
그림 1 성능보고서를 보시면, 타점에서 30주매도, 타점 1에서 30주 매도 총 60주가
매도 되었습니다.
타점, 타점 1이 따로따로 시스템식이 적용 되는것 같은데
어떻게 해야 할지 부탁드리겠습니다.
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
if MarketPosition == 1 Then
{
Condition1 = False;
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" Then
{
Condition1 = true;
Buy("타점1",OnClosE,DeF,Floor((베팅금)/타점*0.6));
}
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절 P618청산" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
#전봉대비 수량 감소(일부 청산발생을 위미)
if CurrentContracts < CurrentContracts[1] Then
{
#청산가 저장
var1 = LatestExitPrice(0);
if LatestExitName(0) == "타점 5%익절" or LatestExitName(0) == "타점1 5%익절" or LatestExitName(0) == "타점2 5%익절" Then
Condition11 = true;
if LatestExitName(0) == "타점 5%익절 P5청산" or LatestExitName(0) == "타점 10%익절" or LatestExitName(0) == "타점1 5%익절 P618청산"
or LatestExitName(0) == "타점1 10%익절" or LatestExitName(0) == "타점2 5%익절 P618청산" or LatestExitName(0) == "타점2 10%익절" Then
Condition22 = true;
if LatestExitName(0) == "타점 5%익절 P382청산" or LatestExitName(0) == "타점 10%익절 P618청산" or LatestExitName(0) == "타점1 5%익절 P5청산"
or LatestExitName(0) == "타점1 10%익절 P618청산" or LatestExitName(0) == "타점2 5%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P618청산" Then
Condition33 = true;
if LatestExitName(0) == "타점 10%익절 P5청산" or LatestExitName(0) == "타점1 10%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P5청산" Then
Condition44 = true;
}
#전봉대비 수량 증가(추가 진입발생을 의미)
if CurrentContracts > CurrentContracts[1] Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition11 = False;
Condition22 = False;
Condition33= False;
Condition44 = False;
}
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 10%익절",AtLimit,AvgEntryPrice*1.2,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 10%익절") and c <= P618 Then
ExitLong("타점 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점 10%익절 P618청산") and c <= P5 Then
ExitLong("타점 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절") and c <= P618 Then
ExitLong("타점1 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절 P618청산") and c <= 5 Then
ExitLong("타점1 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점1") Then
ExitLong("타점1 10%익절",AtLimit,latestEntryPrice*1.1,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 10%익절") and c <= P618 Then
ExitLong("타점1 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점1 10%익절 P618청산") and c <= P5 Then
ExitLong("타점1 10%익절 P5청산",AtLimit,P5,"",(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점2")Then
ExitLong("타점2 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절") and c <= P618 Then
ExitLong("타점2 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절 P618청산") and c <= 5 Then
ExitLong("타점2 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점2") Then
ExitLong("타점2 10%익절",AtLimit,latestEntryPrice*1.1,"",(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 10%익절") and c <= P618 Then
ExitLong("타점2 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점2 10%익절 P618청산") and c <= P5 Then
ExitLong("타점2 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
}
if MarketPosition == 1 and sTime > xtime and 손절 >= c Then
ExitLong("손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점1") and c <= latestEntryPrice*0.96 Then
ExitLong("5%돌파손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점2") and c <= latestEntryPrice*0.96 Then
ExitLong("10%돌파손절");
혹시 죄송하지만. 아래의 경우에도 매도 보다 매수를 먼저 순서를 바뀔 수는 없을까요??
예를 들어 매수도 봉 미완성시 진입 조건 같은거요??
왜냐하면 10프로 익절하고 살짝 눌리는 경우는 618될때까지 버텨야 하는데
10프로 익절 후에 살짝 눌렸다가 올라갈 때도, 돌파매수가 주문이 나가기 때문입니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : Re : Re : 시스템식 요청드립니다.
> 안녕하세요
예스스탁입니다.
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
첨부된 그림은 타점2 수식에서 최근 청산명만 변경해서 신호입니다.
"타점 10%익절"이 봉미완성시에 발생하는 신호이고
매수는 봉완성시이기에 최근 청산명 조건만 충족이 되고
종가가 전봉기준 최고값(HH[1])보다 크면 신호가 발생할 수 있습니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 답변 주셔서 감사합니다.
1번 항목은 퇴근 후 집에가서 다시한번 설정해보겠습니다.
2번 항목에 대해서 한번 수정해서 적용했던 내용이라 다시 한번 요청드립니다.
해당 항목을 가장최근진입명으로 변경하게 되면, C >= HH[1] 이 해당조건이
충족이 안되어서 매수가 진행이 안되더라구요
왜냐면 전고점이 10프로 익절되고, 전고점 변수가 바뀌게 되더라구요
그래서 10프로 익절 타점봉에서 매수와 매도가 동시에 가능하게 할수 있을까요??
아니면 혹시 다른 방법이 있으시다면 알려주세요.ㅜ.ㅜ
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
1
올리신 청산함수에 모두 처리해 드리기 어려우므로 아래 내용 응용해서 처리하시기 바랍니다.
"타점1 5%익절"이 "타점1" 진입후 1회만 발동하면 되므로
진입이 발생했는데 진입명이 "타점1"이면 변수에 true를 저장하고
"타점1 5%익절"이 발생하면 false로 설정하면 1회만 발생하게 할 수 있습니다.
즉 해당 청산이 발생하는 조건이면 지정한 변수를 true로 지정해서
해당 청산은 지정한 변수가 true일때만 발동하게 하고
해당 청산이 발동하면 지정한 변수를 false로 만들어서
다음에 다시 동일조건이 발생해서 true가 되지 전까지는 재발동되지 않게 하는 내용입니다.
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "타점1" Then
Condition99 = true;
}
if CurrentContracts < CurrentContracts[1] Then
{
if LatestExitName(0) == "타점1 5%익절" Then
Condition99 = False;
}
if (LatestEntryName(0) == "타점1") and Condition99 == true Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3,1);
2
각 추가진입에 지정한 이름을 확인하시기 바랍니다.
첨부하신 그림에서 "타점 10%익절"청산이 발생했는데
타점1,타점2 진입에 지정한 가장 최근 청산명은 다른이름입니다.
봉완성시 최근 발생한 진입은 "타점 10%익절"이고
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
위 처럼 변경하면 신호가 발생합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 어제 시스템식 요청했던 사람입니다.
말씀해준신대로 수량옵션에서 1로 적용했더니 동일시간에는 동시에 수량이 빠지는게 없어졌는데
추후에 말씀해주신 문제점도 그대로 발생하게 되었습니다.
((다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다))
해당 문제를 해결하기 위해서 "진입명"도 넣고 해봤는데, 제가 원하는 식은 아예 나오질 않더라구요
혹시 아래의 문제를 해결할 수 있는 방법은 없을까요???
그리고 두번째 문제점은 위의 그림을 보시면 전고점 돌파했을때 매수가 들어가는 부분이 있는데
갭상으로 전고점을 돌파하면서, 10% 익절 매도청산까지 나갔을 경우에 돌파매수가 안됩니다.
여러가지 방식으로 이것저것 넣어봤지만 안되는데, 혹시 해결할수 있는 방법이 있을까요?
---------------------------------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
현재식에서 수량옵션 1로 하시면
동일날짜에 30주가 청산신호가 나오게 되지만
타점에서 해당 수량이 빠지게 됩니다.
타점에서 진입된 수량이 30주가 안되면 다음진입신호에서 나머지수량이 차감되게 됩니다.
청산신호는 진입명을 지정하지 않으면
먼저 나온신호에서 해당 수량을 차감해 청산하게 됩니다.
또한 다른 문제도 있는데
다음봉에서 latestEntryPrice*1.05보다 큰 시세가
있으면 해당 청산이 또 발생하게 됩니다.
해당 청산식이 봉완성시 if조건이 만족하고
다음봉에서 atlimit 가격조건을 충족만 하면 발생하기 때문입니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 요청드립니다.
> 오호~~~ 감사합니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
에서 수량옵션을 1로 수정하면
동일날짜에 "타점"과 "타점1"에서 합쳐서 30주를 청산하게 되는게 맞는건가요??
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 요청드립니다.
>
안녕하세요
예스스탁입니다.
ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션);
청산함수는 위와같이 6개의 옵션을 지정할 수 있습니다.
현재 작성하신 청산식은
if 문으로 최근 진입명이나 청산명이 어떤 이름일때 동작하라는 내용만 있습니다.
1
5번째와 6번째는 수량과 수량관련 옵션입니다.
수량옵션을 0으로 지정하면 피라미딩시 각 진입별로 지정한 수량을 청산하게 됩니다.
수량옵션을 1로 지정하면 지정한 수량만 차감하게 됩니다.
수량옵션은 생략하면 0이 적용됩니다.
작성하신 수식에서는 모두 수량옵션이 생략이 되어 있어 수량옵션은 0이 적용되고
첨부하신 그림과 같이 2회 매수진입이 있고
동일날짜에 "타점"과 "타점1"에서 각각 30주씩 청산이 된 것입니다.
2
4번째 옵션이 진입명입니다.
청산함수에 진입명을 지정하면 해당진입명에서만 지정한 수량을 청산하게 됩니다.
올리신 수식에서는 진입명 옵션을 이용해 제어를 하셔야 합니다.
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"타점1",Floor(베팅금/타점)*0.3);
위와 같이 진입명에 "타점1"을 지정하시면
가장 최근 진입이 "타점1"이고 진입가에서 5% 상승하면
타점1에서만 30주 청산해라 라는 내용이 됩니다,
3
분할청산을 할 때는
청산함수의 4,5,6번 매개변수를 이용해 원하시는 내용으로 청산이 발생하게 제어를 하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 요청드립니다.
> 안녕하세요 수식을 작성하는데 어려움이 있어 이렇게 글을 남깁니다.
위의 그림 2, 3번을 보시면 대략적으로 그림으로 작성하였습니다.
타점 에서 100주 매수후 30주 매도 하고 중간에 30주 매도 해서 총 40주가 남은
상태에서 타점 1로 60주 매수해서 다시 100주가 되도록 맞췄습니다.
그런데 타점1 5% 익절에서 30주만 매도가 되어야 하는데
그림 1 성능보고서를 보시면, 타점에서 30주매도, 타점 1에서 30주 매도 총 60주가
매도 되었습니다.
타점, 타점 1이 따로따로 시스템식이 적용 되는것 같은데
어떻게 해야 할지 부탁드리겠습니다.
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
#고점갱신용 수식
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
#저점갱신용 수식
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
if MarketPosition == 1 Then
{
Condition1 = False;
If C >= HH[1] AND LatestExitName(0) == "타점 5%익절 P5청산" Then
{
Condition1 = true;
Buy("타점1",OnClosE,DeF,Floor((베팅금)/타점*0.6));
}
If C >= HH[1] AND LatestExitName(0) == "타점 10%익절 P618청산" Then
{
Condition1 = true;
Buy("타점2",OnClosE,DeF,Floor((베팅금)/타점*0.8));
}
#전봉대비 수량 감소(일부 청산발생을 위미)
if CurrentContracts < CurrentContracts[1] Then
{
#청산가 저장
var1 = LatestExitPrice(0);
if LatestExitName(0) == "타점 5%익절" or LatestExitName(0) == "타점1 5%익절" or LatestExitName(0) == "타점2 5%익절" Then
Condition11 = true;
if LatestExitName(0) == "타점 5%익절 P5청산" or LatestExitName(0) == "타점 10%익절" or LatestExitName(0) == "타점1 5%익절 P618청산"
or LatestExitName(0) == "타점1 10%익절" or LatestExitName(0) == "타점2 5%익절 P618청산" or LatestExitName(0) == "타점2 10%익절" Then
Condition22 = true;
if LatestExitName(0) == "타점 5%익절 P382청산" or LatestExitName(0) == "타점 10%익절 P618청산" or LatestExitName(0) == "타점1 5%익절 P5청산"
or LatestExitName(0) == "타점1 10%익절 P618청산" or LatestExitName(0) == "타점2 5%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P618청산" Then
Condition33 = true;
if LatestExitName(0) == "타점 10%익절 P5청산" or LatestExitName(0) == "타점1 10%익절 P5청산" or LatestExitName(0) == "타점2 10%익절 P5청산" Then
Condition44 = true;
}
#전봉대비 수량 증가(추가 진입발생을 의미)
if CurrentContracts > CurrentContracts[1] Then
{
#현재수량 저장
Var3 = CurrentContracts;
Var4 = AvgEntryPrice;
Condition11 = False;
Condition22 = False;
Condition33= False;
Condition44 = False;
}
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절") and c <= P5 Then
ExitLong("타점 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 5%익절 P5청산") and c <= P382 Then
ExitLong("타점 5%익절 P382청산",AtLimit,P382,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점") and Condition1 == False Then
ExitLong("타점 10%익절",AtLimit,AvgEntryPrice*1.2,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점 10%익절") and c <= P618 Then
ExitLong("타점 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점 10%익절 P618청산") and c <= P5 Then
ExitLong("타점 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점1")Then
ExitLong("타점1 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절") and c <= P618 Then
ExitLong("타점1 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 5%익절 P618청산") and c <= 5 Then
ExitLong("타점1 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점1") Then
ExitLong("타점1 10%익절",AtLimit,latestEntryPrice*1.1,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점1 10%익절") and c <= P618 Then
ExitLong("타점1 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점1 10%익절 P618청산") and c <= P5 Then
ExitLong("타점1 10%익절 P5청산",AtLimit,P5,"",(베팅금/타점)*0.2);
if (LatestEntryName(0) == "타점2")Then
ExitLong("타점2 5%익절",AtLimit,latestEntryPrice*1.05,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절") and c <= P618 Then
ExitLong("타점2 5%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 5%익절 P618청산") and c <= 5 Then
ExitLong("타점2 5%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.4);
if (LatestEntryName(0) == "타점2") Then
ExitLong("타점2 10%익절",AtLimit,latestEntryPrice*1.1,"",(베팅금/타점)*0.3);
if (LatestExitName(0) == "타점2 10%익절") and c <= P618 Then
ExitLong("타점2 10%익절 P618청산",AtLimit,P618,"",Floor(베팅금/타점)*0.2);
if (LatestExitName(0) == "타점2 10%익절 P618청산") and c <= P5 Then
ExitLong("타점2 10%익절 P5청산",AtLimit,P5,"",Floor(베팅금/타점)*0.2);
}
if MarketPosition == 1 and sTime > xtime and 손절 >= c Then
ExitLong("손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점1") and c <= latestEntryPrice*0.96 Then
ExitLong("5%돌파손절");
if MarketPosition == 1 and (LatestEntryName(0) == "타점2") and c <= latestEntryPrice*0.96 Then
ExitLong("10%돌파손절");