예스스탁
예스스탁 답변
2022-11-24 11:35:57
안녕하세요
예스스탁입니다.
1
답변식에 변수 선언부가 빠져있었습니다.
상단에 RF 변수에 대한 전역변수 선언을 추가해 주시면 됩니다.
또한 수식에서 동일 이벤트는 하나만 사용하셔야 합니다.
동일이벤트를 여러개 적으면 상단의 하나만 동작합니다.
2
시간에 따라 처리하는 내용이 다르므로
refresh할때 변수를 변경해서 구분해서 처리하게 하셔야 합니다.
아래 수정된 식 내용을 확인하시기 바랍니다.
3
var TT, TT1, ExitTime;
var RF1,RF2;
//스팟 시작
function Main_OnStart()
{
TT = getHHMMSS();
Dax_ExitTime = 55500;
Dax_endTime = 60000;
ExitTime = 65500;
endTime = 70000;
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
Week = getDateStr(YYYYMMDD);
Main.SetTimer(1, 60000);
Main.SetTimer(2, 60000);
}
function Main_OnTimer(nEventID)
{
TT1 = getHHMMSS();
if(nEventID == 1 && TT1 > Dax_ExitTime && TT1 < Dax_endTime && Week == "금")
{
Main.KillTimer(1);
A1.Refresh();
//수식에서 계좌재조회를 판단하는 변수
RF1 = true;
}
if(nEventID == 2 && TT1 > ExitTime && TT1 < endTime && Week == "금")
{
Main.KillTimer(2);
A1.Refresh();
//수식에서 계좌재조회를 판단하는 변수
RF2 = true;
}
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)
{
//계좌 재조회 완료
if (RF1 == true && lUp*dateID == 30000)
{
RF1 = false;
var num1 = A1.GetTheNumberOfBalances();
for (j = 0; j < num1; j++)
{
//계좌의 리스트 순서로 잔고셋팅
A1.SetBalance(j);
var Code1 = A1.Balance.code ;
var avgC1 = A1.Balance.avgUnitCost ;
var Count1 = A1.Balance.count ;
var Price1 = A1.Balance.current ;
if(Code1.substring(0,3) == "FDX")
{
//매수포지션
if (A1.Balance.position == 2)
{
A1.OrderSell(Code1, Count1, 0, 1);
}
//매도포지션
if (A1.Balance.position == 1)
{
A1.OrderBuy(Code1, Count1,0, 1);
}
}
}
}
//계좌 재조회 완료
if (RF2 == true && lUp*dateID == 30000)
{
RF2 = false;
var num2 = A1.GetTheNumberOfBalances();
for (j = 0; j < num2; j++)
{
//계좌의 리스트 순서로 잔고셋팅
A1.SetBalance(j);
var Code1 = A1.Balance.code ;
var avgC1 = A1.Balance.avgUnitCost ;
var Count1 = A1.Balance.count ;
var Price1 = A1.Balance.current ;
//매수포지션
if (A1.Balance.position == 2)
{
A1.OrderSell(Code1, Count1, 0, 1);
}
//매도포지션
if (A1.Balance.position == 1)
{
A1.OrderBuy(Code1, Count1,0, 1);
}
}
}
}
즐거운 하루되세요
> 민현종 님이 쓴 글입니다.
> 제목 : [79691] 오류
> 안녕하세요,
수정 주신 수식을 YesSpot에 적용했는데,
ReferenceError: RF is not defined 라고 찍힙니다.
청산시기를 두개(0555~0600, 0655~0700)로 나누어서 그런건가요?
확인 부탁드립니다.
----------------------------------------------------
var TT, TT1, ExitTime;
//스팟 시작
function Main_OnStart()
{
TT = getHHMMSS();
Dax_ExitTime = 55500;
Dax_endTime = 60000;
ExitTime = 65500;
endTime = 70000;
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
Week = getDateStr(YYYYMMDD);
Main.SetTimer(1, 60000);
Main.SetTimer(2, 60000);
}
function Main_OnTimer(nEventID)
{
TT1 = getHHMMSS();
if(nEventID == 1 && TT1 > Dax_ExitTime && TT1 < Dax_endTime && Week == "금")
{
Main.KillTimer(1);
A1.Refresh();
//수식에서 계좌재조회를 판단하는 변수
RF = true;
}
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)
{
//계좌 재조회 완료
if (RF == true && lUp*dateID == 30000)
{
RF = false;
var num1 = A1.GetTheNumberOfBalances();
for (j = 0; j < num1; j++)
{
//계좌의 리스트 순서로 잔고셋팅
A1.SetBalance(j);
var Code1 = A1.Balance.code ;
var avgC1 = A1.Balance.avgUnitCost ;
var Count1 = A1.Balance.count ;
var Price1 = A1.Balance.current ;
if(Code1.substring(0,3) == "FDX")
//매수포지션
if (A1.Balance.position == 2)
{A1.OrderSell(Code1, Count1, 0, 1);
}
//매도포지션
if (A1.Balance.position == 1)
{A1.OrderBuy(Code1, Count1,0, 1);
}
}
}
}
function Main_OnTimer(nEventID)
{
TT1 = getHHMMSS();
if(nEventID == 2 && TT1 > ExitTime && TT1 < endTime && Week == "금")
{
Main.KillTimer(2);
A1.Refresh();
//수식에서 계좌재조회를 판단하는 변수
RF = true;
}
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)
{
//계좌 재조회 완료
if (RF == true && lUp*dateID == 30000)
{
RF = false;
var num2 = A1.GetTheNumberOfBalances();
for (j = 0; j < num2; j++)
{
//계좌의 리스트 순서로 잔고셋팅
A1.SetBalance(j);
var Code1 = A1.Balance.code ;
var avgC1 = A1.Balance.avgUnitCost ;
var Count1 = A1.Balance.count ;
var Price1 = A1.Balance.current ;
//매수포지션
if (A1.Balance.position == 2)
{A1.OrderSell(Code1, Count1, 0, 1);
}
//매도포지션
if (A1.Balance.position == 1)
{A1.OrderBuy(Code1, Count1,0, 1);
}
}
}
}