아래 예제는 계좌 평가금액(정산금액)이 일정값 이상 상승하거나(계좌익절)
일정값 이하 하락하면(계좌손절) 보유 종목 전체를 청산하는 식입니다.
1.
전략내용
정산금액이 스팟시작시점대비 20% 상승하거나 20%하락하면
보유 종목 일괄 청산
2.
스크립트 객체화면 설정
계좌객체를 추가한 후 속서에서 객체명은 A1으로 지정하고 계좌번호로 지정합니다.
3.
스팟수식
var 감시시작시간 = 90000;
var 감시종료시간 = 153000;
var 계좌수익률 = 20;
var 계좌손실률 = -20;
var StartMoney;
function Main_OnStart()
{
Main.MessageList("시작")
Main.SetTimer(1, 5000);
//스팟 시작시점 정산금액(순자산총액)
StartMoney = Account1.GetBalanceETCinfo(100);
Main.MessageList("시작시점 정산금액(순자산총액):",StartMoney)
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1)
{
if (HHMMSS >= 감시시작시간 && HHMMSS < 감시종료시간)
{
//현재 정산금액(순자산총액)
var CurrentMoney = Account1.GetBalanceETCinfo(100);
var CurrentMoney = AA;
//등락률
var R = (CurrentMoney-StartMoney)/StartMoney*100;
//계좌보유 종목수
var num = Account1.GetTheNumberOfBalances();
Main.MessageList("현재:",CurrentMoney,"등락률:",R,"보유종목수:",num);
if (R >= 계좌수익률 && num > 0)
{
Main.KillTimer(1);
Main.MessageList("계좌 지정% 수익발생 -> 타이머 종료 -> 전종목 청산");
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);
}
}
if (R <= 계좌손실률 && num > 0)
{
Main.KillTimer(1);
Main.MessageList("계좌 지정% 손실발생 -> 타이머 종료-> 전종목 청산");
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);
}
}
}
if (HHMMSS >= 감시종료시간)
{
Main.MessageList("감시종료시간 -> 타이머 종료");
Main.KillTimer(1);
}
}
}
JavaScript
복사