커뮤니티

스팟 수식문의드립니다.

프로필 이미지
수다리
2019-10-05 04:09:59
3345
글번호 225029
답변완료
var JCODE; var Highest = 0; var Lowest = 0; function Main_OnStart() { Highest = 0;//highest는 0 Lowest = 0;//lowest는 0 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); } //계좌에 종목이 추가되면 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)), 0); //선물종목의 잔고객체 생성 if (Account1.Balance.count > 0) //잔고객체가 생성되면 { Highest = Account1.Balance.avgUnitCost; //Highest는 초기값으로 해당 종목의 평균가 저장 Lowest = Account1.Balance.avgUnitCost; //lowest는 초기값으로 해당 종목의 평균가 저장 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); Account1.Refresh() Main.MessageLog("계좌변동발생"+"최고가"+Highest+"최저가"+Lowest+"현재가"+Account1.Balance.current+"코드"+JCODE); } } //============================================================================================================== //종목의 시세가 업데이터 되면 function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { //Start가 1이 된 상태(선물이 계좌에 신규편입되고 잔고객체생성 완료)에서 선물종목 가격이 변경되면 if (sItemCode == JCODE && lUp*dateID == 20001 && Highest != 0 && Lowest != 0) { //현재 시세가 highest보다 크면 highest에 현재 시세 저장(잔고편입이후의 최고가 계산) if (Account1.Balance.current > Highest) { Highest = Account1.Balance.current; Main.MessageLog("진입이후 최고가 갱신"+Highest); } //현재 시세가 lowest보다 작으면 lowest에 현재 시세 저장(잔고편입이후의 최저가 계산) if (Account1.Balance.current < Lowest) { Lowest = Account1.Balance.current; Main.MessageLog("진입이후 최저가 갱신"+Lowest); } } } 위의 수식 온업데이트 마켓에서 종목객체 Marketdata1을 추가없이 sItemCode == JCODE 라고 넣으면 작동을 안합니다. 종목객체 Marketdata1을 추가하고 sItemCode == Main.GetOrderCode(Chart1.GetCode(1))를 넣으면 실행이 됩니다. 종목객체 Marketdata1를 추가하는거랑 sItemCode == Main.GetOrderCode(Chart1.GetCode(1))는 관계가 없는거 아닌가요? 저는 종목객체 Marketdata1를 추가하지 않고 chart1의 종목을 바꿀때마다 자동으로 바뀌게 사용하고 싶은데 어떻게 표현해야하나요?
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-10-18 10:45:35

안녕하세요 예스스탁입니다. function Main_OnUp*dateMarket 이벤트는 종목객체가 있을때만 동작하는 이벤트입니다. 종목객체 없으면 동작하지 않습니다. 수식안에서 차트와 동일종목으로 종목객체가 생성되게 추가해 드립니다. var JCODE, MK; var Highest = 0; var Lowest = 0; function Main_OnStart() { Highest = 0;//highest는 0 Lowest = 0;//lowest는 0 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); Main.ReqMarketData(JCODE); } //계좌에 종목이 추가되면 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)), 0); //선물종목의 잔고객체 생성 if (Account1.Balance.count > 0) //잔고객체가 생성되면 { Highest = Account1.Balance.avgUnitCost; //Highest는 초기값으로 해당 종목의 평균가 저장 Lowest = Account1.Balance.avgUnitCost; //lowest는 초기값으로 해당 종목의 평균가 저장 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); Account1.Refresh() Main.MessageLog("계좌변동발생"+"최고가"+Highest+"최저가"+Lowest+"현재가"+Account1.Balance.current+"코드"+JCODE); } } //============================================================================================================== //종목의 시세가 업데이터 되면 function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { //Start가 1이 된 상태(선물이 계좌에 신규편입되고 잔고객체생성 완료)에서 선물종목 가격이 변경되면 if (sItemCode == MK.code && lUp*dateID == 20001 && Highest != 0 && Lowest != 0) { //현재 시세가 highest보다 크면 highest에 현재 시세 저장(잔고편입이후의 최고가 계산) if (Account1.Balance.current > Highest) { Highest = Account1.Balance.current; Main.MessageLog("진입이후 최고가 갱신"+Highest); } //현재 시세가 lowest보다 작으면 lowest에 현재 시세 저장(잔고편입이후의 최저가 계산) if (Account1.Balance.current < Lowest) { Lowest = Account1.Balance.current; Main.MessageLog("진입이후 최저가 갱신"+Lowest); } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == JCODE) { MK = MarketData ; } } 즐거운 하루되세요 > 수다리 님이 쓴 글입니다. > 제목 : 스팟 수식문의드립니다. > var JCODE; var Highest = 0; var Lowest = 0; function Main_OnStart() { Highest = 0;//highest는 0 Lowest = 0;//lowest는 0 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); } //계좌에 종목이 추가되면 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)), 0); //선물종목의 잔고객체 생성 if (Account1.Balance.count > 0) //잔고객체가 생성되면 { Highest = Account1.Balance.avgUnitCost; //Highest는 초기값으로 해당 종목의 평균가 저장 Lowest = Account1.Balance.avgUnitCost; //lowest는 초기값으로 해당 종목의 평균가 저장 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); Account1.Refresh() Main.MessageLog("계좌변동발생"+"최고가"+Highest+"최저가"+Lowest+"현재가"+Account1.Balance.current+"코드"+JCODE); } } //============================================================================================================== //종목의 시세가 업데이터 되면 function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { //Start가 1이 된 상태(선물이 계좌에 신규편입되고 잔고객체생성 완료)에서 선물종목 가격이 변경되면 if (sItemCode == JCODE && lUp*dateID == 20001 && Highest != 0 && Lowest != 0) { //현재 시세가 highest보다 크면 highest에 현재 시세 저장(잔고편입이후의 최고가 계산) if (Account1.Balance.current > Highest) { Highest = Account1.Balance.current; Main.MessageLog("진입이후 최고가 갱신"+Highest); } //현재 시세가 lowest보다 작으면 lowest에 현재 시세 저장(잔고편입이후의 최저가 계산) if (Account1.Balance.current < Lowest) { Lowest = Account1.Balance.current; Main.MessageLog("진입이후 최저가 갱신"+Lowest); } } } 위의 수식 온업데이트 마켓에서 종목객체 Marketdata1을 추가없이 sItemCode == JCODE 라고 넣으면 작동을 안합니다. 종목객체 Marketdata1을 추가하고 sItemCode == Main.GetOrderCode(Chart1.GetCode(1))를 넣으면 실행이 됩니다. 종목객체 Marketdata1를 추가하는거랑 sItemCode == Main.GetOrderCode(Chart1.GetCode(1))는 관계가 없는거 아닌가요? 저는 종목객체 Marketdata1를 추가하지 않고 chart1의 종목을 바꿀때마다 자동으로 바뀌게 사용하고 싶은데 어떻게 표현해야하나요?