예스스탁
예스스탁 답변
2025-03-28 10:33:57
안녕하세요
예스스탁입니다.
해당 내용은 구현은 가능합니다.
다만 올리신 수식은 차트기반에서 계산을 해야한는 내용이므로
스팟식으로 해당 내용을 구현할 수는 없습니다.
매수와 마찬가지로 종목검색식으로 작성해서 일정주기로 검색을 해서
검색된 종목 중 보유종목이 있으면 매도하게 구현하셔야 합니다.
종목검색이 한번에 2개가 가능하지 않으므로
매수와 매도검색을 번갈아 가면서 수행하게 하고
처리되게 작성하시면 됩니다.
아래는 가이드입니다.
식작성에 참고하시기 바랍니다.
1. 종목검색식
INPUT : 기간1(10),기간2(21);
VAR : ap(0),esa(0),d1(0),ci(0),wt1(0),wt2(0);
ap = (HIGH+LOW+CLOSE)/3;
esa = Ema(ap, 기간1);
d1 = Ema(abs(ap - esa), 기간1);
ci = (ap - esa) / (0.015 * d1);
wt1 = Ema(ci,기간2);
wt2 = ma(WT1,4);
IF WT1[1]<=60 && (Crossdown(WT1,WT2) OR Crossdown(WT[1],53) TheN
find(1);
2
var timer5 = 2; // 2초
var 매수금 = 100000;
var OrderList = [];
var MKList = [];
var req;
var 종목제한수 = 10;
var Search;
function Main_OnStart()
{
Main.SetTimer(1, timer5 * 1000);
MKList = [];
Search = 1;
}
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 > 090000 && HHMMSS < 151800)
{
Main.MessageList(Search);
if (Search == 1)
{
Main.ReqPowerSearch("매수조건");
}
else
{
Main.ReqPowerSearch("매도조건");
}
Main.KillTimer(1);
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
Main.KillTimer(2);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.MessageList(nCount);
OrderList = [];
if (Search == 1)
{
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]);
if (OrderList.length >= 종목제한수)
{
break;
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, timer5 * 1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
Search = -1;
}
else
{
if (nCount >= 1)
{
for (var a = 0; a < aItemList.Length; a++)
{
for (var b = 0; b < MKList.length; b++)
{
if (aItemList[a] == MKList[b].code)
{
Account1.SetBalance(aItemList[a], 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.countc,0,1);
}
}
}
}
}
Main.SetTimer(1, timer5 * 1000);
Search = 1;
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
if (!IsStockInAccount(MarketData.code))
{
Account1.OrderBuy(MarketData.code, 1, 0, 1);
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;
}
}
return false;
}
즐거운 하루되세요
> deeparc 님이 쓴 글입니다.
> 제목 : 예스 스팟 매도식 추가 가능여부 문의 드립니다.
> 안녕하세요 왜인지 모르겠지만 자꾸 글이 업로드 에러가 나서 첨부파일로 질문을 대체했습니다.
죄송한데 첨부 파일 한번 확인 부탁드립니다.