커뮤니티

예스스팟 Q&A

답변완료

문의

질문 수정할게요. 선물신호 타종목주문. 현재 아래식은 1~2 사이 옵션중 2 에 가까운 종목이 진입 되는데요. 1에 가까운 종목으로 진입되게 수정 부탁드립니다. var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.0 && Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 2.0 && Option.GetCurrent(1, ii) >= 1.0) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } //buy신호 발생시 if (Signal.signalKind == 1) { Start = 1; CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } if (CC > 0) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } // Exitlong신호 발생시 if (Start == 1 && Signal.signalKind == 2) { Start = 0; if (CC > 0) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //sell신호 발생시 if (Signal.signalKind == 3) { Start = -1; PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } if (PP > 0) { Account1.OrderBuy(PutOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //exitshort신호 발생시 if ( Start == -1 && Signal.signalKind == 4) { Start = 0; if (PP > 0) { Account1.OrderSell(PutOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } }
프로필 이미지
털보
2013-08-30
880
글번호 222538
답변완료

옵션 종목 찾기 (1 이하이면서 가장 가까운 종목)

안녕하세요. 아래 예제 식은 프리미엄 1 이상이면서 가장 가까운 종목을 찾는 것인데요, 약간 다르게 1 "이하"이면서 가장 가까운 종목을 찾도록 변경하고 싶습니다. 배열 순서를 바꾸면 될 것 같은데 막상 하려니 잘 안되네요. 도움 주시면 고맙겠습니다. var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } //차트에서 신호가 발생 function Chart1_OnRiseSignal(Signal) { //Buy신호이면 if (Signal.signalKind == 1) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) >= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } var CC = 9999999; var CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = 9999999; var PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매수 if (CC < 9999999) Account1.OrderBuy(CallOrderCode, 1, 0,1); //풋매도 if (PP < 9999999) Account1.OrderSell(PutOrderCode, 1, 0,1); } //exitlong신호 발생하면 if (Signal.signalKind == 2 && Start == 1) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Account1.OrderBuy(PutOrderCode, 1, 0, 1); } //Sell신호이면 if (Signal.signalKind == 3) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) >= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } var CC = 9999999; var CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = 9999999; var PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매도 if (CC > 0) Account1.OrderSell(CallOrderCode, 1, 0,1); //풋매수 if (PP > 0) Account1.OrderBuy(CallOrderCode, 1, 0,1); } //exitshort신호 발생하면 if (Signal.signalKind == 4 && Start == 1) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Account1.OrderSell(PutOrderCode, 1, 0, 1); } }
프로필 이미지
곰탈
2013-08-28
964
글번호 222536
답변완료

static 변수 선언

수고 하십니다. YestSpot 에서 static 변수 선언 하는 방법 문의 드립니다. Marketdata = Futures var static a; static a; static var a; 모두 에러가 나더라구요 미리 감사 드립니다. < 질문> 1. Static 변수 선언 방법 2. 직전값을 참조하는 방법 다음은 스팟의 실행시점부터 최고가를 찾는 로직 샘플입니다. 이와 같은 코딩을 할때 함수로 구현시에는 해당 함수를 호출한다음에 직전값을 참조해야하는 로직이 필요한데. 함수 구현시에 제대로 되지 않습니다. 이부분에서 적어도 flag 값과 NewMax_before 의 변수 값이 호출후에 사라지면 안되는데 이를 해결 할 방법을 알고 싶습니다. // Max함수 테스트 var flag = 0; var NewMax =0; var NewMax_before=0; var initialPrice =0; var Price =0; function Main_On**Market(sItemCode, l**ID) { if(sItemCode =Futures.code && l*pdateID == 20001) // 선물의 시세를 받으면 { Price = Futures.current; if(flag ==0) { NewMax =Price; // 최고에 가격을 저장함 flag =1; initialPrice = Price ; Main.MessageList("flag2", flag); } // 최고 값을 구함 if(Price >= NewMax) { NewMax = Price; } else { NewMax = NewMax_before; } Main.MessageList("검증 ", "최초가격", initialPrice, "현재가 ", Price ,"flag ", flag ,"NewMax", NewMax,"NewMax_bf", NewMax_before ); // 직전 값의 처리 NewMax_before = NewMax; } }
프로필 이미지
히말라야
2013-08-29
978
글번호 222533
답변완료

