커뮤니티

스팟 문의

프로필 이미지
gt
2014-06-23 13:57:23
1295
글번호 223044
답변완료
엑셀시트에 매매결과를 저장하고자 합니다. 엑셀객체: CXLRPT (변수는 위에서 선언됨) 아래코드는 시그널이 발생하면 엑셀시트에 내용을 기록하는 일부코드입니다. 차트에서 기본적으로 피라미딩으로 진입합니다. A,B,C,D,E 신호가 발생한다고 가정(순서 랜덤) A 매수진입신호가 발생하면 행 N에는 A신호에 대한 진입내역(진입시간, 시그널종류, 주문가격, 체결가격 등등)을 기록함 C 매수진입신호가 발생하면 N+1행에 C신호에 대한 진입내역 기록 B 매수신호가 발생하면 N+2행에 B신호에 대한 진입내역 기록 여기서 EXITLONG("A매수청산", ONCLOSE, DEF, "A", DEF); 신호가 발생하면 A진입에 대해 기록된 행(N)을 찾아서 바로 옆에 청산내역을 기록하고자 합니다. 핵심은 해당진입에 대해 해당 행에 기록하는 것인데 이부분이 좀 막힙니다. 코드 검증도 부탁드리겠습니다. 도움주시면 감사하겠습니다... ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // INIT // function CXLRPTInit() { var strData = CXLRPT.GetData(gCXLRPTxSheetIndex, "A1"); if (strData != "NO") { CXLRPT.SetRowData(gCXLRPTxSheetIndex, "A1", "ITEM", "OPEN TIME", "TYPE", "ORDER PRICE", "CONTRACT PRICE", "CONTRACTS", "CLOSE TIME", "TYPE", "ORDER PRICE", "CONTRACT PRICE", "CONTRACTS", "COMMISSION", "PROFITS"); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // XLS TRADING RESULT // function XLSTradingResult(TicketTime) { // BUY SIGNAL if (gPosition == 1) { gCXLRPTxRowEB = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetFont(gCXLRPTxSheetIndex, "A" + gCXLRPTxRowEB, "10", "Tahoma", "RED", false, true, 0); CXLRPT.SetRowData(gCXLRPTxSheetIndex, "A" + gCXLRPTxRowEB, gOrderCode, TicketTime, "BUY", CMD.Ask(3), "-", gDefOrderContracts); } // EXITLONG SIGNAL else if (gPosition == 2) { gCXLRPTxRowEXL = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetRowData(gCXLRPTxSheetIndex, "G" + gCXLRPTxRowEXL, TicketTime, "EL", CMD.Bid(3), "-", gDefOrderContracts, gDefCommission * 2, gEBxContractPrice - gEXLxContractPrice); } // SELL SIGNAL else if (gPosition == -1) { gCXLRPTxRowES = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetRowData(gCXLRPTxSheetIndex, "A" + gCXLRPTxRowES, gOrderCode, TicketTime, "SELL", CMD.Bid(3), "-", gDefOrderContracts); } // EXISHORT SIGNAL else if (gPosition == -2) { gCXLRPTxRowEXS = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetRowData(gCXLRPTxSheetIndex, "G" + gCXLRPTxRowEXS, TicketTime, "ES", CMD.Ask(3), "-", gDefOrderContracts, gDefCommission * 2, gESxContractPrice - gEXSxContractPrice); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-07-04 17:21:32

