커뮤니티

수식 부탁드립니다

프로필 이미지
미송
2015-04-27 22:48:21
2300
글번호 223448
답변완료
현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
답변 7
프로필 이미지

예스스탁 예스스탁 답변

2015-05-07 19:28:34

안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
프로필 이미지

미송

2015-05-12 02:15:55

보내주신 예스스팟을 적용했는데 첨부와 같은 오류가 뜨네요 책에서 나온 내용을 토대로 수식을 검토해봐도 틀린데가 없어보이긴 한데 왜 그런지 모르겠어요 수식 검토 한번만 더 부탁드립니다 var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
프로필 이미지

예스스탁 예스스탁 답변

2015-05-12 14:49:30

안녕하세요 예스스탁입니다. 해외선물은 주문함수의 인자값이 다릅니다. 시장가가 1, 지정가가 2 입니다. 예스스탁 홈페이지의 제품소개에 사용하시는 해외선물 프로그램의 페이지 가시면 스팟 메뉴얼이 따로 있습니다. 국내와 큰 차이는 없고 주문시 주문구분값이 다르며 해외선물사에 따라 데이터의 시간이 HHMMSS(6자리)로만 리턴하는 선물사가 있고 1/10000초로 10자리로 제공하는 선물사도 있습니다. 이용에 참고하시기 바랍니다. var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 2); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 2); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 2); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 2); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : 수식 수정 부탁드립니다 > 보내주신 예스스팟을 적용했는데 첨부와 같은 오류가 뜨네요 책에서 나온 내용을 토대로 수식을 검토해봐도 틀린데가 없어보이긴 한데 왜 그런지 모르겠어요 수식 검토 한번만 더 부탁드립니다 var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
프로필 이미지

미송

2015-05-12 16:34:37

주문함수 인자값을 바꿨더니 주문이 첨부화면처럼 오류에서 시험 적용으로 바뀌어 정상적으로 주문이 들어갑니다 그런데 주문이 5호가 아래로 매수주문이 들어갔음에도 체결이 되지 않습니다 실제 주문이 아니라서 체결이 안되는 건가요? 체결내역이나 미체결 내역을 봐도 주문내역이 안나오구요 주문이 체결이 안되니 미완성 청산신호가 나와도 아무 주문이 안나옵니다 한번 봐주세요 참고로 사용 증권사는 현대선물입니다 많은 도움을 주셔서 항상 감사드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 수식 수정 부탁드립니다 > 안녕하세요 예스스탁입니다. 해외선물은 주문함수의 인자값이 다릅니다. 시장가가 1, 지정가가 2 입니다. 예스스탁 홈페이지의 제품소개에 사용하시는 해외선물 프로그램의 페이지 가시면 스팟 메뉴얼이 따로 있습니다. 국내와 큰 차이는 없고 주문시 주문구분값이 다르며 해외선물사에 따라 데이터의 시간이 HHMMSS(6자리)로만 리턴하는 선물사가 있고 1/10000초로 10자리로 제공하는 선물사도 있습니다. 이용에 참고하시기 바랍니다. var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 2); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 2); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 2); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 2); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : 수식 수정 부탁드립니다 > 보내주신 예스스팟을 적용했는데 첨부와 같은 오류가 뜨네요 책에서 나온 내용을 토대로 수식을 검토해봐도 틀린데가 없어보이긴 한데 왜 그런지 모르겠어요 수식 검토 한번만 더 부탁드립니다 var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
프로필 이미지

예스스탁 예스스탁 답변

2015-05-12 16:55:53