부탁드립니다.

수고 많습니다. 681번 수정건은 없는걸로 해주시구요. <프로그램명:스팟-돌파> var1= dayhigh(1)-daylow(1); if stime >= 90000 and stime <=144000 then { buy("buy-001",atstop,daylow+var1*0.33); sell("sell-001",atstop,dayhigh-var1*0.33); } setstopendofday(150000); ## 당일저가(고가)에서 전일폭의 33%를 돌파하면 매수(매도) ## <객체계좌-2403-xxxx-31> <객체옵션> (스팟랭귀지) 1. buy신호시: call 2.5p 이하중 최고가의 콜매수(5호가매수). 매수청산신호시: 진입한 콜청산(같은 종목 같은수량5호가) sell신호시: put 2.5p 이하중 최고가의 풋매수(5호가매수). 매도청산신호시: 진입한 콜청산(같은 종목 같은수량5호가) 2. buy신호시: put 2.5p 이하중 최고가의 풋매도(5호가매도). 매수청산신호시: 진입한 풋청산(같은 종목 같은수량5호가) sell신호시: call 2.5p 이하중 최고가의 콜매도(5호가매도). 매도청산신호시: 진입한 콜청산(같은 종목 같은수량5호가) 3. buy신호시: call 2.5p 이하중 최고가의 콜매수(5호가매수)와 put 2.5p 이하중 최고가의 풋매도(5호가매도). 매수청산신호시: 콜매수청산,풋매도청산(같은 종목 같은수량5호가) sell신호시 put 2.5p 이하중 최고가의 풋매수(5호가매수)와 call 2.5p 이하중 최고가의 콜매도(5호가매도). 매수청산은 콜매수청산,풋매도청산(같은 종목 같은수량5호가) 일단 선물신호로 1) 같은 방향의 옵션을 매수하는것, 2) 반대 방향의 옵션을 매도하는것, 3) 같은 방향은 매수하고 반대방향은 매도하는 것을 처리할 수 있게 해주시기 바랍니다. 감사합니다.
프로필 이미지
먼지의추억
2013-08-26
1079
글번호 222528
답변완료

문의 올립니다.

