커뮤니티

행복; 수식 작성 바랍니다

프로필 이미지
행복한가방
2015-07-15 01:09:09
1344
글번호 223562
답변완료
한국의 금융산업 발전을 위해 불철주야 애쓰시는 귀하의 노고를 높이 평가합니다 수식 작성 바랍니다 << 진입조건 >> - 주기; 틱 - data1; 기아차 - data2; 현대차 - data3; 미국 다우지수 < 매수 > - 새벽에 마감한 미국 다우지수가 하락하고 - 현대차의 시가가 전일 고가보다 낮고 - 기아차의 시가가 전일 저가보다 높으면 - 즉시, 기아차의 시가에 1억원어치 매수 주문 < 매도 > - 매수 체결이 되었다면 - 체결과 동시에 체결 수량의 50%를 +10%에 매도 주문을 낸 후 - 매도 체결이 되지 않으면 1일 후 다시 +10%에 매도 주문을 낸 후 - 매도 체결이 되지 않으면 2일 후 다시 +10%에 매도 주문을 낸 후 - 매도 체결이 되지 않으면 3일 후 종가에 전량 매도 주문 수고하십시요^^
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-07-16 19:30:05

안녕하세요 예스스탁입니다. 아래식 주석을 붙여드립니다. 주석 내용을 참고하셔서 수정보완해 사용하시기 바랍니다. 스팟식은 단지 식작성의 가이드라인입니다. 수식에 게시판 금칙어가 있습니다. 영문 업데이트의 중간에 Up*date와 같이 *이 있으므로 제거하고 사용하셔야 합니다. var BuyID,BuyNum,Entry,M1,M2,FillVol; var Vol,Xvol,EntryAct; var EntryDate,EntryDayCnt,EntryVol,ExitVol,ExPrice,Exit; //스팟시작시 function Main_OnStart() { var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); EntryDate = Main.GetUserValue("진입일"); EntryDayCnt = Main.GetUserValue("경과일수"); EntryVol = Main.GetUserValue("진입수량"); ExitVol = Main.GetUserValue("청산수량"); ExPrice = Main.GetUserValue("청산가격"); //내부파일에서 지정한 이름으로 가져온 값이 모두 없으면 entry는 true가 뒤어 당일 진입가능 //값이 있으면(이전일에 진입이 되었다는 의미) 당일 진입하지 않고 청산만 수행 if (EntryDate == "" && EntryDayCnt == "" && EntryVol == "" && ExitVol =="" && ExPrice == "") Entry = true; else Entry = false; EntryAct = false;//매수진입을 시초가 수신시 한번만 동작하기 위한 변수 Exit = false;//매수진이후 다음날 부터 청산을 하루에 한번만 동작하기 위한 변수 } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { if (lUp*dateID == 20001)//*제거 { //Entry가 True이면 2개 데이터 시가 모두 수신될때 한번만 동작 if (EntryAct == false && Entry == true && MarketData1.open > 0 && MarketData1.open > 0) { EntryAct = true; //기아차 잔고셋팅 Account1.SetBalanceItem(MarketData2.code,0); //기아차에 대한 잔고가 없을 때만 //현대차는 전일고가보다 아래서 시가가 시작하고 //기아차는 전일저가보다 위에서 시가를 시작하고 //다우지누는 종가하락하면 //시장가로 1억원치 매수 if (Account1.Balance.count == 0 && MarketData1.open < MarketData1.GetPrevHigh(1) && MarketData2.open > MarketData2.GetPrevLow(1) && MarketData3.GetPrevClose(1) < MarketData3.GetPrevClose(2)) { //1억 var VV = 100000000; //1억에 대한 수량 Vol = Math.floor(VV/MarketData2.current); //매수주문(주문후 아이디를 BuyID에 저장) BuyID = Account1.OrderBuy(MarketData2.code,Vol,0,1) //체결수량 합산할 변수(초기값 0) FillVol = 0; } } var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); //Entry false이고 기아차 시초가 수신되고 오늘 날자가 저장된 EntryDate보다 크거 경과일수가 2일이내이면 if (Entry == false && MarketData1.open > 0 && Exit == false && YYYYMMDD > EntryDate && EntryDayCnt < 2) { Exit = true; //기아차 잔고셋팅 Account1.SetBalanceItem(MarketData2.code,0); //잔고수량이 진입수량과 같음(일부라도 청산이 되지 않고 아직 남아있을 경우) if (Account1.Balance.count == EntryVol ) { //절반 매도주문(체결가격+10%) Account1.OrderSell(MarketData2.code, ExitVol, ExitPrice, 0); //예스스팟의 변수는 휘발성입니다. //재적용 하면 사라지므로 필요한 값이 있으면 //내부파일에 적어두어야 합니다. Main.SetUserValue("진입일",YYYYMMDD);//오늘이므로 0으로 지정 Main.SetUserValue("경과일수",EntryDayCnt+1);//경과일수 1증가 지정 Main.SetUserValue("진입수량",Account1.Balance.count) Main.SetUserValue("청산수량",XVol); Main.SetUserValue("청산가격",Xprice); } } //Entry false이고 기아차 시초가 수신되고 오늘 날자가 저장된 EntryDate보다 크면 경과일수가 2이고(3일째되는날)이고 14시30분 이후이면 //시장가로 전량 청산 if (Entry == false && MarketData1.open > 0 && Exit == false && YYYYMMDD > EntryDate && EntryDayCnt == 2 && MarketData2.time >= 1430000000) { Exit = true; //기아차 잔고셋팅 Account1.SetBalanceItem(MarketData2.code,0); //잔고수량이 진입수량과 같음(일부라도 청산이 되지 않고 아직 남아있을 경우) if (Account1.Balance.count == EntryVol ) { //절반 매도주문(체결가격+10%) Account1.OrderSell(MarketData2.code, Account1.Balance.count, 0,1); //내부저장 변수의 값을 모두 공란으로 만 Main.SetUserValue("진입일",""); Main.SetUserValue("경과일수",""); Main.SetUserValue("진입수량","") Main.SetUserValue("청산수량",""); Main.SetUserValue("청산가격",""); } } } } //주문응답 function Main_OnOrderResponse(OrderResponse) { //주문응답 수신되면 if (BuyID == OrderResponse.orderID) { //주문번호 저장 BuyNum = OrderResponse.orderNum; } } //체결응답 function Main_OnNotifyFill(NotifyFill) { //저장한 주문번호와 같은 주문번호의 체결이 들어오면 if (BuyNum == NotifyFill.orderNum) { //FillVol에 체결수량 누적 FillVol = FillVol+NotifyFill.count; //진입수량 전량체결되면 if (FillVol == Vol) { Main.SetTimer(1, 5000); //5초 타이머(체결후 잔고가 갱신되는 시차가 있으므로 넉넉히 5초뒤에 매도 주문하게 작성했습니다. } } } //타이머 작동 function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); //기아차 잔고셋팅 Account1.SetBalanceItem(MarketData2.code,0); //청산할 수량(잔고의 50%) var XVol = Math.floor(Account1.Balance.count*0.5) //주문가격계산(스팟에서는 평단가*1.10으로 하면 주문에러입니다.) //호가까지 감안해서 호가가격에 맞는 값을 도출해 지정해야 합니다. //평단가+10%의 가격을 1틱값으로 나누어 몇틱인지 계산해 정수값만 취하고 //해당 값에 다시 1틱값을 곱해 값 계산 var Xprice = Math.floor(Math.floor(Account1.Balance.avgUnitCost *1.10/MarketData2.GetTickSize())*MarketData2.GetTickSize(dPrice)); //절반 매도주문(체결가격+10%) Account1.OrderSell(MarketData2.code, Xvol, Xprice, 0); //예스스팟의 변수는 휘발성입니다. //재적용 하면 사라지므로 필요한 값이 있으면 //내부파일에 적어두어야 합니다. var d = new Date(); var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); Main.SetUserValue("진입일",YYYYMMDD);//오늘이므로 0으로 지정 Main.SetUserValue("경과일수",0);//오늘이므로 0으로 지정 Main.SetUserValue("진입수량",Account1.Balance.count) Main.SetUserValue("청산수량",XVol); Main.SetUserValue("청산가격",Xprice); } } 즐거운 하루되세요 > 행복한가방 님이 쓴 글입니다. > 제목 : 행복; 수식 작성 바랍니다 > 한국의 금융산업 발전을 위해 불철주야 애쓰시는 귀하의 노고를 높이 평가합니다 수식 작성 바랍니다 << 진입조건 >> - 주기; 틱 - data1; 기아차 - data2; 현대차 - data3; 미국 다우지수 < 매수 > - 새벽에 마감한 미국 다우지수가 하락하고 - 현대차의 시가가 전일 고가보다 낮고 - 기아차의 시가가 전일 저가보다 높으면 - 즉시, 기아차의 시가에 1억원어치 매수 주문 < 매도 > - 매수 체결이 되었다면 - 체결과 동시에 체결 수량의 50%를 +10%에 매도 주문을 낸 후 - 매도 체결이 되지 않으면 1일 후 다시 +10%에 매도 주문을 낸 후 - 매도 체결이 되지 않으면 2일 후 다시 +10%에 매도 주문을 낸 후 - 매도 체결이 되지 않으면 3일 후 종가에 전량 매도 주문 수고하십시요^^