답변완료
수정부탁드려요
검색된 각 종목마다 현 잔고의 10분의 1만큼만 사고 싶은데 수정부탁드려요
function Main_OnStart()
{
//1번 타이머, 60초
Main.SetTimer(1, 2000);
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
//종목검색 수행
Main.ReqPowerSearch("3")
}
}
//종목검색 완료
function Main_OnRcvItemList(aItemList, nCount)
{
//1종목 이상 검색되면
if (nCount >= 1)
{
//리스트 첫종목부터 마지막종목까지 순차적으로
//1번 타이머 동작
for (var i = 0; i < nCount; i++)
{
//잔고를 셋팅
Account1.SetBalance(aItemList[i],0);
//보유수량이 없으면
if (Account1.Balance.count < 1)
{
//매수주문
Account1.OrderBuy(aItemList[i], 3,0,1);
}
}
}
}
2024-03-12
601
글번호 225962
답변완료
매도수식 문의 드립니다.
기존에는 예스스팟 종목검색으로 매수를 하고 2103 TS창에서 신규편입종목 TS를 설정했는데 TS내 기능이 좀 부족해서 수식을 만들었습니다. 그런데 작동이 안돼서 수정좀 문의 드립니다.
1. 2103 TS창내 기능은 4% 수익이던 10%수익이던 제가설정한 익절 2%에서 매도를 하는데 저는 직장인이라 차트를 자주 못봐서 수익의 N%를 익절 라인으로 설정 하고 싶습니다.
2. N%를 40%설정시 4%수익일때 1.6% , 10%수익일때 4% 로 익절 라인을 설정하고 싶습니다.
3.신규종목, 기존종목 모두 N%를 설정 하고 싶습니다.
4.TS 시작 수익을 A%로 설정 하고 싶습니다.
아래는 제가 게시판 내용 찾아 가면서 작성해본 예스스팟입니다. 현재 작동을 안하는데 수정좀 부탁드릴께요. up*date는 금지어라 *처리 했습니다.
var Rcv = 0;
var Item = [];
var EP = []; // 진입가격
var HH = []; // 최고가
var lastRequestTime = 0; // 마지막 요청 시간을 추적하기 위한 변수
function Main_OnStart() {
Rcv = 0;
// 기존 보유 종목에 대한 정보 초기화 및 요청
for (var j = 0; j < Account1.Balance.count; j++) {
var sItemCode = Account1.Balance[j].code;
EP[Rcv] = Account1.Balance[j].avgUnitCost;
HH[Rcv] = Account1.Balance[j].avgUnitCost; // 초기 최고가를 진입가로 설정
Main.ReqMarketData(sItemCode, 0, 0);
}
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) {
// 잔고에 새로운 종목 편입
if (sAccntNum == Account1.number && lUp*dateID == 30001) {
// 편입된 종목의 진입가와 최고가를 구할 기초값 저장 후 종목객체 요청
Account1.SetBalance(sItemCode, 0);
if (Account1.Balance.count) {
EP[Rcv] = Account1.Balance.avgUnitCost;
HH[Rcv] = Account1.Balance.avgUnitCost; // 초기 최고가를 진입가로 설정
Main.ReqMarketData(sItemCode, 0, 0);
}
}
}
function Main_OnRcvMarketData(MarketData) {
Item[Rcv] = MarketData;
Rcv++;
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID) {
var currentTime = new Date().getTime();
if (currentTime - lastRequestTime >= 5000) { // 5초가 지났는지 확인
lastRequestTime = currentTime; // 마지막 요청 시간 업데이트
processMarketUp*date(sItemCode, lUp*dateID);
} else {
setTimeout(function() {
Main_OnUp*dateMarket(sItemCode, lUp*dateID);
}, 5000 - (currentTime - lastRequestTime));
}
}
function processMarketUp*date(sItemCode, lUp*dateID) {
if (lUp*dateID == 20001) {
for (var i = 0; i < Item.length; i++) {
if (Item[i].code == sItemCode) {
// 잔고편입 이후의 최고가 계산
if (Item[i].current > HH[i]) {
HH[i] = Item[i].current;
var profitRate = (HH[i] - EP[i]) / EP[i];
if (profitRate >= 0.0382) {
var tsRate = profitRate * 0.30;
if (Item[i].current <= HH[i] * (1 - tsRate)) {
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0) {
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Item[i].Ask(5), 0);
Main.RemoveMarketData(Item[i]);
}
}
}
}
}
}
}
}
2024-02-28
644
글번호 225957