수고 하십니다.
일정 거래시간과 계좌 순손익이 일정금액을 초과하면 계좌 일괄청산을 하려고 다음과 같이 스크립트를 작성하였슴니다.
원하는 처리가 안되어서 스크립트에 오류가 있는지 확인 부탁 드립니다.
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);
}
}
}