커뮤니티

수식 문의 드립니다

프로필 이미지
회원
2013-06-05 10:35:55
258
글번호 63998
답변완료
안녕하세요 수식 작성을 도와주셔서 아래 수식을 잘사용하고 있습니다. 아래 수식중에서 매수, 매도 미완성 신호는 신호가 잘나옵니다... 그런데.. 매수청산, 매도청산 또는 손절매 신호는 한번도 안나옵니다... 1. 혹시 수식에 오류가 있는지 점검 부탁드립니다..^^ 2. 그리고 진입가 대비 -0.25 포인트 이면 자동 손절 수식도 삽입 부탁드립니다. ^^ //차트객체명 Chart1 --> 속성에서 차트아이디 연결 //계좌객체명 Account1 --> 속성에서 계좌선택 var cnt; var BID; var SID; var BXID; var SXID; function Main_OnStart() { Main.MessageLog("시작"); cnt = 0; } //봉완성(시가수신) 카운트 0로 초기화 function Chart1_OnBarAppended(nData) { if (nData == 1) cnt = 0; } //미완성 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //차트가 무포지션이거나 매도포지션 상태일 때 Buy미완성신호 발생하면 매수 if (cnt == 0 && IncompleteSignal.signalKind == 1 && Chart1.GetOpenContracts() <= 0) { BID = Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code),1,MarketData1.Ask(1),0); //주문수량,주문가격(Ask(1):매도1호가)),가격구분(1:시장가,0:지정가) cnt = 1; Main.MessageList("미완성 매수신호 발생"); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } if (cnt == 0 && IncompleteSignal.signalKind == 3 && Chart1.GetOpenContracts() <= 0) { SID = Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, MarketData1.Bid(1), 0);//주문수량,주문가격,가격구분(1:시장가,0:지정가) cnt = 1; Main.MessageList("미완성 매도신호 발생"); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 2 && Chart1.GetOpenContracts() >= 1) { Main.MessageList("완성 매수청산신호 발생"); BXID = Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, MarketData1.Bid(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } if (Signal.signalKind == 4 && Chart1.GetOpenContracts() <= -1) { Main.MessageList("완성 매도청산신호 발생"); SXID = Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, MarketData1.Bid(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID ) { BNUM = OrderResponse.orderNum; Main.SetTimer(1, 60000); } if (OrderResponse.orderID == SID ) { SNUM = OrderResponse.orderNum; Main.SetTimer(2, 60000); } if (OrderResponse.orderID == BXID ) { BXNUM = OrderResponse.orderNum; Main.SetTimer(3, 60000); } if (OrderResponse.orderID == SXID ) { SXNUM = OrderResponse.orderNum; Main.SetTimer(4, 60000); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfillOrderNumber(BNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfillOrderNumber(SNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM); } } if (nEventID == 3) { Main.KillTimer(3); Account1.SetUnfillOrderNumber(BXNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BXNUM); } } if (nEventID == 4) { Main.KillTimer(4); Account1.SetUnfillOrderNumber(SXNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SXNUM); } } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-06-05 17:39:05

안녕하세요 예스스탁입니다. 1. 식상 문제가 될만한 부분은 없는 것 같습니다. 청산식은 차트에서 완성신호로 exitlong이나 exitshort신호가 발생하면 발생하게 되어 있습니다. 시스템이 적용된 차트에서 해당 신호가 발생하는지 확인하셔야 합니다. 2. 0.25손실나면 청산하는 식을 추가했습니다. 수식내에 게시판에 사용될수 없는 문자들이 있어 압출파일로 올려드립니다. 압축푸시면 텍스트 파일보실수 있습니다. 즐거운 하루되세요 > HI_cbk4610 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다 > 안녕하세요 수식 작성을 도와주셔서 아래 수식을 잘사용하고 있습니다. 아래 수식중에서 매수, 매도 미완성 신호는 신호가 잘나옵니다... 그런데.. 매수청산, 매도청산 또는 손절매 신호는 한번도 안나옵니다... 1. 혹시 수식에 오류가 있는지 점검 부탁드립니다..^^ 2. 그리고 진입가 대비 -0.25 포인트 이면 자동 손절 수식도 삽입 부탁드립니다. ^^ //차트객체명 Chart1 --> 속성에서 차트아이디 연결 //계좌객체명 Account1 --> 속성에서 계좌선택 var cnt; var BID; var SID; var BXID; var SXID; function Main_OnStart() { Main.MessageLog("시작"); cnt = 0; } //봉완성(시가수신) 카운트 0로 초기화 function Chart1_OnBarAppended(nData) { if (nData == 1) cnt = 0; } //미완성 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //차트가 무포지션이거나 매도포지션 상태일 때 Buy미완성신호 발생하면 매수 if (cnt == 0 && IncompleteSignal.signalKind == 1 && Chart1.GetOpenContracts() <= 0) { BID = Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code),1,MarketData1.Ask(1),0); //주문수량,주문가격(Ask(1):매도1호가)),가격구분(1:시장가,0:지정가) cnt = 1; Main.MessageList("미완성 매수신호 발생"); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } if (cnt == 0 && IncompleteSignal.signalKind == 3 && Chart1.GetOpenContracts() <= 0) { SID = Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, MarketData1.Bid(1), 0);//주문수량,주문가격,가격구분(1:시장가,0:지정가) cnt = 1; Main.MessageList("미완성 매도신호 발생"); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 2 && Chart1.GetOpenContracts() >= 1) { Main.MessageList("완성 매수청산신호 발생"); BXID = Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, MarketData1.Bid(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } if (Signal.signalKind == 4 && Chart1.GetOpenContracts() <= -1) { Main.MessageList("완성 매도청산신호 발생"); SXID = Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, MarketData1.Bid(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩sound₩alert.wav"); } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID ) { BNUM = OrderResponse.orderNum; Main.SetTimer(1, 60000); } if (OrderResponse.orderID == SID ) { SNUM = OrderResponse.orderNum; Main.SetTimer(2, 60000); } if (OrderResponse.orderID == BXID ) { BXNUM = OrderResponse.orderNum; Main.SetTimer(3, 60000); } if (OrderResponse.orderID == SXID ) { SXNUM = OrderResponse.orderNum; Main.SetTimer(4, 60000); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfillOrderNumber(BNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfillOrderNumber(SNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM); } } if (nEventID == 3) { Main.KillTimer(3); Account1.SetUnfillOrderNumber(BXNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BXNUM); } } if (nEventID == 4) { Main.KillTimer(4); Account1.SetUnfillOrderNumber(SXNUM); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SXNUM); } } }