안녕하십니까? 항상 친절하신 답변에 깊이 감사드립니다. 예스랭귀지로 구현한 시스템 전략은 어느 정도 최소한 제게는 만족스럽게 정리가 되었는데, 이와 함께 사용할 스팟 전략을 짜고 있는 중입니다. 대략 아래와 같은 흐름을 가지고 스팟을 코딩하는 중인데, 저 스스로 제가 하고 있는 것이 제대로 하고 있는 것인지도 궁금하고, 막히기도 하고 해서, 전문적인 가르침을 받고자 질문 글 올립니다. 아래의 흐름을 기반으로 소스를 짜려고 하는데, 각종 function들 속에서, 어떻게 명령들을 구현하는 것이 좋을지, 길을 제시하여 주시면 대단히 감사하겠습니다. 흐름: <<<<<<<<<< <<<<<<<<<< <<<<<<<<<< <<<<<<<<<< <<<<<<<<<< <<<<<<<<<< <<<<<<<<<< 1. 차트에서 매수신호 발생 (예를 들어, 이평선 두 개가 이제 막 정배열로 됨) (이 전체 모델에서, 단순화를 위해, 신호발생은 매수신호만 있는 걸로 가정함) 2. 매수주문함. (OnRiseSignal. 주문ID: ID_1B, 주문가격: P_1B) 3. 이 매수주문이 체결되는 경우(아래 4)과 미체결된 경우(아래 8)로 구분. 4. 매수주문이 체결되면: 익절(ProfitTarget) 매수청산주문 발주. 매수가격보다 5틱 위 가격으로 매수청산 주문. (아마도 OnNotifyFill 사용?) 5. 이 익절 매수청산주문이 체결되는 경우(아래 6)와, 안 되는 경우(아래 7)로 구분. 6. 익절 매수청산주문이 체결되는 경우 (아마도 OnNotifyFill 사용?): 전체과정 종료 (다음 새로운 매수신호에 따라 신규매수주문이 가능하도록 함. 미체결주문도 없고, 미결제잔고도 없다는 것을 변수들[Step = 0, U_1B = 0, U_1S = 0, BC_L = 0 등]을 이용해서 변수들에 저장해서, 전체과정이 위의 1번에서부터 새롭게 시작할 수 있도록 해 줌) 7. 익절 매수청산주문이 체결되지 않은 경우 (아마도 OnTimer 사용?): 반드시 체결되도록 함. (즉 매수청산주문이 체결되어야만 일단 전체과정이 종료되고, 다음 새로운 매수신호에 따라 신규매수주문이 가능하게 함). * (매수가격+5틱 지정가로 했던) 매수청산주문이 발주된 지 * 1분이 지나도 체결되지 않으면, 현재가로 매수청산주문을 정정주문함. * 2분이 지나도 체결되지 않으면, 시장가로 매수청산주문을 다시 냄. (원 주문을 취소하고, 새로 시장가 매수청산 주문 발주) 8. 매수주문이 미체결된 경우는 다시 매수주문 발주 당시 상황이 지금도 유지되는 경우와, 그렇지 않은 경우로 구분함. (아마도 OnTimer 사용?) (타이머로 3초마다 체크, 그에 따른 처리를 계속함. 아래와 같이.) 9. 매수주문 미체결시, 발주 당시 상황이 지금도 유지되는 경우 (예를 들어, 지금도 차트에서 이평선 두 개가 정배열 상태 유지): 아무 것도 안하고, 이미 발주한 매수주문이 체결되기를 기다리기만 함. 10. 매수주문 미체결시, 발주 당시 상황이 이제 변해 버린 경우 (예를 들어, 차트에서 이평선 두 개가 이제 역배열로 바뀌어 버림): 기존 미체결 매수주문을 취소해 버림. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> * 아마도 function C1_OnRiseSignal(Signal) 속에 위의 2번을 넣고, function Main_OnNotifyFill(NotifyFill) 속에 위의 4번과 6번을 넣고, function Main_OnTimer(nEventID) 속에 위의 7, 9, 10을 넣으면 되지 않겠나 생각합니다만, function Main_OnUp*dateMarket은 위의 경우에 굳이 사용하지 않아도 괜찮은 것인지 구체적으로는 어떻게 코딩을 하면 좋겠는지 위 줄거리와 위 함수들을 어떻게 조화시키는 것이 최적이겠는지 등등이 궁금합니다. 시간이 허용되시는 한도내에서 자세히 알려 주시면 대단히 감사하겠습니다. 대단히 감사합니다. ********** ********** ********** ********** ********** ********** ********** PS. 죄송하지만 추가 질문 하나 더 드리고 싶습니다. 스팟 작업을 하면서, 시뮬레이션과 최적화 작업을 할 수 없다 보니, 항상 아래와 같은 부분에서 어려움을 느낍니다. 가령 타이머를 쓸 때에, 시간을 얼마로 할 것인지, 가령 위 내용 중에, 1분이나 2분 체결을 기다려 보고 체결이 안 되면 정정이나 취소를 한다든지, 또는 진입신호 가격으로 매수진입 주문이 체결된 후에는, 가령 매수진입가격의 5틱 위의 값으로 목표이익 청산주문을 넣든다든지 할 때에, 과연 1분 2분 또는 10분 등 어느 시간 만큼 기다려 보도록 하는 것이 가장 좋을지, 목표이익 값은 스팟에서 결정할 때에 몇 틱 위 값으로 하는 것이 최적이겠는지, 손절값은 몇 틱 아래로 하는 것이 좋겠는지를 객관적으로 알 수가 없으니 저로서는 일단 어느 정도 생각 후에 직관적으로 결정하는, 요컨대 대충 주관적으로 결정하는 수 밖에 없습니다. 이렇게 Timer에서의 시간을 정할 때에, 수익률을 극대화할 수 있는 시간을 정할 수 있는 좋은 지침(가능하다면 최대한 검증이 가능한...) 방법이 없을른지요? (마찬가지로, 스팟 상에서 익절 폭이나 손절 폭을 가장 합리적으로, 즉 수익률이 극대화될 수 있도록 정하는 좋은 방법은 없을지요?) 대단히 감사합니다!
프로필 이미지
즐겁게
2013-08-27
1088
글번호 222527
답변완료

