안녕하세요? 1034에서 요청하신 아래 내용으로
-----------------------------------------------------
2. 당일 매매를 원칙으로 작성을 하려고 합니다.
A. 매도 조건은 (Timer는 어떤 단위가 좋을 것 같은지요?)
손절은 -3% - 보유수량 30%, -5% - 보유수량 40%, -7% - 보유수량 전량
수익은 3% - 보유수량 30%, 5% - 보유수량 40%, 7% - 보유수량 전량
Trailing Stop 매도: 당일 고점 대비 -3% (보유수량 50%) - 스팟으로 가능 할까요?
전일 종가 이하 : 매수가 전일 종가 이상 이면 보유수량 50% 손절
- 스팟으로 가능 할까요?
B. 장종료 동시호가 전량 매도(수익,손해 나더라도)
C. 상한가 전량매도(수익에 상관없이)
-------------------------------------------------------------------------
수식을 변경 요청 드립니다.
윗글의 경우는 종목이 검색되면 function Main_OnRcvMarketData(MarketData) 함수 내에서 매수를 실행하는 경우에 대해서 작성이 되었는데,
저는 파워검색으로 검색된 종목에 확장차트 시스템식을 적용해서 나오는 매수/매도 시그날을 이용해서 매매하게 코드가 되어 있습니다. 위의 예제를 참고해서 변경해 보려고 시도해 보고 있는데, 아직 실력이 미천하여 잘 안 되고 있습니다. 변경 부탁 드립니다.
아래는 제가 사용하고 있는 코드의 function Main_OnRiseSignal(ChartEx, Signal) 부분입니다.
----------------------------------------------------------------------------------
function Main_OnRiseSignal(ChartEx, Signal)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//신호발생 종목에 대해 잔고셋팅
종목코드 = Main.GetOrderCode(Signal.code)
Account1.SetBalance(종목코드 ,0);
var buyable = 1; // 매수가능 종목으로 설정, 당일 매수 리스트에 있으면 아래 구문에서 0으로 설정
if (BuyList.length > 0)
{
for (var i = 0; i < Buylist.length; i++)
{
if (BuyList[i] == 종목코드)
{
buyable = 0; // 당일 매수했던 종목 재매수 금지
}
}
}
//매수신호이고 잔고가 없고, 당일 매수한 적이 없을 때 매수한다.
if (Signal.signalKind == 1 && Account1.Balance.count == 0 && buyable == 1)
{
//Account1.OrderBuy(Main.GetOrderCode(ChartEx.GetCode(1)),1,0,1);
// Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,0,1);
// Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(100000/ChartEx.GetClose(1,0)),0,1);
Account1.OrderBuy(종목코드, 1, 0,1); //단주 매수 1: 시장가
BuyList.push(종목코드); // 종목코드를 저장한다.
Main.MessageList(HHMMSS,"매수주문s1 : ",종목코드);
// Main.MessageLog("매수주문"); //1주종목 0현재봉 0주문가격 1시장가
}
if (Signal.signalKind == 2)
{
//전체미체결주문 갯수
var num = Account1.GetTheNumberOfUnfills();
//전체 미체결수 만큼 루프를 돌면서
for (var i = 0; i < num; i++)
{
//미체결을 하나씩 셋팅하고
Account1.SetUnfill(i);
//미체결종목이 신호종목과 같고 미체결수량이 있으면
if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//잔고수량만큼만 매도
if (Account1.Balance.count > 0)
{
//Account1.OrderSell(Main.GetOrderCode(ChartEx.GetCode(1)),1,0,1);
// Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1);
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1); // 1: 시장가
Main.MessageList(HHMMSS, "매도주문s2 : ",Main.GetOrderCode(Signal.code),Account1.Balance.count);
}
}
}
---------------------------------------------------------------------------------
바쁘시겠지만, 수정 부탁 드립니다.
답변 1
예스스탁
예스스탁 답변
2024-04-15 17:45:43.0
> 원초로 님이 쓴 글입니다.
> 제목 : [글번호 1034] 관련 추가 질문
> 안녕하세요? 1034에서 요청하신 아래 내용으로
-----------------------------------------------------
2. 당일 매매를 원칙으로 작성을 하려고 합니다.
A. 매도 조건은 (Timer는 어떤 단위가 좋을 것 같은지요?)
손절은 -3% - 보유수량 30%, -5% - 보유수량 40%, -7% - 보유수량 전량
수익은 3% - 보유수량 30%, 5% - 보유수량 40%, 7% - 보유수량 전량
Trailing Stop 매도: 당일 고점 대비 -3% (보유수량 50%) - 스팟으로 가능 할까요?
전일 종가 이하 : 매수가 전일 종가 이상 이면 보유수량 50% 손절
- 스팟으로 가능 할까요?
B. 장종료 동시호가 전량 매도(수익,손해 나더라도)
C. 상한가 전량매도(수익에 상관없이)
-------------------------------------------------------------------------
수식을 변경 요청 드립니다.
윗글의 경우는 종목이 검색되면 function Main_OnRcvMarketData(MarketData) 함수 내에서 매수를 실행하는 경우에 대해서 작성이 되었는데,
저는 파워검색으로 검색된 종목에 확장차트 시스템식을 적용해서 나오는 매수/매도 시그날을 이용해서 매매하게 코드가 되어 있습니다. 위의 예제를 참고해서 변경해 보려고 시도해 보고 있는데, 아직 실력이 미천하여 잘 안 되고 있습니다. 변경 부탁 드립니다.
아래는 제가 사용하고 있는 코드의 function Main_OnRiseSignal(ChartEx, Signal) 부분입니다.
----------------------------------------------------------------------------------
function Main_OnRiseSignal(ChartEx, Signal)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//신호발생 종목에 대해 잔고셋팅
종목코드 = Main.GetOrderCode(Signal.code)
Account1.SetBalance(종목코드 ,0);
var buyable = 1; // 매수가능 종목으로 설정, 당일 매수 리스트에 있으면 아래 구문에서 0으로 설정
if (BuyList.length > 0)
{
for (var i = 0; i < Buylist.length; i++)
{
if (BuyList[i] == 종목코드)
{
buyable = 0; // 당일 매수했던 종목 재매수 금지
}
}
}
//매수신호이고 잔고가 없고, 당일 매수한 적이 없을 때 매수한다.
if (Signal.signalKind == 1 && Account1.Balance.count == 0 && buyable == 1)
{
//Account1.OrderBuy(Main.GetOrderCode(ChartEx.GetCode(1)),1,0,1);
// Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,0,1);
// Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(100000/ChartEx.GetClose(1,0)),0,1);
Account1.OrderBuy(종목코드, 1, 0,1); //단주 매수 1: 시장가
BuyList.push(종목코드); // 종목코드를 저장한다.
Main.MessageList(HHMMSS,"매수주문s1 : ",종목코드);
// Main.MessageLog("매수주문"); //1주종목 0현재봉 0주문가격 1시장가
}
if (Signal.signalKind == 2)
{
//전체미체결주문 갯수
var num = Account1.GetTheNumberOfUnfills();
//전체 미체결수 만큼 루프를 돌면서
for (var i = 0; i < num; i++)
{
//미체결을 하나씩 셋팅하고
Account1.SetUnfill(i);
//미체결종목이 신호종목과 같고 미체결수량이 있으면
if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//잔고수량만큼만 매도
if (Account1.Balance.count > 0)
{
//Account1.OrderSell(Main.GetOrderCode(ChartEx.GetCode(1)),1,0,1);
// Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1);
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1); // 1: 시장가
Main.MessageList(HHMMSS, "매도주문s2 : ",Main.GetOrderCode(Signal.code),Account1.Balance.count);
}
}
}
---------------------------------------------------------------------------------
바쁘시겠지만, 수정 부탁 드립니다.