안녕하세요 예스스탁입니다. 내용은 조금 간단히 해서 작성해 보았습니다. 기본개념은 진입신호가 발생하면 라인수를 카운트하고 어떤 진입명인지 보고 각각 다른 변수에 라인수를 저장해서 청산시에 진입때 출력한 라인수를 가져와 사용하는 내용입니다. var Line,ALine,BLine,CLine; var ABuyID, BBuyID, CBuyID,Anum,Bnum,Cnum; var AxID, BxID, CxID,Axnum,Bxnum,Cxnum; function Main_OnStart() { //초기값은 1 Line = 1; //A1,B1,C1 Excel1.SetRowData(1,"A"+Line, "진입신호시간","진입신호명","신호가격"); //D1,E1,F1 Excel1.SetRowData(1,"D"+Line, "청산신호시간","청산신호명","신호가격"); } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { //매수신호 발생시 Line은 1씩 증가 Line = Line+1; if (Signal.name == "A진입") { //"A진입"일떼 적혀질 라인수 저장 ALine = Line; Excel1.SetRowData(1,"A"+Line,Signal.time,Signal.name,Signal.price); ABuyID = Account1.OrderBuy(Main.GetOrderCode(Signal), Signal.count,0,1); } if (Signal.name == "B진입") { //"B진입"일떼 적혀질 라인수 저장 BLine = Line; Excel1.SetRowData(1,"A"+Line,Signal.time,Signal.name,Signal.price); Bid = Account1.OrderBuy(Main.GetOrderCode(Signal), Signal.count,0,1); } if (Signal.name == "C진입") { //"C진입"일떼 적혀질 라인수 저장 CLine = Line; Excel1.SetRowData(1,"A"+Line,Signal.time,Signal.name,Signal.price); CBuyID = Account1.OrderBuy(Main.GetOrderCode(Signal), Signal.count,0,1); } } if (Signal.signalKind == 2) { if (Signal.name == "A매수청산") { //"D"에 ALine으로 저장한 행번호 조합 Excel1.SetRowData(1,"D"+ALine,Signal.time,Signal.name,Signal.price); AxID = Account1.OrderBuy(Main.GetOrderCode(Signal), Signal.count,0,1); } if (Signal.name == "B매수청산") { //"D"에 BLine으로 저장한 행번호 조합 Excel1.SetRowData(1,"D"+BLine,Signal.time,Signal.name,Signal.price); BxID = Account1.OrderBuy(Main.GetOrderCode(Signal), Signal.count,0,1); } if (Signal.name == "C매수청산") { //"D"에 Cline으로 저장한 행번호 조합 Excel1.SetRowData(1,"D"+CLine,Signal.time,Signal.name,Signal.price); CxID = Account1.OrderBuy(Main.GetOrderCode(Signal), Signal.count,0,1); } } } 즐거운 하루되세요 > gt 님이 쓴 글입니다. > 제목 : 스팟 문의 > 엑셀시트에 매매결과를 저장하고자 합니다. 엑셀객체: CXLRPT (변수는 위에서 선언됨) 아래코드는 시그널이 발생하면 엑셀시트에 내용을 기록하는 일부코드입니다. 차트에서 기본적으로 피라미딩으로 진입합니다. A,B,C,D,E 신호가 발생한다고 가정(순서 랜덤) A 매수진입신호가 발생하면 행 N에는 A신호에 대한 진입내역(진입시간, 시그널종류, 주문가격, 체결가격 등등)을 기록함 C 매수진입신호가 발생하면 N+1행에 C신호에 대한 진입내역 기록 B 매수신호가 발생하면 N+2행에 B신호에 대한 진입내역 기록 여기서 EXITLONG("A매수청산", ONCLOSE, DEF, "A", DEF); 신호가 발생하면 A진입에 대해 기록된 행(N)을 찾아서 바로 옆에 청산내역을 기록하고자 합니다. 핵심은 해당진입에 대해 해당 행에 기록하는 것인데 이부분이 좀 막힙니다. 코드 검증도 부탁드리겠습니다. 도움주시면 감사하겠습니다... ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // INIT // function CXLRPTInit() { var strData = CXLRPT.GetData(gCXLRPTxSheetIndex, "A1"); if (strData != "NO") { CXLRPT.SetRowData(gCXLRPTxSheetIndex, "A1", "ITEM", "OPEN TIME", "TYPE", "ORDER PRICE", "CONTRACT PRICE", "CONTRACTS", "CLOSE TIME", "TYPE", "ORDER PRICE", "CONTRACT PRICE", "CONTRACTS", "COMMISSION", "PROFITS"); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // XLS TRADING RESULT // function XLSTradingResult(TicketTime) { // BUY SIGNAL if (gPosition == 1) { gCXLRPTxRowEB = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetFont(gCXLRPTxSheetIndex, "A" + gCXLRPTxRowEB, "10", "Tahoma", "RED", false, true, 0); CXLRPT.SetRowData(gCXLRPTxSheetIndex, "A" + gCXLRPTxRowEB, gOrderCode, TicketTime, "BUY", CMD.Ask(3), "-", gDefOrderContracts); } // EXITLONG SIGNAL else if (gPosition == 2) { gCXLRPTxRowEXL = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetRowData(gCXLRPTxSheetIndex, "G" + gCXLRPTxRowEXL, TicketTime, "EL", CMD.Bid(3), "-", gDefOrderContracts, gDefCommission * 2, gEBxContractPrice - gEXLxContractPrice); } // SELL SIGNAL else if (gPosition == -1) { gCXLRPTxRowES = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetRowData(gCXLRPTxSheetIndex, "A" + gCXLRPTxRowES, gOrderCode, TicketTime, "SELL", CMD.Bid(3), "-", gDefOrderContracts); } // EXISHORT SIGNAL else if (gPosition == -2) { gCXLRPTxRowEXS = CXLRPT.GetRowCount(gCXLRPTxSheetIndex) + 1; CXLRPT.SetRowData(gCXLRPTxSheetIndex, "G" + gCXLRPTxRowEXS, TicketTime, "ES", CMD.Ask(3), "-", gDefOrderContracts, gDefCommission * 2, gESxContractPrice - gEXSxContractPrice); } }