예스스탁
예스스탁 답변
2013-08-19 19:11:22
안녕하세요
예스스탁입니다.
1.
현재 강제청산 함수도 이름이 개별적으로 리턴됩니다.
각 강제청산함수는 set을 제외한 부분이 이름으로 리턴이 됩니다.
해당 이름은 예스랭귀지에서도 아래와 같이 리턴되고 그대로 스팟으로 이름이 전달됩니다.
StopLoss
StopProfittarget
StopTrailing
StopInactivity
StopEndofday
스팟수식에서는 와 같이 강제청산 이름으로 구별해 사용하시면 됩니다.
if (Signal.signalKind == 2 && Signal.name == "StopLoss")
실행문;
if (Signal.signalKind == 4 && Signal.name == "StopLoss")
실행문;
2.
리포트에 임의의 이름이 부여되는 경우는 청산함수에 이름이 없을 경우와
반대방향 신호로 리버스 되었을 때이며 임의로 이름이 부여됩니다.
청산의 경우에 청산함수에 의해 청산이 되는 경우가 있고
반대방향 진입에 의해 청산이 되는 경우가 있습니다.
수식에 사용된 exitlong이나 exitshort에 의한 청산이면 이름 앞에 _가 부여되고
_ExitLongNo1, _ExitLongNo2
_ExitshortNo1, _ExitShortNo2와
리버스에 의한 청산은 중간에 _가 부여되고 번호가 부여됩니다.
ExitLong_#0, ExitLong_#1, ExitLong_#2
ExitShort_#0,ExitShort_#1,ExitShort_#2
다만 임의로 붙는 숫자는 수식 작성상 위에서 아래이지만
내부적인 카운트가 있어 번호가 고르지는 않습니다.
그러므로 _의 위치로 리버스로 청산된 것인지 여부를 구별해 보실수 있습니다.
자바스크립트 자체에서 제공되는 string과련 함수들을 이용해
신호이 이름중 _의 위치로 리버스청산인지 아닌지도 판별하실 수 있습니다.
3.
가장 좋은 방법은 강제청산은 고정이름으로 리턴이 되므로
예스스팟에서 시스템의 신호 이름을 리턴받아 사용하시고자 하면
시스템식에서 사용하는 모든 buy,sell,exitlong,exitshort에 이름을 부여하시고
차트에 적용하셔야 합니다.
4
요청하신 부분들은 고려를 해보도록 하겠습니다.
즐거운 하루되세요
> 즐겁게 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 예스스팟에서, 차트에서의 진입명 및 청산명을 하나 하나 명확히 구분해서 그 것의 미체결주문, 미결제잔고 등을 처리하려고 합니다. (Signal.name을 이용해서...)
그런데, 보통 Buy, ExitLong, Sell, ExitShort 등에서는, 제가 그 진입 내지 청산명을 정해 주면 되니까 아무 어려움이 없는데,
SetStopㅇㅇㅇㅇㅇ과 같이, 강제청산함수들에 의해 청산된 경우는, 청산명을 제가 부여할 수가 없으니, 그런 경우에는 어떻게 해야 스팟에서 강제청산 하나 하나를 구분하여 처리할 수 있을지요?
1.
시스템 성능 보고서에서 볼 수 있는 바와 같이, ExitLong_#?, ExitShort_#? 형태로 청산명이 나타나게 될 때, 그 숫자 ?의 결정 규칙이 있는지요?
(즉,
a. 단순한 리버스의 경우에 새로운 진입과 동시에 이루어지는 Exit에서, 매수청산되는 경우,
b. 단순한 리버스의 경우에 새로운 진입과 동시에 이루어지는 Exit에서, 매도청산되는 경우,
c. SetStopLoss에 의해 매수청산되는 경우,
d. SetStopLoss에 의해 매도청산되는 경우,
e. SetStopTrailing에 의해 매수청산되는 경우,
f. SetStopTrailing에 의해 매도청산되는 경우,
이런 여섯가지의 각기 다른 청산들에 대해 ExitLong_#?, ExitShort_#?의 숫자 ?가 정해지는 어떤 명확한 규칙이 있는지요?)
(지금 시스템 성능 보고서를 보면, 여러 번 청산이 이루어졌으나, 제가 부여한 청산명 이외의 청산명은 오직
ExitShort_#0
ExitLong_#2
ExitShort_#4
ExitLong_#6
이 네가지만 있습니다. 1, 3, 5, 7, 9 등의 숫자도 없고요... 강제청산은 한 번도 없었던 것으로 보입니다. [강제청산함수들을 다 주석처리해도 결과가 같습니다]
이 네가지 이름이 생기는, 어떤 규칙 같은 것이 있는 것인지요?)
2.
일목요연하게, 또 정확히 규칙적으로 이런 강제청산함수의 청산명을 이용할 수 있는 방법이 없다면,
제가 스스로 이 강제청산함수를 쓰지 말고, AtStop, AtLimit 등을 이용하여 강제청산함수의 내용을 ExitLong, ExitShort로 실행시켜 주는 것 외에는 다른 방법이 없는 것인지가 궁금합니다.
3.
궁극적으로,
강제청산함수들(SetStopㅇㅇㅇㅇㅇ...) 속에서, 파라메터를 추가해서, 청산명을 지정할 수 있도록, 함수들을 수정해 주시면 가장 좋겠다고 생각이 됩니다.
이렇게 함수를 수정(청산명 파라메터 추가)해 주실 수 있으실지요?
(이 것은 아마도 스팥 사용자가 늘어날수록 이 강제청산함수 청산명 파라메터 수요가 늘어 날 걸로 예상이 되기 때문에, 필요한 조치가 아닐까 생각됩니다.
스팟이 주문 관리에 가장 강점이 있다고 볼 때,
강제청산함수에 의한 청산신호도 결국 주문신호로서 Signal.kind 2 아니면 4가 될텐데,
이 것에 따른 스팟 주문(OrderBuy와 OrderSell)이, Signal.kind 1 내지 3에 의한 스팟 주문과 실질적으로 구분하기 어려운 상황이라면,
전체적인 스팟 소스를 짜는데 있어서 어려움이 있을 수 있겠고,
그 것은 결국 기존의 Buy, ExitLong, Sell, ExitShort 함수에 따른 진입신호 구분에 더해서,
여러 가지 강제청산함수들에 따른 각각 상이한 청산신호들도 다 이름을 통해 구분할 수 있게 함으로써
주문, 잔고 관리를 좀 더 개선할 수 있게 되지 않을까 생각이 됩니다)
4.
만일 위 3번과 같이 YesLanguage 쪽을 변경하시는 것이 불가능하다면,
YesSpot쪽에서, 가령
SetStopLoss로 매수청산되는 경우를 Signal.kind == 5로 하고
SetStopLoss로 매도청산되는 경우를 Signal.kind == 6으로 하고,
SetStopTrailing로 매수청산되는 경우를 Signal.kind == 7로 하고
SetStopTrailing로 매도청산되는 경우를 Signal.kind == 8로 하고
...
하는 식으로
SetStopㅇㅇㅇㅇㅇ... 함수들의 신호 구분을 Signal.kind에서 나타내 줄 수 있게
YesSpot을 변경하실 수는 없을지요?
(예스랭귀지 속에서, 각각의 강제청산함수들의 이름을 달리 할 수 있게만 되면 그 게 가장 좋겠다고 생각됩니다. 그 게 아니라면, 적어도 이렇게 신호타입만이라도 예스스팟에서 구분해서 사용할 수 있게 되어도 어느 정도는 지금보다는 좀 더 세분해서 주문을 관리할 수 있게 될 것 같습니다)
감사합니다.