안녕하세요 예스스탁입니다. 예 시험적용은 실제 주문이 집행되지 않습니다. 주문함수가 동작하면 실제 주문은 되지 않고 하단에 전체탭에 시간등만 표시만 해주게 됩니다. 현대선물 프로그램에서 로그인 하실때 로그인화면에서 설정화면에 들어가시면 모의투자가 있습니다. 모의투자에 접속하셔서 자동주문하시고 테스트 하시면서 스팟식 다듬어 가시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : 수식 수정 부탁드립니다 > 주문함수 인자값을 바꿨더니 주문이 첨부화면처럼 오류에서 시험 적용으로 바뀌어 정상적으로 주문이 들어갑니다 그런데 주문이 5호가 아래로 매수주문이 들어갔음에도 체결이 되지 않습니다 실제 주문이 아니라서 체결이 안되는 건가요? 체결내역이나 미체결 내역을 봐도 주문내역이 안나오구요 주문이 체결이 안되니 미완성 청산신호가 나와도 아무 주문이 안나옵니다 한번 봐주세요 참고로 사용 증권사는 현대선물입니다 많은 도움을 주셔서 항상 감사드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 수식 수정 부탁드립니다 > 안녕하세요 예스스탁입니다. 해외선물은 주문함수의 인자값이 다릅니다. 시장가가 1, 지정가가 2 입니다. 예스스탁 홈페이지의 제품소개에 사용하시는 해외선물 프로그램의 페이지 가시면 스팟 메뉴얼이 따로 있습니다. 국내와 큰 차이는 없고 주문시 주문구분값이 다르며 해외선물사에 따라 데이터의 시간이 HHMMSS(6자리)로만 리턴하는 선물사가 있고 1/10000초로 10자리로 제공하는 선물사도 있습니다. 이용에 참고하시기 바랍니다. var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 2); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 2); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 2); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 2); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : 수식 수정 부탁드립니다 > 보내주신 예스스팟을 적용했는데 첨부와 같은 오류가 뜨네요 책에서 나온 내용을 토대로 수식을 검토해봐도 틀린데가 없어보이긴 한데 왜 그런지 모르겠어요 수식 검토 한번만 더 부탁드립니다 var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
프로필 이미지

미송

2015-05-14 23:33:35

자꾸 질문드려 죄송합니다 모의투자 자동주문으로 실행한 결과 진입 주문은 첨부화면과 같이 잘 진입이 됩니다 진입 당시 미완성봉 기준으로는 진입 조건을 충족해서 진입하였으나 완성봉 기준으로는 진입 조건이 충족 안되어 챠트에서는 진입 신호가 안나왔습니다 이후 미완성봉기준 청산기준이 충족되었지만 챠트에서 미완성봉 기준 청산신호가 나오지 않아(진입신호가 안 나와서 청산신호도 안 나오는 것 같음) 청산이 되지 않고 있읍니다 번거럽더라도 수정 부탁드립니다 항상 감사드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : Re : 수식 수정 부탁드립니다 > 안녕하세요 예스스탁입니다. 예 시험적용은 실제 주문이 집행되지 않습니다. 주문함수가 동작하면 실제 주문은 되지 않고 하단에 전체탭에 시간등만 표시만 해주게 됩니다. 현대선물 프로그램에서 로그인 하실때 로그인화면에서 설정화면에 들어가시면 모의투자가 있습니다. 모의투자에 접속하셔서 자동주문하시고 테스트 하시면서 스팟식 다듬어 가시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : 수식 수정 부탁드립니다 > 주문함수 인자값을 바꿨더니 주문이 첨부화면처럼 오류에서 시험 적용으로 바뀌어 정상적으로 주문이 들어갑니다 그런데 주문이 5호가 아래로 매수주문이 들어갔음에도 체결이 되지 않습니다 실제 주문이 아니라서 체결이 안되는 건가요? 체결내역이나 미체결 내역을 봐도 주문내역이 안나오구요 주문이 체결이 안되니 미완성 청산신호가 나와도 아무 주문이 안나옵니다 한번 봐주세요 참고로 사용 증권사는 현대선물입니다 많은 도움을 주셔서 항상 감사드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 수식 수정 부탁드립니다 > 안녕하세요 예스스탁입니다. 해외선물은 주문함수의 인자값이 다릅니다. 시장가가 1, 지정가가 2 입니다. 예스스탁 홈페이지의 제품소개에 사용하시는 해외선물 프로그램의 페이지 가시면 스팟 메뉴얼이 따로 있습니다. 국내와 큰 차이는 없고 주문시 주문구분값이 다르며 해외선물사에 따라 데이터의 시간이 HHMMSS(6자리)로만 리턴하는 선물사가 있고 1/10000초로 10자리로 제공하는 선물사도 있습니다. 이용에 참고하시기 바랍니다. var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 2); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 2); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 2); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 2); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : 수식 수정 부탁드립니다 > 보내주신 예스스팟을 적용했는데 첨부와 같은 오류가 뜨네요 책에서 나온 내용을 토대로 수식을 검토해봐도 틀린데가 없어보이긴 한데 왜 그런지 모르겠어요 수식 검토 한번만 더 부탁드립니다 var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다
프로필 이미지

예스스탁 예스스탁 답변

