커뮤니티

property erro 0

프로필 이미지
심심00
2020-01-31 00:03:23
3637
글번호 225151
답변완료

첨부 이미지

안녕하세요? 질의드립니다 1. 프라퍼티 에러0 가 발생합니다. 2. 수식에는 잔고가 있을시 진입이 안되게 되어있습니다만, 유첨 이미지처럼 계속 추가 진입이 되고 있습니다. 차트속성에서도 피라미딩은 허용안함으로 세팅해놨습니다. 문제가 무엇인지요?? var SK,BuyID,BuyNum,SellID,SellNum; function Main_OnStart() { Main.MessageList("Start"); Main.SetTimer(99, 10000);//99번 타이머 10초 셋팅(동시호가 시간 체크 위해) } //차트에서 미완성 시호가 신호발생 하면 function Chart1_OnRiseIncompleteSignal(Signal)// 요거만 바꿈 { SK = Signal.signalKind; Main.MessageList("신호발생 : 신호종류", SK,"신호가격",Signal.price,"신호수량",Signal.count); //매수신호 발생 if (SK == 1) // 메수 신호면이면 { //종목잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //종목잔고가 없으면 if (Account1.Balance.count == 0) { //매도3호가로 1계약 매수주문 ==>3호가 위로 매수할꺼야 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0);//종목, 계약수, 3호가위로,지정가로 } //잔고에 매도포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1)// 1은 매도 2는 매수야 ==> 매도보유하고 있으면 5초 딜레이야? { //1번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매수청산신호 발생 if (SK == 2)// 매수청산신호면 { //매수진입주문 번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 ==>청산신호가 나왔는데 이전에 주문 들어간게 있으면 취소하자 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2)// 매수포지션을 가지고 있으면,(1은 매도 2는 매수) { //전량 매수3호가로 매도주문 ==>3호가 아래로 매도 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); } } //매도진입신호발생 if (SK == 3) // 매도신호 바생하면 { //신호수량 SP = Signal.count;//??????? //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매수3호가로 1계약 매도주문 ==>3혹 아래로 매도 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); } //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2)// 매수 포지션이 있으면 5초 딜레이 { //2번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매도청산신호 발생 if (SK == 4) // ==>매도청산하자 { //매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고에 매도포지션이 있으면 청산 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) //매도포지션이 있으면 { //전량 매도3호가로 매수주문 ==>3호가 위로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머가 동작하면 if (nEventID == 1) // 매수를 해야하는데 매도를 가지고 있었으면 1계약 청산 후 5초 딜레이후 매수 진입(증거금문제로 2계약 안됨) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); //1번 타이머 종료 Main.KillTimer(1); } //2번 타이머가 동작하면 // 매도를 해야하는데 수도를 가지고 있었으면 1계약 청산 후 5초 딜레이후 매도 진입(증거금문제로 2계약 안됨) if (nEventID == 2) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); //2번 타이머 종료 Main.KillTimer(2); } //99번 타이머 동작하고 15시36분 이후이면 ==> 동시호가에 미완성신호 발생시 들어갈 것인가 말 것인가 문제 if (nEventID == 99 && HHMMSS >= 153600) { //99q번 타이머 종료 Main.KillTimer(99); //마지막봉 미완성 신호정보 셋팅 var Incom = Chart1.GetIncompleteSignal(); //매수진입 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 1) { //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); } //잔고에 매도포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //청산 //잔고전량 매수3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); //진입주문 위해 1번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매수청산 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 2) { //직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //청산 //잔고전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); } //매도진입 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 3) { //잔고가 없으면 if (Account1.Balance.count == 0) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); } //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //청산 //잔고전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); //진입주문 위해 2번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매도청산 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 2) { //직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //청산 //잔고전량 매수3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); } } } //각 진입주문 후 주문번호 저장 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BuyID) { BuyNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SellID) { SellNum = OrderResponse.orderNum;
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-02-28 16:26:17

안녕하세요 예스스탁입니다. 1 미완성신호가 없으면 Incom변수에 저장되는 값이 없습니다. 아래와 같이 Incom이 사용된 조건문에 Incom != null 조건을 추가하시면 됩니다. Incom != null && Incom[0].signalKind == 1 2 미완성신호는 미완성봉에서 시세가 수신될때마다 조건이 충족되면 발생합니다. 차트에 시스템의 피라미딩설정과는 관계가 없습니다. 하나의 봉에서 다수가 발생할수 있기 때문에 해당 내용을 감안해서 규칙을 정하셔서 코딩하셔야 합니다. function Chart1_OnBarAppended(nData) 이벤트는 차트의 봉이 완성됨(다음봉시가수신)을 알려주는 이벤트입니다. 아래와 같이 작성하시면 시가수신후 첫번째 발생한 미완성신호만 사용하게 됩니다. 참고하셔서 의도하시는 내용을 변경하시기 바랍니다. function Chart1_OnBarAppended(nData) { IScount = 0; } //차트에서 미완성 시호가 신호발생 하면 function Chart1_OnRiseIncompleteSignal(Signal)// 요거만 바꿈 { IScount = ISCount+1; SK = Signal.signalKind; Main.MessageList("신호발생 : 신호종류", SK,"신호가격",Signal.price,"신호수량",Signal.count); //매수신호 발생 if (IScount == 1 &&SK == 1) // 메수 신호면이면 즐거운 하루되세요 > 심심00 님이 쓴 글입니다. > 제목 : property erro 0 > 안녕하세요? 질의드립니다 1. 프라퍼티 에러0 가 발생합니다. 2. 수식에는 잔고가 있을시 진입이 안되게 되어있습니다만, 유첨 이미지처럼 계속 추가 진입이 되고 있습니다. 차트속성에서도 피라미딩은 허용안함으로 세팅해놨습니다. 문제가 무엇인지요?? var SK,BuyID,BuyNum,SellID,SellNum; function Main_OnStart() { Main.MessageList("Start"); Main.SetTimer(99, 10000);//99번 타이머 10초 셋팅(동시호가 시간 체크 위해) } //차트에서 미완성 시호가 신호발생 하면 function Chart1_OnRiseIncompleteSignal(Signal)// 요거만 바꿈 { SK = Signal.signalKind; Main.MessageList("신호발생 : 신호종류", SK,"신호가격",Signal.price,"신호수량",Signal.count); //매수신호 발생 if (SK == 1) // 메수 신호면이면 { //종목잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //종목잔고가 없으면 if (Account1.Balance.count == 0) { //매도3호가로 1계약 매수주문 ==>3호가 위로 매수할꺼야 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0);//종목, 계약수, 3호가위로,지정가로 } //잔고에 매도포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1)// 1은 매도 2는 매수야 ==> 매도보유하고 있으면 5초 딜레이야? { //1번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매수청산신호 발생 if (SK == 2)// 매수청산신호면 { //매수진입주문 번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 ==>청산신호가 나왔는데 이전에 주문 들어간게 있으면 취소하자 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2)// 매수포지션을 가지고 있으면,(1은 매도 2는 매수) { //전량 매수3호가로 매도주문 ==>3호가 아래로 매도 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); } } //매도진입신호발생 if (SK == 3) // 매도신호 바생하면 { //신호수량 SP = Signal.count;//??????? //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매수3호가로 1계약 매도주문 ==>3혹 아래로 매도 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); } //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2)// 매수 포지션이 있으면 5초 딜레이 { //2번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매도청산신호 발생 if (SK == 4) // ==>매도청산하자 { //매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고에 매도포지션이 있으면 청산 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) //매도포지션이 있으면 { //전량 매도3호가로 매수주문 ==>3호가 위로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머가 동작하면 if (nEventID == 1) // 매수를 해야하는데 매도를 가지고 있었으면 1계약 청산 후 5초 딜레이후 매수 진입(증거금문제로 2계약 안됨) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); //1번 타이머 종료 Main.KillTimer(1); } //2번 타이머가 동작하면 // 매도를 해야하는데 수도를 가지고 있었으면 1계약 청산 후 5초 딜레이후 매도 진입(증거금문제로 2계약 안됨) if (nEventID == 2) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); //2번 타이머 종료 Main.KillTimer(2); } //99번 타이머 동작하고 15시36분 이후이면 ==> 동시호가에 미완성신호 발생시 들어갈 것인가 말 것인가 문제 if (nEventID == 99 && HHMMSS >= 153600) { //99q번 타이머 종료 Main.KillTimer(99); //마지막봉 미완성 신호정보 셋팅 var Incom = Chart1.GetIncompleteSignal(); //매수진입 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 1) { //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); } //잔고에 매도포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //청산 //잔고전량 매수3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); //진입주문 위해 1번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매수청산 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 2) { //직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //청산 //잔고전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); } //매도진입 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 3) { //잔고가 없으면 if (Account1.Balance.count == 0) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); } //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //청산 //잔고전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); //진입주문 위해 2번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매도청산 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 2) { //직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //청산 //잔고전량 매수3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); } } } //각 진입주문 후 주문번호 저장 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BuyID) { BuyNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SellID) { SellNum = OrderResponse.orderNum;