답변완료
매수 주문 30초 이후 미체결 주문 취소 관련 문의
안녕하세요
다름 아니라 제가 아래 매수식으로 해서 사용하고 있고 일반적인 매수 주문에는 2호가 아래 주문으로 큰 무리 없이 진행이 되고 있습니다.
다만, 제가 2호가 아래 주문을 하다보니 체결이 안되고 위로 강하게 올라가는 종목이 있는데 그런 종목이 나중에 급락 시 매수되지 않도록 30초 뒤에 매수 주문 넣은 걸 취소하는 기능을 넣고 싶습니다.
수고 많으시겠지만 수식 한번 부탁드려도 될까요?
제가 혼자 timer 30초로 Account.SetUnfill 로 미체결 종목을 확인해서 OrderCancel 를 하는 것으로 생각되어서(맞을까요?)
이리저리 수식을 좀 수정하고 테스트를 해봤는데 도저히 제대로 작동을 안하네요 ㅠㅠㅠ
아마 삽입된 해당 명령어들의 위치 이상하고 허접해서 그런거 아닌가 싶은데..
혼자 계속 작업을 하다가 도저히 안되어서 문의를 드리게 되었습니다.
수고 많으시겠지만 여유 되실 때 한번 검토를 부탁 드립니다.
미리 감사드립니다.
var timer5 = 5;
var 매수금 = 100000;
var OrderList = [];
var MKList = [];
var req;
var 종목제한수 = 20;
function Main_OnStart()
{
Main.SetTimer(1, timer5 * 1000); // 1번 타이머, 1초
MKList = []; // 오늘 매수한 종목 관리 배열 초기화
}
function Main_OnTimer(nEventID)
{
var d = new Date();
YYYYMMDD = d.getFullYear() * 10000 + (d.getMonth() + 1) * 100 + d.getDate();
HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (nEventID == 1 && HHMMSS > 090100 && HHMMSS < 143000)
//14:30까지로 변경
{
Main.ReqPowerSearch("매수조건");
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >= 1)
{
if (MKList.length == 0)
{
OrderList = aItemList.slice(0, 종목제한수); // 한정된 수만 가져오기
}
else
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MKList.length; b++)
{
if (aItemList[a] == MKList[b].code)
{
Add = false;
}
}
if (Add == true && !IsStockInAccount(aItemList[a]))
{
OrderList.push(aItemList[a]); // 제한 수를 넘는 경우 break
if (OrderList.length >= 종목제한수)
{
break;
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, timer5 * 1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
else // 추가(검색된 종목이 없으면 검색 타이머 재설정)
{
Main.SetTimer(1, timer5 * 1000);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인
if (!IsStockInAccount(MarketData.code))
{ // 계좌에 없는 경우에만 매수
Account1.OrderBuy(MarketData.code, 1, MarketData.current - MarketData.GetTickSize()*2, 0);
Main.MessageList(MarketData.code + " 주식을 매수합니다.");
}
else
{
Main.MessageList(MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다.");
}
req = req + 1;
if (req < OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, timer5 * 1000);
}
}
}
function IsStockInAccount(stockCode)
{
// 계좌에 해당 종목이 있는지 확인하는 함수
var numberOfBalances = Account1.GetTheNumberOfBalances();
for (var i = 0; i < numberOfBalances; i++)
{
Account1.SetBalance(i);
if (stockCode == Account1.Balance.code)
{
return true; // 계좌에 같은 종목이 있으면 true 반환
}
}
return false; // 계좌에 같은 종목이 없으면 false 반환
}
2025-07-26
208
글번호 226362
답변완료
매도조건 구현에 문의드립니다.
에스스팟 처음 사용해 보려고 하는데, 매도조건 구현에 문의가 있습니다.
매수는 Main.ReqPowerSearch 로 종목 검색 조건에 해당할 때 매수가 되는데,
자동 매도를 하지 않고 조건에 해당할 때 매도를 하려고 합니다.
다만, 단순 수익률이 아닌,
해당 종목이 10일 이평을 이탈하고 RSI(7) 이 70 이하가 될 때 조건에 해당할 때 매도 실행을 하려고 하는데, 이는 차트 객체를 이용해야 하나요?
만약 차트 객체를 이용해햐 한다면, 어떻게 동적으로 종목과 차트를 연결하는지 알고 싶습니다.
만약 차트 객체가 필요없다면, 매도 조건을 어떻게 코드로 작성해야 하는지도 알려 주시면 감사하겠습니다.
2025-07-26
239
글번호 226361