2015-05-19 17:19:59

> 미송 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : Re : Re : 수식 수정 부탁드립니다 > 자꾸 질문드려 죄송합니다 모의투자 자동주문으로 실행한 결과 진입 주문은 첨부화면과 같이 잘 진입이 됩니다 진입 당시 미완성봉 기준으로는 진입 조건을 충족해서 진입하였으나 완성봉 기준으로는 진입 조건이 충족 안되어 챠트에서는 진입 신호가 안나왔습니다 이후 미완성봉기준 청산기준이 충족되었지만 챠트에서 미완성봉 기준 청산신호가 나오지 않아(진입신호가 안 나와서 청산신호도 안 나오는 것 같음) 청산이 되지 않고 있읍니다 번거럽더라도 수정 부탁드립니다 항상 감사드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : Re : 수식 수정 부탁드립니다 > 안녕하세요 예스스탁입니다. 예 시험적용은 실제 주문이 집행되지 않습니다. 주문함수가 동작하면 실제 주문은 되지 않고 하단에 전체탭에 시간등만 표시만 해주게 됩니다. 현대선물 프로그램에서 로그인 하실때 로그인화면에서 설정화면에 들어가시면 모의투자가 있습니다. 모의투자에 접속하셔서 자동주문하시고 테스트 하시면서 스팟식 다듬어 가시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : 수식 수정 부탁드립니다 > 주문함수 인자값을 바꿨더니 주문이 첨부화면처럼 오류에서 시험 적용으로 바뀌어 정상적으로 주문이 들어갑니다 그런데 주문이 5호가 아래로 매수주문이 들어갔음에도 체결이 되지 않습니다 실제 주문이 아니라서 체결이 안되는 건가요? 체결내역이나 미체결 내역을 봐도 주문내역이 안나오구요 주문이 체결이 안되니 미완성 청산신호가 나와도 아무 주문이 안나옵니다 한번 봐주세요 참고로 사용 증권사는 현대선물입니다 많은 도움을 주셔서 항상 감사드립니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 수식 수정 부탁드립니다 > 안녕하세요 예스스탁입니다. 해외선물은 주문함수의 인자값이 다릅니다. 시장가가 1, 지정가가 2 입니다. 예스스탁 홈페이지의 제품소개에 사용하시는 해외선물 프로그램의 페이지 가시면 스팟 메뉴얼이 따로 있습니다. 국내와 큰 차이는 없고 주문시 주문구분값이 다르며 해외선물사에 따라 데이터의 시간이 HHMMSS(6자리)로만 리턴하는 선물사가 있고 1/10000초로 10자리로 제공하는 선물사도 있습니다. 이용에 참고하시기 바랍니다. var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 2); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 2); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 2); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 2); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : Re : Re : 수식 수정 부탁드립니다 > 보내주신 예스스팟을 적용했는데 첨부와 같은 오류가 뜨네요 책에서 나온 내용을 토대로 수식을 검토해봐도 틀린데가 없어보이긴 한데 왜 그런지 모르겠어요 수식 검토 한번만 더 부탁드립니다 var T; var Entry; var EntryCnt; var Exit; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 // for (var i = -LNum ; i <= unum; i++) for (var i = 0 ; i < unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 부탁드립니다 > 안녕하세요 예스스탁입니다. 이전에 전화로 잠깐 설명드린 부분과 같이 시스템식과 스팟을 연동하셔야 합니다. Input : Period(20), dv1(1),dv2(0); var : MAv(0),BBup1(0),BBdn1(0),BBup2(0),BBdn2(0); MAv = ma(C,Period); BBup1 = BollBandUp(Period,dv1); BBdn1 = BollBandDown(Period,dv1); BBup2 = BollBandUp(Period,dv2); BBdn2 = BollBandDown(Period,dv2); if crossup(c,bbup2) Then buy(); if CrossDown(c,bbup1) Then ExitLong(); if CrossDown(c,bbdn2) Then sell(); if CrossUp(c,bbdn1) Then ExitShort(); 위 식을 시스템식으로 작성하신 후에 차트에 적용하시고 차트에서 미완성 신호가 발생하면 스팟으로 주문내게 하셔야 합니다. 스팟식은 아래와 같습니다. 스팟수식 답변은 가이드 정도입니다. 아래내용과 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면 설정은 아래와 같습니다. 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디 연결 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 같은종목으로 지정 var T; var Entry; var EntryCnt; function Main_OnStart() { T = 0; Main.MessageList("Spot Start"); Entry = false; Exit = false; EntryCnt = 0; } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //Entry는 true(하나의 봉에서 처음발생하는 진입신호만 판단하기 위한 변수) Entry = true; //Exit는 true(하나의 봉에서 처음발생하는 청산신호만 판단하기 위한 변수) Exit = true; } //미완성신호발생 function Chart1_OnRiseIncompleteSignal(IncompleteSignal) { //Entry가 true인 상태에서 매수미완성신호 발생하면 if (Entry == true && T >= 0 && IncompleteSignal.signalKind == 1) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Buy-미완성신호 발생"); //매수신호라는 의미로 1 T = 1; //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //잔고에 포지션이 없거나 //매수포지션인데 5개미만으로 수량을 가지고 있을때만 //매도5호가로 1계약 매수주문 if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 2)) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0); } } //Exit가 true인 상태이고 최근 미완성매수가 발생했었고 현재 미완성 매수청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 2) { //Exit는 false로 만들어 현재 봉에서는 더이상 체크안함 Exit = false; Main.MessageList("Exitlong-미완성신호 발생"); //청산&#46124;다는 의미로 0 T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매수포지션이면 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 2) Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } //Entry가 true인 상태에서 매도미완성신호 발생하면 if (Entry == true && T <= 0 && IncompleteSignal.signalKind == 3) { //Entry는 false로 만들어 현재 봉에서는 더이상 체크안함 Entry = false; Main.MessageList("Sell-미완성신호 발생"); //최근 발생된 신호가 매도미완성이라는 의미로 -1저장 T = -1; //잔고에 포지션이 없거나 //매도포지션인데 5개미만으로 수량을 가지고 있을때만 //매수5호가로 1계약 매도주문 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); if (Account1.Balance.count == 0 || (Account1.Balance.count >= 1 && Account1.Balance.count < 5 && Account1.Balance.position == 1)) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0); } } //Exit가 true인 상태이고 최근 미완성매도가 발생했었고 현재 미완성 매도청산신호 발생하면 if (Exit == true && T == 1 && IncompleteSignal.signalKind == 4) { Exit = false; Main.MessageList("Exitshort-미완성신호 발생"); T = 0; //전체 미체결수 var unum = Account1.GetTheNumberOfUnfills(); //전체 미체결들 중에 for (var i = -LNum; i <= unum; i++) { //차트종목이면 모두 취소 if (Account1.Unfill.code == Main.GetOrderCode(Chart1.GetCode(1))) { Account1.OrderCancel(Account1.Unfill.orderNum) } } //잔고 셋팅하고 Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)),0); //수량이 1이상이고 매도포지션이면 매도5호가로 전량청산 if (Account1.Balance.count >= 1 && Account1.Balance.position == 1) Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } } 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 현재가가 스토케스틱 (20.2)를 적용한 지표를 상하방 돌파할 경우 진입 진입 후 현재가가 조정, 반등이 발생하여 매수진입의 경우 현재가가 스토케스틱 (20.1) 지표 수식선을 상방 돌파할때, 매도 진입의 경우 현재가가 (20.1)선을 하방 돌파할때 청산하는 조건입니다 항상 감사합니다 안녕하세요 예스스탁입니다. 문의하신 내용은 예스스팟을 이용해야 하므로 스팟쪽 게시판에 이후에 답변드리겠습니다. 신호발생은 시스템으로 주문은 스팟에서 처리해야 합니다. 다만 문의하신 내용의 청산조건이 불명확합니다. "진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다" 위 내용은 좀더 구체적인 내용을 보강해서 스팟게시판에 올려주시기 바랍니다. 즐거운 하루되세요 > 미송 님이 쓴 글입니다. > 제목 : 수식 부탁드립니다 > 볼린저 밴드 지표 (20.2) 와 (20,1) 2개를 사용해서 스템을 만들고 싶습니다 볼린저밴드 지표 (20,2)를 상,하방 돌파할 경우 진입하고 진입 이후 지표 (20.1)로 조정 을 할경우 청산하고자 합니다 미완성봉으로 조건 만족시 진입하려고 합니다 진입 수량은 1개봉에 1개씩 진입하고, 청산조건 만족 못할시 5개봉까지 연속진입 허용하 고 청산은 일괄청산입니다 예스스팟을 사용해야 할 것 같아요 부탁드립니다