안녕하세요.
수고많으십니다.
시스템식으로 작성한
if MarketPosition == 0 and 매수조건 Then
Buy("b");
if MarketPosition == 1 Then
{
if MaxEntries == 1 Then
Buy("b2",AtStop,LatestEntryPrice(0)*1.01,Floor(100000/max(NextBarOpen,LatestEntryPrice(0)*1.01)));
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,highest(H,BarsSinceEntry)*0.98);
위 수식을 자바 스크립트로 변환 하여 기존 스팟의 내용에 추가했습니다.
잘 못된 부분 수정 보완 부탁 드리겠습니다.
전체 파일 올렸으나 엑셀 오류로(사용하지못하는 텍스트) 수식 작성이 완료 되지 않아 메모장.txt를 알집으로
압축하여 파일로 첨부 합니다.
검토 부탁 드리겠습니다.
항상 감사드립니다.
답변 1
예스스탁
예스스탁 답변
2025-01-31 11:24:27
안녕하세요
예스스탁입니다.
1
문법상 잘못 작성된 부분만 답변드립니다.
스팟은 저희가 테스트를 해드리지 않으므로
나머지 부분은 모의투자등에 적용하셔서 적용해 보시면서 수정보완하시기 바랍니다.
2
var 최고가 = {}; // 종목별 최고가 저장
올리신 내용에서 최고가는 위와 같이 객체생성인데
값저장부분과 값 갱신 부분이 잘못되어 있습니다.
아래 Main_OnRcvMarketData에 초기값 저장하는 부분과
Main_OnTimer에서 값갱신부분 살펴보시기 바랍니다.
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500)
{
if (MKList.length < 최대보유종목수)
{
Main.ReqPowerSearch("자동매매");
}
else
{
Main.SetTimer(1, 타이머간격 * 1000);
}
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
if (nEventID == 99 && MKList.length > 0)
{
for (var i = 0; i < MKList.length; i++)
{
var stock = MKList[i].code;
Account1.SetBalance(stock, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2 && MKorder[i] == 1)
{
var avgCost = Account1.Balance.avgUnitCost;
var currentPrice = MKList[i].current;
// 최고가 갱신
if (currentPrice > 최고가[stock.code].hh)
{
최고가[stock.code] = {hh:currentPrice};
}
// 1% 상승 시 추가 매수 (시장가로 100만 원)
if (currentPrice >= avgCost * 추가매수조건 && Account1.Balance.count == 1)
{
var 추가매수수량 = Math.floor(추가매수금 / currentPrice);
Account1.OrderBuy(stock.code, 추가매수수량, 0, 1);
}
// 최고가 대비 2% 하락하면 손절 (시장가 매도)
if (currentPrice <= 최고가[stock.code].hh * 손절조건)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
MKorder[i] = -1;
}
}
}
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
MKorder.push(1);
BuyList.push(MarketData.code);
// 검색된 종목을 1주 시장가 매수
Account1.OrderBuy(MarketData.code, 수량, 0, 1);
// 최고가 초기화
최고가[MarketData.code] = {hh:MarketData.current};
req += 1;
if (req < OrderList.length && MKList.length < 최대보유종목수)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, 타이머간격 * 1000);
}
}
}
즐거운 하루되세요
> 하루삼프로 님이 쓴 글입니다.
> 제목 : 수식 검토 부탁 드립니다.
> 안녕하세요.
수고많으십니다.
시스템식으로 작성한
if MarketPosition == 0 and 매수조건 Then
Buy("b");
if MarketPosition == 1 Then
{
if MaxEntries == 1 Then
Buy("b2",AtStop,LatestEntryPrice(0)*1.01,Floor(100000/max(NextBarOpen,LatestEntryPrice(0)*1.01)));
}
if MarketPosition == 1 Then
ExitLong("bx",AtStop,highest(H,BarsSinceEntry)*0.98);
위 수식을 자바 스크립트로 변환 하여 기존 스팟의 내용에 추가했습니다.
잘 못된 부분 수정 보완 부탁 드리겠습니다.
전체 파일 올렸으나 엑셀 오류로(사용하지못하는 텍스트) 수식 작성이 완료 되지 않아 메모장.txt를 알집으로
압축하여 파일로 첨부 합니다.
검토 부탁 드리겠습니다.
항상 감사드립니다.