Data Manager의 종목을 적용한 것이 새로 시작시 해제가 됩니다.

Data Manager에 종목을 생성한 후에 기존 차트의 data2로 적용해서 시물레이션 중인데요, 프로그램을 종료하고 다시 로그인 하면 data2 종목이 차트에서 빠진 채로 뜹니다. 적용되었던 시스템도 해제되어 있구요. 버그인 거 같습니다. (물론, YT 시작시 Data Manager 시작 옵션은 켜져있는 상태입니다. 실행도 잘 되구요)
프로필 이미지
호리
2013-08-25
980
글번호 222526
답변완료

스팟에서 주문을 낼 때 "예약" 주문도 가능한가요?

스팟에서 주문을 생성할 때 일반 주문이 아닌 주문창에 "예약" 주문에 주문이 들어가도록 할 수 있는지요?
프로필 이미지
곰탈
2013-08-22
952
글번호 222524
답변완료

안녕하세요.

오랜만이네요. 홈피도 바뀌고 단장을 하였네요^^ 다름이 아니라, 아직도 선물신호로 옵션 진입하려면 스팟을 이용해야 하네요. 일전에 부가기능 설정칸에 (선물신호 옵션바로 연결기능) 추가해 주신다고 한 것 같은데. 일년이상된 사항 같은데,늦어도 너무 늦는데요. 작업은 진행중이신지? 언제쯤 가능한지요? 스팟은 영 불편해서요.
프로필 이미지
털보
2013-08-22
992
글번호 222520
답변완료

수정부탁해요

