커뮤니티

새해복 많이 받으세요. 수식부탁드립니다.

프로필 이미지
율담
2018-12-31 22:27:27
3084
글번호 224697
답변완료
안녕하세요. 미리 감사의 말씀 드립니다. 1. A 시스템의 직전거래가 손실일 경우에만, 진입하고 싶습니다.(시스템과 같은방향, 같은종목 진입입니다.) 2. 처음 진입은 1계약 진입하며, 손실거래시 다음 진입은 2계약 진입합니다. ( 계약수를 1계약씩 계속 늘리고 싶습니다.) 3. 수익 거래시 계약수는 1계약으로 초기화 합니다. 4. 본전거래는 손실거래로 취급합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-01-10 15:00:14

안녕하세요 예스스탁입니다. 스팟에 시스템의 이전거래의 손익을 알수 있는 함수가 없습니다. 스팟에서 차트의 신호는 실시간에서 신호가 발생하면 신호 정보만 이벤트로 받기 때문에 스팟식으로 시스템의 이전거래를 판단하는 것은 어렵습니다. 그러므로 해당 내용은 시스템 수식안에서 이전거래가 수익일때 진입하는 신호와 손실일때 진입하는 신호를 구분해서 이름을 부여한 다음에 스팟에서는 발생하는 신호의 명칭으로 주문여부등을 결정하게 작성해야 합니다. 스팟은 신호가 발생하면 신호의 명칭을 전달받습니다. 아래 내용은 시스템수식과 스팟수식의 작성예입니다. 스팟에 관련된 내용은 가이드 이므로 아래 내용을 참고하셔서 수정보완해 사용하시기 바랍니다. 1 예스랭귀지 시스템 수식 #매수진입조건 만족시 직전거래가 수익이면 1개 진입이고 이름은 "수익후매수진입" #매수진입조건 만족시 직전거래가 손실이면 직전거래진입수량+1개 진입이고 이름은 "손실후매수진입" if 매수진입조건 then { if (MarketPosition == 0 and PositionProfit(1) > 0) or (MarketPosition == -1 and C < EntryPrice) Then buy("수익후매수진입",OnClose,def,1); if (MarketPosition == 0 and PositionProfit(1) <= 0) or (MarketPosition == -1 and C >= EntryPrice) Then buy("손실후매수진입",OnClose,def,iff(MarketPosition == 0,MaxContracts(1)+1,MaxContracts+1)); } #매도진입조건 만족시 직전거래가 수익이면 1개 진입이고 이름은 "수익후매도진입" #매도진입조건 만족시 직전거래가 손실이면 직전거래진입수량+1개 진입이고 이름은 "손실후매도진입" if 매도진입조건 then { if (MarketPosition == 0 and PositionProfit(1) > 0) or (MarketPosition == 1 and C > EntryPrice) Then sell("수익후매도진입",OnClose,def,1); if (MarketPosition == 0 and PositionProfit(1) <= 0) or (MarketPosition == 1 and C <= EntryPrice) Then Sell("손실후매도진입",OnClose,def,iff(MarketPosition == 0,MaxContracts(1)+1,MaxContracts+1)); } 2 스팟수식 스크립트 객체설정 계좌객체 추가 --> 속성에서 객체명은 Chart1, 신호받을 차트와 아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketPosition, 차트와 같은 종목으로 종목선택 계좌객체 추가 --> 속성에서 객체명은 Account1, 주문낼 계좌번호 지정 var T,BuyVol,SellVol,BID,SID,Bnum,Snum; function Main_OnStart() { Main.MessageList("Spot Start") T = 0; } //차트에서 신호 발생 function Chart1_OnRiseSignal(Signal) { //Buy신호 발생하고 신호의 명칭이 "손실후매수진입"이면 if (Signal.signalKind == 1 && Signal.name == "손실후매수진입") { T = 1; //신호수량 BuyVol = Signal.count; //매도3호가로 신호수량으로 매수주문 BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), BuyVol, MarketData1.Ask(3), 0); } //exitlong신호 발생하면 if ( T == 1 && Signal.signalKind == 2) { T = 0; //매수진입 미체결이 있으면 취소주문 Account1.SetUnfill(Bnum); if (Account1.Unfill.count > 0) { Account1.OrderCancel(Bnum); } //잔고에 매수포지션 수량이 있으면 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0) if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //매수3호가로 잔고수량 전량 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count ,MarketData1.Bid(3), 0); } } //Sell신호 발생하고 신호의 명칭이 "손실후매도진입"이면 if (Signal.signalKind == 3 && Signal.name == "손실후매도진입") { T = -1; //신호수량 저장 SellVol = Signal.count; //매수3호가로 신호발생수량으로 매도주문 SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Bid(3), 0); } //exitshort신호 발생하면 if ( T == -1 && Signal.signalKind == 4) { T = 0; //매도진입 미체결이 있으면 취소주문 Account1.SetUnfill(Snum); if (Account1.Unfill.count > 0) { Account1.OrderCancel(Snum); } //잔고에 매도포지션 수량이 있으면 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //매도3호가로 잔고수량 전량 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count ,MarketData1.Ask(3), 0); } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { Bnum = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { Snum = OrderResponse.orderNum; } } 즐거운 하루되세요 > 율담 님이 쓴 글입니다. > 제목 : 새해복 많이 받으세요. 수식부탁드립니다. > 안녕하세요. 미리 감사의 말씀 드립니다. 1. A 시스템의 직전거래가 손실일 경우에만, 진입하고 싶습니다.(시스템과 같은방향, 같은종목 진입입니다.) 2. 처음 진입은 1계약 진입하며, 손실거래시 다음 진입은 2계약 진입합니다. ( 계약수를 1계약씩 계속 늘리고 싶습니다.) 3. 수익 거래시 계약수는 1계약으로 초기화 합니다. 4. 본전거래는 손실거래로 취급합니다.