예스스탁
예스스탁 답변
2025-04-07 13:57:41.0
안녕하세요
예스스탁입니다.
스팟 수식답변은 가이드입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
영문 업데이트가 게시판 금칙어라 Up*date와 같이 중간에 *이 추가되어 있습니다.
주석 참고하셔서 *제거해서 사용하시기 바랍니다.
var List=[], Avg=[],OD=[],HH=[],XX=[],MK =[];
var req;
var 추가매수금 = 100000;
function Main_OnStart()
{
var num = Account1.GetTheNumberOfBalances();
if (num > 0)
{
Main.MessageList("시작시 보유종목 :",num);
for (var i = 0; i < num; i++)
{
Account1.SetBalance(i);
List.push(Account1.Balance.code);
Avg.push(Account1.Balance.avgUnitCost);
}
req = 0;
Main.MessageList("종목객체 요청:",List[req]);
Main.ReqMarketData(List[req]);
}
else
{
Main.MessageList("시작시 보유종목 없음")
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == List[req])
{
MK.push(MarketData);
OD.push(1);
XX.push(0);
P1.push(0);
req = req+1;
if (req < List.length)
{
Main.MessageList("종목객체 요청:",List[req]);
S = Main.ReqMarketData(List[req]);
if (S == -1)
{
Main.SetTimer(1, 15000);
}
}
else
{
Main.MessageList("종목객체 생성 완료");
}
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거
{
if (lUp*dateID == 20001)//*제거
{
for (var i = 0; i < MK.length; i++)
{
if (MK[i].current > HH[i])
{
HH[i] = MK[i].current;
}
if (OD[i] > 0 && sItemCode == MK[i].code)
{
if (OD[i] == 1 && MK[i].current <= Avg[i]*0.995)
{
OD[i] = 2;
P1[i] = MK[i].Ask(1);
Account1.OrderBuy(MK[i].code, Math.floor(추가매수금/MK[i].Ask(1)),MK[i].Ask(1),0)
}
if (OD[i] == 2 && MK[i].current <= Avg[i]*0.99)
{
OD[i] = 3;
Account1.OrderBuy(MK[i].code, Math.floor(추가매수금/MK[i].Ask(1)), MK[i].Ask(1), 0)
}
if (OD[i] == 3 && MK[i].current <= Avg[i]*0.985)
{
OD[i] = 4;
Account1.OrderBuy(MK[i].code, Math.floor(추가매수금/MK[i].Ask(1)), MK[i].Ask(1), 0)
}
if (OD[i] == 4 && P1[i] > 0 && MK[i].current <= P1[i]*0.98)
{
OD[i] = 0;
Account1.OrderSell(MK[i].code,Account1.Balance.count, 0, 1);
}
if (XX[i] == 0 && MK[i].current >= Avg[i]*1.08)
{
XX[i] = 1;
Account1.SetBalance(MK[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(MK[i].code,Math.min(1,Math.floor(Account1.Balance.count/2)), 0, 1)
}
}
if (XX[i] >= 0 && HH[i] >= Avg[i]*1.05 && MK[i].current >= Avg[i]*1.04)
{
XX[i] = -1;
Account1.SetBalance(MK[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(MK[i].code,Account1.Balance.count, 0, 1)
}
}
}
}
}
}
즐거운 하루되세요
> 저니0 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 안녕하세요.
수고가 많으십니다.
예스스팟에서 분할매수 및 청산 수식을 작성하는 데 어려움이 있어 도움을 요청드립니다.
1. 예스스팟 자동매매를 실행했을 때 계좌에 있는 종목(미리 수동매수한 종목)이 0.5%, 1%, 1.5%하락했을 때 10만 원씩 분할매수
2. 8% 상승시 보유 개수의 50% 익절
3. 5%이상 상승했다가 4%로 내려왔을 시 전량 청산(트레일링 스탑)
4. 첫번째 분할매수로 진입한 가격에서 2% 하락시 전량 손절
답변 주시면 정말 감사드리겠습니다.