수고많습니다. 에스스팟Q&A의 577번질문에 대한 예스스탁의 RE에 나와있는 것인데요. 저의 전략으로 신호를 발생시키니 작동은 하는데요. 첨부에 체결중 콜7.0의 매도가 발생하엿는데요. 매매하는 종목들을 공히 2.0이하로, 아울러 현재가+-5호가에 주문이 나갈 수 있게 해 주시면 감사하겠습니다. 추가) 중간에 간혹 신호가 없는데 주문이 나가는 경우가 있고요(테스트전략은 bids&asks를 사용(10분) 첫봉매도,2번째봉매수,3번째봉 매도후 15:00;00에 청산) 15:00:05에 접수오류([check_order_ok] 주문수량을 확인하세요란 메세지가 나오고요. 풋만 청산됩니다. 이건 아마 call240 7.0에 매도한 것을 청산하다 보니,시스템은 콜2개매도,풋1개매도가 잇는걸로 인지하는 루틴이 있나봅니다... bids & asks로 신호가 나올때 아래의 시스템이 2.0이하의 콜과 풋으로 잘 돌아가는지 테스트해 봐 주시면 고맙겠습니다요. 차트에 매수신호 발생하면 2.0 이하 중 가장 큰 풋옵션 매도하고 매도신호 발생하면 2.0 이하 중 가장 큰 콜옵션 매도합니다. 매수청산신호 발생시 신호상 수익이면 풋옵션 매도청산하고 손실이면 행사가의 반대 콜옵션을 매도합니다. 매도청산신호 발생시 신호상 수익이면 콜옵션 매도청산하고 손실이면 행사가의 반대 픗옵션을 매도합니다. 각 청산후 양매도상태이면 손실 100만원 발생하면 모두 청산합니다. 기본틀이므로 테스트 충분히 하신후에 수정보완해 사용하시기 바랍니다. 옵션객체 차트객체 : 객체명 chart1 --> 속송에서 차트아이디 차트와 동일하게 부여 계좌객체 : 객체명 Account1 --> 속성에서 계좌지정 var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; var CallOrderCodeR; var PutOrderCodeR; var BuyEntryPrice; var SellEntryPrice; var BuyStep; var SellStep; function Main_OnStart() { Start = 0; BuyStep = 0; SellStep = 0; Main.SetTimer(1, 10000); } function Chart1_OnRiseSignal(Signal) { UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 2.0) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } //buy신호 발생시 if (Signal.signalKind == 1) { Start = 1; PP = -1; PutOrderCode = -1; PutOrderCodeR = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; //2.0이하 중 가장 큰 풋옵션의 종목코드 PutOrderCodeR = Option.GetATMCallRecent(-iiii); //반대 콜옵션의 종목코드 } } if (PP > 0) { Account1.OrderSell(PutOrderCode, 1, 0, 1); BuyEntryPrice = Signal.price; //매수신호시 신호가격 BuyStep = 1; Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //exitlong신호 발생시 if ( Start == 1 && Signal.signalKind == 2) { Start = 0; if (PP > 0 && Signal.price > BuyEntryPrice) //차트신호 수익 { Account1.OrderBuy(PutOrderCode, 1, 0, 1); BuyStep = 0; Main.MessageLog("차트신호종류: 수익:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } if (PP > 0 && Signal.price < BuyEntryPrice)//차트신호 손실 { Account1.OrderSell(PutOrderCodeR, 1, 0, 1); BuyStep = 2; Main.MessageLog("차트신호종류 : 손실:"+Signal.signalKind+" /종목코드:"+PutOrderCodeR+" /START:"+Start); } } //sell신호 발생시 if (Signal.signalKind == 3) { Start = -1; CC = -1; CallOrderCode = -1; CallOrderCodeR = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; //2.0이하 중 가장큰 콜종목의 종목코드 CallOrderCodeR = Option.GetATMPutRecent(-iii) //반대 풋옵션의 종목코드 } } if (CC > 0) { Account1.OrderSell(CallOrderCode, 1, 0, 1); SellStep = 1; Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("차트신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } // Exitshort신호 발생시 if (Start == -1 && Signal.signalKind == 4) { Start = 0; if (CC > 0 && Signal.price < SellEntryPrice)//차트신호수익 { Account1.OrderBuy(CallOrderCode, 1, 0, 1); SellStep = 0; Main.MessageLog("차트신호종류: 수익 : "+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } if (CC > 0 && Signal.price > SellEntryPrice)//차트신호손실 { Account1.OrderSell(CallOrderCodeR, 1, 0, 1); SellStep = 2; Main.MessageLog("차트신호종류: 손"+Signal.signalKind+" /종목코드:"+CallOrderCodeR+" /START:"+Start); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (BuyStep == 2) { var TotalPL = 0; Account1.SetBalanceItem(PutOrderCode, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; Account1.SetBalanceItem(PutOrderCodeR, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; if (TotalPL <= -1000000) { Account1.SetBalanceItem(PutOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(PutOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); BuyStep = 0; } } if (SellStep == 2) { var TotalPL = 0; Account1.SetBalanceItem(CallOrderCode, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; Account1.SetBalanceItem(CallOrderCodeR, 1); TotalPL = TotalPL + (Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; if (TotalPL <= -1000000) { SellStep = 0; Account1.SetBalanceItem(CallOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(CallOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); } } //15시 분에 종목청산 if (nEventID == 1 && HHMMDD >= 150000) { Main.KillTimer(1); if (BuyStep == 2) { Account1.SetBalanceItem(PutOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(PutOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); BuyStep = 0; } if (SellStep == 2) { Account1.SetBalanceItem(CallOrderCode, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Account1.SetBalanceItem(CallOrderCodeR, 1); Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); SellStep = 0; } } }
프로필 이미지
먼지의추억
2013-08-21
1088
글번호 222519
답변완료

문의드립니다

스팟에서 참조하는 챠트객체의 현재 매수포지션,매도포지션을 알 수 있는 함수는 무엇인가요? 가령 챠트 A에서 진입시그널이 발생해였으나 그 시점에서, 참조하는 다른 챠트 B의 조건을 만족하지 못해 진입을 못한경우 추후에 챠트 B의 진입 조건이 충족되면 과거에 발생한 챠트 A의 진입시그널의 포지션이 살아 있다면, B의 진입 조건이 충족되는 순간 진입하고 싶습니다.
프로필 이미지
재령
2013-08-20
1053
글번호 222518