답변완료
문의
차트 c sell주문
미니옵션 풋옵션 매수 ok
차트 c "c"이름 청산으로
청산 주문이 나가긴 했는데
첨부 메세지 뜨면서 오류가 발생했습니다.
수식 오류 수정 부탁드립니다.
***************************************************************************
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var CallExit,PutExit;
var X1,X2;
var BID,BNUM,PLCheck;
function Main_OnStart()
{
CallExit = false;
PutExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매도신호이면
if (Signal.signalKind == 3)
{
PutOrderCode = Option1.GetATMPutRecent(1);//*** 풋옵션 외가격-1 을 찾는다
//풋옵션종목 매수
if (PutExit == false)
{
//지정가
Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(PutOrderCode, 1, 0, 1);
PLCheck = false;
X1 = false;
X2 = false;
Main.SetTimer(1, 1000);//1초 타이머
}
}
if (Signal.signalKind == 4 && Signal.name == "c")
{
X1 = true;
//1)
if (X1 == true || X2 == true)
{
Account1.OrderSell(PutOrderCode, 1, Option1.GetBidByCode(PutOrderCode, 2), 0);
PLCheck = false;
}
}
}
function Chart2_OnRiseSignal(Signal)
{
s2 = Signal.signalKind;
if (Signal.signalKind == 4 && Signal.name == "d")
{
X2 = true;
//1)
if (X1 == true || X2 == true)
{
Account1.OrderSell(PutOrderCode, 1, Option1.GetBidByCode(PutOrderCode, 2), 0);
PLCheck = false;
}
}
}
답변완료
2414번 추가 질문입니다.
안녕하세요. 전에 작성해주신 수식에 대해서 추가 문의 드립니다.
제가 구상했던 시스템 운영 방식에 거의 다다른 것 같습니다.
큰 도움 주셔서 너무 감사합니다. 즐거운 하루 보내세요.
------------------------------------------------------------------------------------
1. 미완성 신호로 매도하는 부분을 작성해주셨는데, 미완성 신호로 매수하는 부분 추가
(제가 내용을 추가 했는데 확인 부탁드립니다.)
2. 미완성 신호로 매수된 경우, 원래 익일 시가에 완성신호로 매수되는 금번차수 매수 금지
(미완성 1차 매수 시 완성 1차 매수 금지, 미완성 2차 매수시 완성 2차 매수 금지)
var ItemList;
var Count;
var ReqCount;
var d;
var H;
var CT = [];
function Main_OnStart()  
{
      Main.MessageLog("스팟시작");
      d = new Date();
      h = d.getDate();
      //지정한 관심그룹의 종목수(관심그룹지정 필요)
      Count = Main.GetItemCountOfInterest("관심종목1");
      Main.MessageList("지정관심그룹 종목수 : ", Count);
      ItemList = [];      
      //관심그룹 종목코드를 ItemList로 옮김
      for(var i = 0 ; i < Count ; i++)
      {
            //관심그룹지정 필요
            ItemList.push(Main.GetItemCodeInInterest("관심종목1", i));
      }
      //관심종목이 1개 이상이면 
      if (Count > 0)
    {
            //첫종목부터 요청시작
            //요청갯수 카운트 변수는 초기값 0
            ReqCount = 0;
            
            var TradeSet =  new SystemTradeInfo(TRADE_FIXCAPITAL,
                                             1,                         // 거래수량
                                             100000000,                 // 자산
                                             1,                         // 단위수량
                                             0, 0, CALCMETHOD_PERCENT,  // 진입/청산 수수료
                                             0, 0, CALCMETHOD_POINT,    // 진입/청산 슬리피지
                                             PYRAMIDING_ENTRY,          // 피라미딩 설정여부(다른진입신호만 허용)
                                             100000,                      // 최대진입수량
                                             20);                       // 최대진입횟수
            var ChartSet = new ReqChartItem(ItemList[ReqCount],1,CHART_PERIOD_DAILY,1000,CHART_REQCOUNT_BAR,true,false);
            /////SystemInfo(name,kind,inputVar,tradeInfo,stopInfo)
            var SystemSet  = new SystemInfo("YL_시스템(일봉)", YL_TYPE_NORMAL, null, TradeSet);
            //차트객체 요청
            Main.ReqChartEx(ChartSet,SystemSet);
            Main.MessageList("확장차트생성요청:",ItemList[ReqCount]);
            //1벝 타이머 10초 세팅
            Main.SetTimer(1, 10000);
      }
}  
//차트객체 수신
function Main_OnRcvChartEx(ChartEx)
{
      //방금 요청한 종목이 맞는지 확인
      if (ChartEx.GetCode(1) == ItemList[ReqCount])   
      {
            Main.MessageList("확장차트생성완료:",ChartEx.GetCode(1));
            //차트객체를 순차적으로 CT배열변수에 저장
            CT.push(ChartEx);
            
            //요청갯수 1증가
            ReqCount = ReqCount+1;
               
            //요청갯수가 Count 미만이면
            if (ReqCount < Count)
            {
                  //다음종목 요청
                  var TradeSet =  new SystemTradeInfo(TRADE_FIXCAPITAL,
                                                   1,                         // 거래수량
                                                   100000000,                 // 자산
                                                   1,                         // 단위수량
                                                   0, 0, CALCMETHOD_PERCENT,  // 진입/청산 수수료
                                                   0, 0, CALCMETHOD_POINT,    // 진입/청산 슬리피지
                                                   PYRAMIDING_ENTRY,          // 피라미딩 설정여부(다른진입신호만 허용)
                                                   100000,                      // 최대진입수량
                                                   20);                       // 최대진입횟수
                  var ChartSet = new ReqChartItem(ItemList[ReqCount],1,CHART_PERIOD_DAILY,1000,CHART_REQCOUNT_BAR,true,false);
                  /////SystemInfo(name,kind,inputVar,tradeInfo,stopInfo)
                  var SystemSet  = new SystemInfo("YL_시스템(일봉)", YL_TYPE_NORMAL, null, TradeSet);
                  Main.ReqChartEx(ChartSet,SystemSet);
                  Main.MessageList("확장차트생성요청:",ItemList[ReqCount]);                  
            }
            else//아니면
            {
                  //종목객체생성 종료
                  Main.MessageList("종목객체생성완료");      
            }
      }
}
//타이머 동작
function Main_OnTimer(nEventID)
{
      //1번 타이머 동작
      if (nEventID == 1)
      {
            var d = new Date();
            HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
            //15시 25분이 되면
            if (HHMMSS >= 152500)
            {
                  //타이머종료
                  Main.KillTimer(1);
#######################################추가#####################################
                  //생성된 전체차트에서 미완성 매수신호 있는 것을 확인하고 
                  //미완성매수신호가 있고 잔고에 보유수량이 없으면 매수
                  for (var i = 0; i < CT.length; i++)
                  {
                        ///마지막봉의 미완성 신호 정보를 가져와 저장
                        var Incom2 = CT[i].GetIncompleteSignal();
                        //미완성 정보가 있고 매수 신호이면
                        if (Incom2[0] != null && Incom2[0].signalKind == 1) 
                        {
                              Account1.SetBalance(Incom2[0].code, 0)
                              if (Account1.Balance.count > 0)
                              {
                                    Account1.OrderBuy(Incom2[0].code, Incom2[0].count, Incom2[0].price, 0);
                              }
                        }
                  }
##############################################################################
                  //생성된 전체차트에서 미완성 매도신호 있는 것을 확인하고 
                  //미완성매도신호가 있고 잔고에 보유수량이 있으면 전량 매도
                  for (var i = 0; i < CT.length; i++)
                  {
                        ///마지막봉의 미완성 신호 정보를 가져와 저장
                        var Incom = CT[i].GetIncompleteSignal();
                        //미완성 정보가 있고 매수청산 신호이면
                        if (Incom[0] != null && Incom[0].signalKind == 2) 
                        {
                              Account1.SetBalance(Incom[0].code, 0)
                              if (Account1.Balance.count > 0)
                              {
                                    Account1.OrderSell(Incom[0].code, Account1.Balance.count, Incom[0].price, 0);
                              }
                        }
                  }
            }
      }
}
//신호발생
function Main_OnRiseSignal(ChartEx, Signal)
{
      //신호발생 종목에 대해 잔고셋팅
      Account1.SetBalance(Main.GetOrderCode(Signal.code),0);
     
 
###############################추가 요청#######################################  
#### 미완성 신호로 매수된 경우, 익일 시가에 완성신호로 금번 차수 매수 금지#####
########## 다음 차수 매수는 익일에 나오지 않습니다.###########################
      //매수신호 시 매수 
      if (Signal.signalKind == 1) ////// && Account1.Balance.count == 0)
      {
            Account1.OrderBuy(Main.GetOrderCode(Signal.code), Signal.count, Signal.price, 0);      
            Main.MessageList("매수주문9");
      }
      if (Signal.signalKind == 2)
      {
            //전체미체결주문 갯수
            var num = Account1.GetTheNumberOfUnfills();
            //전체 미체결수 만큼 루프를 돌면서
            for (var i = 0; i < num; i++)
            {
                  //미체결을 하나씩 셋팅하고 Account1.GetTotalAmount(nCategory, nTradeKind)
                  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(Signal.code), Signal.count, Signal.price, 0);
                  Main.MessageList("매도주문");  
            }
      }
}
답변완료
문의
exit 수식 추가 건입니다.
차트1 exitlong("a");
차트2 exitlong("b");
1) a 또는 b 를 만족하면 청산
2) a and b 를 만족해야만 청산
3) 차트참조 없이
setstoploss(2, percentstop);
setstoptrailing(5,0,percentstop,1);
위 3가지 경우로 나누어 청산수식 추가 부탁드립니다.
*********************************************************************
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var CallExit,PutExit;
function Main_OnStart()
{
CallExit = false;
PutExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
CallOrderCode = Option1.GetATMCallRecent(1); //*** 콜옵션 외가격+1 을 찾는다
PutOrderCode = Option1.GetATMPutRecent(1);//*** 풋옵션 외가격-1 을 찾는다
//콜옵션종목 매수
if (CallExit == false)
{
//지정가
Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 2), 0);
//시장가
//Account1.OrderBuy(CallOrderCode, 1, 0, 1);
}
}
}