커뮤니티

계좌 순손익이 일정금액을 초과하면 계좌 일괄청산을 하려고 합니다.

프로필 이미지
고가행진
2022-05-10 01:09:25
1553
글번호 225663
답변완료
수고 하십니다. 일정 거래시간과 계좌 순손익이 일정금액을 초과하면 계좌 일괄청산을 하려고 다음과 같이 스크립트를 작성하였슴니다. 원하는 처리가 안되어서 스크립트에 오류가 있는지 확인 부탁 드립니다. function Main_OnStart() { Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Account1.Refresh(); Main.MessageLog(" profit : " + Account1.Balance.profit); if ((HHMMSS > closetime && HHMMSS < closetime+10) || (Account1.Balance.profit > profit) || (Account1.Balance.profit < loss)) { // Main.KillTimer(1); var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); else if (Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-06-07 16:29:26.0

안녕하세요 예스스탁입니다. 스팟은 가이드정도만 해드리므로 아래 예제식 참고하셔서 수정보완해 완성해 사용하시기 바랍니다. 1 Balance는 특정 종목 하나에 대한 잔고객체입니다. 계좌손익을 리턴해 주는 객체가 아닙니다. 또한 Balance객체를 사용하기 위해서는 Account1.SetBalance함수로 특정 종목에 대해 잔고 셋팅한 이후에 사용하셔야 합니다. 2 Account1.Refresh(); 계좌 리프레쉬를 사용하시면 리프레쉬 완료후에 다음 동작이 진행되게 구현하셔야 합니다. 3 Account1.GetBalanceETCinfo 위함수는 계좌객체의 예수금필드의 값을 리턴해주는 함수입니다. 하이투자증권과 NH투자증권에서는 100을 지정하면 계좌의 예탁자산평가금액이 리턴됩니다. 해외선물은 제공되지 않습니다. 해외선물은 선물사/증권사 별로 제공하는 곳이 있고 아닌곳도 있습니다. 제공하더라도 인덱스가 다르므로 스팟 도움말 참고하셔서 해당 함수의 각 인덱스별 리턴값 확인하시고 수정하셔야 합니다. 제공하지 않는 곳은 직접 계산하셔야 합니다. 4 var AccRF,V1; //스팟시작 function Main_OnStart() { //타이머셋팅 Main.SetTimer(1, 5000); //스팟 시작시점 계좌총평가금액 V1 = Account1.GetBalanceETCinfo(100); } //타이머동작 function Main_OnTimer(nEventID) { //타이머 종료 Main.KillTimer(1); //계좌 리프레쉬 Account1.Refresh(); //수식에서 리프레쉬 요청한 것을 의미 AccRF = true; } //계좌변동 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*제거 { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //계좌 리프래쉬 if (AccRF == true && lUp*dateID == 30000)//*제거 { var PL = Account1.GetBalanceETCinfo(100)-A1; var num = Account1.GetTheNumberOfBalances(); if ((HHMMSS > closetime && HHMMSS < closetime+10) || (PL > profit) || (PL < loss)) { for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); if (Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else { //타이머셋팅 Main.SetTimer(1, 5000); } AccRF = false; } 즐거운 하루되세요 > 고가행진 님이 쓴 글입니다. > 제목 : 계좌 순손익이 일정금액을 초과하면 계좌 일괄청산을 하려고 합니다. > 수고 하십니다. 일정 거래시간과 계좌 순손익이 일정금액을 초과하면 계좌 일괄청산을 하려고 다음과 같이 스크립트를 작성하였슴니다. 원하는 처리가 안되어서 스크립트에 오류가 있는지 확인 부탁 드립니다. function Main_OnStart() { Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Account1.Refresh(); Main.MessageLog(" profit : " + Account1.Balance.profit); if ((HHMMSS > closetime && HHMMSS < closetime+10) || (Account1.Balance.profit > profit) || (Account1.Balance.profit < loss)) { // Main.KillTimer(1); var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); else if (Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } }