커뮤니티

종목관계 없이 몇일 후 잔고 청산

프로필 이미지
팡팡
2018-11-12 21:45:02
2686
글번호 224647
답변완료
1.앞에 주신 1797번 답변은 매수는 되나 청산이 안되어 2.종목 선택하여 저장했다 청산 되는 수식이나 또는 청산 신호시 종목 관계없이 잔고 있으면 5계약식 5초 간격으로 청산되는 수식 원합니다. var CallOrderCode, PutOrderCode; var Direction,Code,BEcnt,BXcnt,SEcnt,SXcnt; var MaxEntryVol = 5; var MaxExitVol; function Main_OnStart() {       Main.MessageList("시작"); } function C1_OnRiseSignal(Signal) {       if (Signal.signalKind == 1 )       {             Main.MessageList("매수진입신호발생");             //내부파일에서 DD와 CC라는 이름으로 저장된 값을 가져와 Direction,Code변수에 저장             Direction = Main.GetUserValue("DD");             Code = Main.GetUserValue("CC");             //Direction이 1이나 -1이 아닐때 수행             if (Direction != 1 || Direction != -1)             {                   Direction = 1;                   Code = Option.GetATMCallRecent(0);                          //방향과 종목코드를 내부파일에 DD,CC라는 이름으로 저장                   Main.SetUserValue("DD", Direction);                   Main.SetUserValue("CC", Code);                                      //매수주문                   var UNum = Option.uppersATM; var LNum = Option.lowersATM; //콜옵션중 1.0에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장 var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-1.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var AA = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < AA) { AA = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(Code,2), 0);                   BEcnt = 1;                   //1번 타이머 5초 셋팅                   Main.SetTimer(1,5000);             }       }       if (Signal.signalKind == 2 )       {             Main.MessageList("매수청산신호발생");                          //내부파일에서 DD와 CC라는 이름으로 저장된 값을 가져와 Direction,Code변수에 저장             Direction = Main.GetUserValue("DD");             Code = Main.GetUserValue("CC");             //Direction이 1이면             if (Direction == 1)             {                   //Direction을 0으로 초기화                   Direction = 0;                                      //내부파일에 DD와 CC에 저장값도 초기화                   Main.SetUserValue("DD", 0);                   Main.SetUserValue("CC", " ");                   //잔고를 세팅                   A1.SetBalance(Code, 0);                                           //잔고수량이 있으면                   if (A1.Balance.count > 0)                   {                         //보유수량 저장                         MaxExitVol = A1.Balance.count;                         //1계약 매도주문                         A1.OrderSell(Code,1,Option.GetBidByCode(Code, 2), 0);                         BXcnt = 1;                         //보유수량이 2계약 이상이면                         if (MaxExitVol >= 2)                         {                                     //2번 타이머 5초 셋팅                               Main.SetTimer(2,5000);                         }                   }             }       }  중략
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-11-15 17:02:32

안녕하세요 예스스탁입니다. 1 Main.GetUserValue Main.SetUserValue 위 함수는 내부파일에 이름을 지정해 원하는 값을 저장하고 값을 호출하는 함수입니다. 내부파일은 프로그램 설치폴더안에 Spot폴더안에 UserValue.yuv 파일입니다. 스팟수식마다 내부파일이 만들어지는 것은 아니며 하나의 파일에 값이 적혀지게 되므로 전략간의 저장하는 이름이 달라야 합니다. 동일이름이 사용하면 원치않는 종목으로 주문이 집행되게 됩니다. 수식 작성에 유의하시기 바랍니다. 2 이전에 스팟에서 진입한 종목을 저장하려면 위 내파일에 저장하는 방법을 사용하셔야 합니다. 진입조건이 만족하면 내부파일에 이름을 지정해 종목코드를 적고 청산시에 해당 이름에서 저장된 종목코드를 가져와 해당 종목의 잔고가 있으면 청산하고 내부파일에 해당이름으로 저장된 값을 지우는 것입니다. 3 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var CallOrderCode, PutOrderCode; var Direction,Code,BEcnt,BXcnt,SEcnt,SXcnt; var MaxEntryVol = 5; var MaxExitVol; function Main_OnStart() { Main.MessageList("시작"); } function C1_OnRiseSignal(Signal) { //매수신호가 발생하면 if (Signal.signalKind == 1 ) { Main.MessageList("매수진입신호발생"); //내부파일에 Code라는 이름으로 저정된 값을 가져와 EntryCode변수에 저장 EntryCode = Main.GetUserValue("Code"); //EntryCode변수에 값이 없으면 if (EntryCode == "") { //콜옵션중 1.0에 가장 가까운 종목을 찾음 //콜옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장 var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CallCode = []; var CallPrice = []; for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-1.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var AA = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < AA) { AA = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //매수주문 A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode,2), 0); //내부파일에 Code라는 이름으로 CallOrderCode 저장 Main.SetUserValue("Code",CallOrderCode); BEcnt = 1; //1번 타이머 5초 셋팅 Main.SetTimer(1,5000); } } //매수청산신호가 발생하면 if (Signal.signalKind == 2 ) { Main.MessageList("매수청산신호발생"); //내부파일에 Code라는 이름으로 저정된 값을 가져와 EntryCode변수에 저장 EntryCode = Main.GetUserValue("CC"); //EntryCode에 값이 있으면 //이전에 매수해서 값이 저장되어 있는 상태이므로 //매도 수행 if (EntryCode != "") { //잔고를 세팅 A1.SetBalance(EntryCode, 0); //잔고수량이 있으면 if (A1.Balance.count > 0) { //보유수량 저장 MaxExitVol = A1.Balance.count; //1계약 매도주문 A1.OrderSell(Code,1,Option.GetBidByCode(Code, 2), 0); BXcnt = 1; //보유수량이 2계약 이상이면 if (MaxExitVol >= 2) { //2번 타이머 5초 셋팅 Main.SetTimer(2,5000); } } //청산이 동작했으므로 내부파일에 Code라는 이름으로 저장된 값은 지움 Main.SetUserValue("Code",""); } } } 즐거운 하루되세요 > 팡팡 님이 쓴 글입니다. > 제목 : 종목관계 없이 몇일 후 잔고 청산 > 1.앞에 주신 1797번 답변은 매수는 되나 청산이 안되어 2.종목 선택하여 저장했다 청산 되는 수식이나 또는 청산 신호시 종목 관계없이 잔고 있으면 5계약식 5초 간격으로 청산되는 수식 원합니다. var CallOrderCode, PutOrderCode; var Direction,Code,BEcnt,BXcnt,SEcnt,SXcnt; var MaxEntryVol = 5; var MaxExitVol; function Main_OnStart() {       Main.MessageList("시작"); } function C1_OnRiseSignal(Signal) {       if (Signal.signalKind == 1 )       {             Main.MessageList("매수진입신호발생");             //내부파일에서 DD와 CC라는 이름으로 저장된 값을 가져와 Direction,Code변수에 저장             Direction = Main.GetUserValue("DD");             Code = Main.GetUserValue("CC");             //Direction이 1이나 -1이 아닐때 수행             if (Direction != 1 || Direction != -1)             {                   Direction = 1;                   Code = Option.GetATMCallRecent(0);                          //방향과 종목코드를 내부파일에 DD,CC라는 이름으로 저장                   Main.SetUserValue("DD", Direction);                   Main.SetUserValue("CC", Code);                                      //매수주문                   var UNum = Option.uppersATM; var LNum = Option.lowersATM; //콜옵션중 1.0에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장 var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-1.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var AA = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < AA) { AA = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(Code,2), 0);                   BEcnt = 1;                   //1번 타이머 5초 셋팅                   Main.SetTimer(1,5000);             }       }       if (Signal.signalKind == 2 )       {             Main.MessageList("매수청산신호발생");                          //내부파일에서 DD와 CC라는 이름으로 저장된 값을 가져와 Direction,Code변수에 저장             Direction = Main.GetUserValue("DD");             Code = Main.GetUserValue("CC");             //Direction이 1이면             if (Direction == 1)             {                   //Direction을 0으로 초기화                   Direction = 0;                                      //내부파일에 DD와 CC에 저장값도 초기화                   Main.SetUserValue("DD", 0);                   Main.SetUserValue("CC", " ");                   //잔고를 세팅                   A1.SetBalance(Code, 0);                                           //잔고수량이 있으면                   if (A1.Balance.count > 0)                   {                         //보유수량 저장                         MaxExitVol = A1.Balance.count;                         //1계약 매도주문                         A1.OrderSell(Code,1,Option.GetBidByCode(Code, 2), 0);                         BXcnt = 1;                         //보유수량이 2계약 이상이면                         if (MaxExitVol >= 2)                         {                                     //2번 타이머 5초 셋팅                               Main.SetTimer(2,5000);                         }                   }             }       }  중략