답변완료
수식 수정 부탁합니다
수고하십니다.
1. 옵션 종목을 매수하고 청산신호 발생시 아래(예시1)와 같이 잔고 모든종목을 청산하는데 2종목을 매수한 경우 해당 종목만 청산하는 수식 부탁합니다. 예를 들어 시스템1 325.0 매수, 시스템2 327.5 매수 일 경우 시스템1은 325.0 만 청산되는 수식, 시스템2는 327.5만 청산 각자 독립적 청산되는 수식
2. 양매수, 매수 경우 잔고 손익 일정금액 초과시 청산되는 수식으로 수정 부탁합니다.
작동 안됨(예시 2)
예시1)----------------------------
if (Signal.signalKind == 2 )
{
Main.MessageList("매수청산신호발생");
{
//잔고를 세팅
A1.SetBalance(CallOrderCode, 0);
//보유종목수
var num = A1.GetTheNumberOfBalances();
if (num > 0)
{
for (var i = 0; i < num; i++)
{
A1.SetBalance(i);
if (A1.Balance.count > 0)
{
if (A1.Balance.position == 2)
{
A1.OrderSell(A1.Balance.code,A1.Balance.count,0,1);
}
}
}
}
}
}
예시2)----------------------------
// 옵션매수포지션 전체 손익계산
var num = A1.GetTheNumberOfBalances();
var PLsum = 0;
for(var i = 0; i < num; i++)
{
//잔고셋팅
A1.SetBalanceIndex(i);
//매수포지션이고 옵션종목이고
if (A1.Balance.position == 2 && (A1.Balance.code.substring(0,1) == "2" || A1.Balance.code.substring(0,1) == "3"))
{
//각 옵션매수종목의 (평균단가-현재가)*수량*50만원을 누적
PLsum = PLsum + ((A1.Balance.avgUnitCost - A1.Balance.current)*A1.Balance.count)*250000;
}
}
//손익이 +50만원이상이거나 -50만원 이하이면
if (PLsum >= 500000 || PLsum <= -500000)
{
for(var i = 0; i < num; i++)
{
//잔고셋팅
A1.SetBalanceIndex(i);
//매수포지션이고 옵션종목이고
if (A1.Balance.position == 2 && (A1.Balance.code.substring(0,1) == "2" || A1.Balance.code.substring(0,1) == "3"))
{
A1.OrderSell(A1.Balance.code, A1.Balance.count, 0,1);
}
}
}
}
2025-02-03
337
글번호 226198
답변완료
자동매도 코드 추가 부탁드려요
var timer5 = 2; // 2초
var 매수금 = 100000;
var OrderList = [];
var MKList = [];
var req;
// 종목 제한 수 (변수로 설정)
var 종목제한수 = 1;
function Main_OnStart() {
// 1번 타이머, 1초
Main.SetTimer(1, timer5 * 1000);
// 오늘 매수한 종목 관리 배열 초기화
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 > 090000 && HHMMSS < 151800) {
// 종목검색 수행
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]);
}
}
}
function Main_OnRcvMarketData(MarketData) {
if (MarketData.code == OrderList[req]) {
MKList.push(MarketData);
// 계좌에 같은 종목이 있는지 확인
if (!IsStockInAccount(MarketData.code)) {
// 계좌에 없는 경우에만 매수
Account1.OrderBuy(MarketData.code, 1, 0, 1);
//Account1.OrderBuy(MarketData.code, Math.floor(매수금 / MarketData.Ask(1)), 0, 1);
//Account1.OrderBuy(MarketData.code, Math.floor(매수금 / MarketData.Ask(1)), MarketData.Ask(1), 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-02-03
347
글번호 226195