답변완료
Option객체가 비정상입니다. 확인 부탁드립니다.
option 객체에서
게시판에 있는 예제를 활용하여 테스트하는데
var UNum = Option1.uppersATM;
var LNum = Option1.lowersATM;
LNum, UNum 모두 값이 -1로 나옵니다.
Option 객체가의 이상합니다.
다시한번 점검 부탁드립니다.
function Main_OnStart()
{
var UNum = Option1.uppersATM;
var LNum = Option1.lowersATM;
Main.MessageList("UNum", UNum);
Main.MessageList("LNum", LNum);
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
//풋 옵션중 2.0에 가장 가까운 종목 매도
//풋 옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option1.GetCurrent(1, i)-2.0);
PutCode[i+UNum] = Option1.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum]
}
}
Main.MessageList("PutOrderCode", PutOrderCode);
var UNum = Option1.uppersATM;
var LNum = Option1.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
//콜 옵션중 2.0에 가장 가까운 종목
//콜 옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option1.GetCurrent(0, i)-2.0);
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum];
}
}
Main.MessageList("CallOrderCode", CallOrderCode);
}
2015-08-12
1891
글번호 223618
답변완료
Reference Error : MaxPutcode is not defined
더위에 수고 많으십니다. 항상 많은 도움 받고 있습니다.
2.5에 가까운 옵션값을 잡아서 선물차트신호를 => 옵션값으로 변환해서 매매하고 싶습니다.
일단 msg값만 확인되면 그 값으로 매수,매도 하면 될 것 같은데.. 여기서 막히네요.;;
제목과 같은 에러가 뜹니다...
옵션객체 , 계좌객체 , 차트객체는 모두 추가하였습니다.
//==================================================================
var ChartName = "A돌파";
var d = new Date();
var OpPrice = 2.50; //진입가격대, OpPrice에 가장 근접한 값 주문
var LowPrice = 0.40; //최소가격대 이상일때로 제한하는 변수
var HighPrice = 10.00; //최대가격대 이하일때로 제한하는 변수
var OrderGap = 0.30; //주문시 체결가격 설정(현재가 + OrderGap)
var ForPrice; // 옵션값후보
var Delta;
var MaxCall; // 콜을 여기에 저장
var MaxCallCode; // 콜의 코드를 여기에 저장
var MaxPut;
var MaxPutCode;
function Main_OnStart()
{
Delta = 100;
for(var i = -10; i <= 10; i++)
{
ForPrice = Option.GetCurrent(0,i); // GetCurrent 0 은 콜 , 1은 풋
if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice )
{
Delta = Math.abs(ForPrice - OpPrice);
MaxCallCode = Option.GetATMCallRecent(i);
MaxCall = Option.GetCurrentByCode(MaxCallCode);
}
}
Delta = 100;
for(var i = -10; i <= 10; i++)
{
ForPrice = Option.GetCurrent(1,i); // GetCurrent 0 은 콜 , 1은 풋
if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice )
{
Delta = Math.abs(ForPrice - OpPrice);
MaxPutCode = Option.GetATMPutRecent(i);
MaxPut = Option.GetCurrentByCode(MaxPutCode);
}
}
Main.MessageLog("<< 잔존일 "+Option.GetRemainDays(0,0)+"일 // 차트명 : "+ChartName+" >> ------------------------------- 구동시각 "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
Main.MessageLog("현재 Put 가격 : "+MaxPut+" // 종목코드 : "+MaxPutcode); // 출력
Main.MessageLog("현재 Call 가격 : "+MaxCall+" // 종목코드 : "+MaxCallcode);
}
2015-08-11
1859
글번호 223610
답변완료
미니선물옵션 주문 및 차월물 주문호가 오류
언제나 충실한 답변해 주셔서 감사합니다.
현재 선물신호를 이용한 옵션 매수 또는 매도 거래를 주로 하고 있습니다.
1. 미니옵션을 거래해 보려 했으나 주문가격대의 거래량이 적어서 그런지 빈호가가
많은듯해서 미니선물을 거래해 볼까 하는데요
+ 선물매수(매도)신호 ---> 미니선물 매수(매도), +-5호가 주문, 수량은 외부변수
샘플 스팟수식 부탁드립니다.
2. 당월물 선물신호를 이용한 스팟 당월옵션거래는 오류없이 잘 사용하고 있는데요
테스트차 차월물 옵션거래(+-5호가 주문)를 시험해보니 일 3~4회 거래되는 시스템인데
차월물 주문처리, 종목선정은 정상인데 주문가격이 1회 정도가 "1.-2147483648" 로
되는 오류가 발생합니다.(주문가격오류가 있을때 있고 없을때 있고 간헐적 발생)
게시물 검색해보니 지정한 호가의 가격이 없을때 발생하는 오류하고 답변해주시고
아래와 같은 참고식을 주셨는데요
이렇게 수정하는게 맞는건가요?
============================ 아래 ===========================
+당초+
Option.GetBidByCode(SellP_code, 5);
A1.OrderSell(SellP_code, Vol, SxP_price, 0);
+수정+
var SxP_price = Option.GetBidByCode(SellP_code, 5);
if (isNaN(Option.GetBidByCode(SellP_code, 5)) == true )
var SxP_price = Option.GetBidByCode(SellP_code, 4);
if (isNaN(Option.GetBidByCode(SellP_code, 4)) == true )
var SxP_price = Option.GetBidByCode(SellP_code, 3);
if (isNaN(Option.GetBidByCode(SellP_code, 3)) == true )
var SxP_price = Option.GetBidByCode(SellP_code, 2);
if (isNaN(Option.GetBidByCode(SellP_code, 2)) == true )
var SxP_price = Option.GetBidByCode(SellP_code, 1);
if (isNaN(Option.GetBidByCode(SellP_code, 1)) == true )
var SxP_price = Option.GetCurrentByCode(SellP_code);
A1.OrderSell(SellP_code, Vol, SxP_price, 0);
먼저 매수5호가를 저장하고
매수5호가가 가격이 없어 NaN이면 --> 매수4호가 저장하고 -->
매수4호가가 가격이 없어 NaN이면 --> 매수3호가 저장하고 -->
매수3호가가 가격이 없어 NaN이면 --> 매수2호가 저장하고 -->
매수2호가가 가격이 없어 NaN이면 --> 매수1호가 저장하고 -->
매수1호가가 가격이 없어 NaN이면 -->현재가 저장 --> 저장된 값으로 주문
=======================================================================
무더운 날씨 즐겁게 보내시기 바랍니다.~
2015-08-09
2006
글번호 223606
답변완료
문의 드립니다.
수고하십니다.
프로그램 검토 요청드립니다.
선물 신호 발생시 옵션 매도하는 프로그램인데요.(옵션매수하는 부분을 수정해보았습니다.)
수량은 2개로 고정해놓았습니다.
1. 미진입 또는 미청산시 2초뒤에 재 실행하고 싶습니다.
2. 테스트를 해보니 4.0대의 종목으로 진입이 되는되 왜그런지 궁금합니다.
3. 기타 프로그램 검토 부탁드리겠습니다.
그럼 더운 날씨에 수고하십시요!
=============================================================================================
//signalKind(1 : Buy, 2 : ExitLong, 3 : Sell, 4 : ExitShort)
var CallOrderCode,PutOrderCode,T;
function Main_OnStart()
{
T = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if (T <= 0 && Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("Buy신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
//풋 옵션중 2.0에 가장 가까운 종목 매도
//풋 옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
for (var i = -LNum; i <= UNum; i++)
{
PutPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0);
PutCode[i+LNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
PutOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (PutPrice[i+LNum] < CC)
{
CC = PutPrice[i+LNum];
PutOrderCode = PutCode[i+LNum]
}
}
//종목을 찾았으면
if (CC < 99999999)
{
//주문가능현금의 5%
//var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.05;
//주문가격
var OrderPrice = Option.GetAsk(PutOrderCode, 3);
//주문가능현금/(주문가격*50만원)
//var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 PutOrderCode종목 매도 주문
//if (Qty >= 1)
//{
Account1.OrderSell(PutOrderCode, 2, OrderPrice, 0);
T = 1;
Main.SetTimer(1, 2000);//1번타이머 2초
//}
}
}
//if (T == 1 && Signal.signalKind == 2)
if (Signal.signalKind == 2)
{
Account1.SetBalanceItem(PutOrderCode, 0);
//CallOrderCode 잔고가 있으면 매수3호가로 전량 매도
if (Account1.Balance.count > 0)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("풋 매도 청산");
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count , Option.GetBid(PutOrderCode, 3), 0);
T = 0;
}
}
if (T >= 0 && Signal.signalKind == 3)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("Sell신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
//콜 옵션중 2.0에 가장 가까운 종목
//콜 옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
for (var i = -UNum; i <= LNum; i++)
{
CallPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.0);
CallCode[i+UNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
CallOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (CallPrice[i+UNum] < PP)
{
PP = CallPrice[i+UNum];
CallOrderCode = CallCode[i+UNum];
}
}
//종목을 찾았으면
if (PP < 99999999)
{
//주문가능현금의 5%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.05;
//주문가격
var OrderPrice = Option.GetAsk(CallOrderCode, 3);
//주문가능현금/(주문가격*50만원)
//var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 매수주문
//if (Qty >= 1)
//{
Account1.OrderSell(CallOrderCode, 2, OrderPrice, 0);
T = -1;
Main.SetTimer(2, 2000);//2번타이머 2초
//}
}
}
// if (T == -1 && Signal.signalKind == 4)
if (Signal.signalKind == 4)
{
Account1.SetBalanceItem(CallOrderCode, 0);
//CallOrderCode 잔고가 있으면 매수3호가로 전량 매도
if (Account1.Balance.count > 0)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count , Option.GetBid(CallOrderCode, 3), 0);
Main.MessageList("--------------------------------------------");
Main.MessageList("콜 매도 청산");
T = 0;
}
}
}
2015-08-05
2042
글번호 223602
답변완료
문의드립니다.
수고하십니다.
프로그램 검토좀 부탁드리겠습니다.
아래 프로그램 내용중 추가매수하는 부분인데요...
//잔고의 현재가가 평단가의 40% 이상이면 추가매수
if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.40)
Main.MessageList("추가 매수_01 ");
if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.80)
Main.MessageList("추가 매수_02 ");
로 했는데 테스트를 해보니 궁금한점이 있습니다.
1. 추가매수_01 과 추가매수_02 가 동시에 진입이 됩니다.
이또한 잔고에서 반영이 안되어 그런것인지요?
2. 평단가에 40% 이상이면 추가 매수_01 로 설정해 놓았는데 설절이 잘못된것같습니다.
40% 이전에 추가매수_01 이 실행되네요..
3. 첫 매수후 Main.SetTimer(1, 2000);//1번타이머 2초 를 돌리는데요
이부분이 매수가 안되면 2초마다 다시 매수주문을 내는것인지요?
추가 매수 & 추가 매도 & 청산 부분도 결제가 안되는 상황을 대비해 Main.SetTimer(1, 2000) 를 돌려줘야 하는지요?
그럼 좋은 답변 부탁드리겠습니다.
=================================================================================================================
//signalKind(1 : Buy, 2 : ExitLong, 3 : Sell, 4 : ExitShort)
var CallOrderCode,PutOrderCode,T;
function Main_OnStart()
{
T = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if (T <= 0 && Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("Buy신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
//콜옵션중 2.0에 가장 가까운 종목
//콜옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//종목을 찾았으면
if (CC < 99999999)
{
//주문가능현금의 10%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1;
//주문가격
var OrderPrice = Option.GetAsk(CallOrderCode, 3);
//주문가능현금/(주문가격*50만원)
var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 CallOrderCode종목 매수주문
if (Qty >= 1)
{
Main.MessageList("첫 매수");
Account1.OrderBuy(CallOrderCode, Qty, OrderPrice, 0);
T = 1;
Main.SetTimer(1, 2000);//1번타이머 2초
}
}
}
//if (T == 1 && Signal.signalKind == 2)
if (Signal.signalKind == 2)
{
Account1.SetBalanceItem(CallOrderCode, 0);
Main.MessageList("--------------------------------------------");
Main.MessageList("매수 청산");
//CallOrderCode 잔고가 있으면 매수3호가로 전량 매도
if (Account1.Balance.count > 0)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수 청산");
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count , Option.GetBid(CallOrderCode, 3), 0);
T = 0;
}
}
if (T >= 0 && Signal.signalKind == 3)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("Sell신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
//풋옵션중 2.0에 가장 가까운 종목
//풋옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.0);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//종목을 찾았으면
if (PP < 99999999)
{
//주문가능현금의 10%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1;
//주문가격
var OrderPrice = Option.GetAsk(PutOrderCode, 3);
//주문가능현금/(주문가격*50만원)
var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 매수주문
if (Qty >= 1)
{
Main.MessageList("첫 매도");
Account1.OrderBuy(PutOrderCode, Qty, OrderPrice, 0);
T = -1;
Main.SetTimer(2, 2000);//2번타이머 2초
}
}
}
// if (T == -1 && Signal.signalKind == 4)
if (Signal.signalKind == 4)
{
Account1.SetBalanceItem(PutOrderCode, 0);
Main.MessageList("--------------------------------------------");
Main.MessageList("매도 청산");
//PutOrderCode 잔고가 있으면 매수3호가로 전량 매도
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count , Option.GetBid(PutOrderCode, 3), 0);
Main.MessageList("--------------------------------------------");
Main.MessageList("매도 청산");
T = 0;
}
}
}
function Main_OnTimer(nEventID)
{
//1번 타이머 동작 T가 1일이면(Buy신호 이후)
if (nEventID == 1 && T == 1)
{
//CallOrderCode 종목 잔고 셋팅해서
Account1.SetBalanceItem(CallOrderCode, 0);
//잔고의 현재가가 평단가의 40% 이상이면 추가매수
if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.40)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("추가 매수_01 ");
//1번 타이머종료
Main.KillTimer(1);
//주문가능현금의 10%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1;
//주문가격
var OrderPrice = Option.GetAsk(CallOrderCode, 3);
//주문가능현금/(주문가격*50만원)
var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 CallOrderCode종목 매수주문
if (Qty >= 1)
{
Account1.OrderBuy(CallOrderCode, Qty, OrderPrice, 0);
}
}
//잔고의 현재가가 평단가의 80% 이상이면 추가매수
if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.80)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("추가 매수_02 ");
//1번 타이머종료
Main.KillTimer(1);
//주문가능현금의 10%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1;
//주문가격
var OrderPrice = Option.GetAsk(CallOrderCode, 3);
//주문가능현금/(주문가격*50만원)
var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 CallOrderCode종목 매수주문
if (Qty >= 1)
{
Account1.OrderBuy(CallOrderCode, Qty, OrderPrice, 0);
}
}
}
//2번 타이머 동작하고 T가 -1이면(Sell신호 이후)
if (nEventID == 2 && T == -1)
{
//PutOrderCode 종목 잔고 셋팅해서
Account1.SetBalanceItem(PutOrderCode, 0);
//잔고의 현재가가 평단가의 40% 이상이면 추가매수
if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.40)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("추가 매도_01 ");
//2번 타이머종료
Main.KillTimer(2);
//주문가능현금의 10%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1;
//주문가격
var OrderPrice = Option.GetAsk(PutOrderCode, 3);
//주문가능현금/(주문가격*50만원)
var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 매수주문
if (Qty >= 1)
{
Account1.OrderBuy(PutOrderCode, Qty, OrderPrice, 0);
}
}
//잔고의 현재가가 평단가의 80% 이상이면 추가매수
if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.80)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("추가 매도_02 ");
//2번 타이머종료
Main.KillTimer(2);
//주문가능현금의 10%
var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1;
//주문가격
var OrderPrice = Option.GetAsk(PutOrderCode, 3);
//주문가능현금/(주문가격*50만원)
var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000));
//1계약 이상 매수주문
if (Qty >= 1)
{
Account1.OrderBuy(PutOrderCode, Qty, OrderPrice, 0);
}
}
}
}
2015-08-04
1889
글번호 223599
답변완료
문의드립니다.
===========================================================
추가: 2015.8.4.
7.30. 질문올리고 나서....
답변주시길 마냥 기다리는 것보다 좀 더 공부해보자는 생각에.......^^
그동안 올라온 글들을 참고로 주말에 다음과 같이 작성하여 어제오늘 이틀간...모의거래를 하여보았습니다.
어제는 신호가 없어서, 점검이 안되었구요...
오늘은 스팟걸기전 매도포지션이 있어서, 아침에 매수(매도포지션청산)1번, 신규 매수포지션1번이 발생하였습니다....
그런데, 첨부한 그림과 같은 메세지가 뜨네요...
스팟적용 수식내용과 질문내용은 아래와 같습니다^^.
var ChartName = "Chart1";
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*d.getDate();
var Pst,EntryVol,EtryCode,EntryID,EntryNum;
function Main_OnStart()
{
Main.MessageLog("<<<<<< "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+ChartName+"지수선물신호 미니 전환스팟 >>>>>>");
Pst = 0;
var GetDate = Main.GetUserValue("S1_EntryDate");
var GetPst = Main.GetUserValue("S1_Pst");
var GetEntryCode = Main.GetUserValue("S1_EntryCode");
var GetEntryVol = Main.GetUserValue("S1_EntryVol");
var GetEntryNum = Main.GetUserValue("S1_EntryNum");
//직전종료시 매수나 매도포지션이었으면 // 포지션전략이라 당일날자 체크하는 부분을 제외함
if(Pst == 1 || Pst == -1)
{
Pst = GetPst;
EntryCode = GetEntryCode;
EntryVol = GetEntryVol;
EntryNum = GetEntryNum;
}
}
function Main_Onclose()
{
Main.SetUserValue("S1_EntryDate",EntryDate);
Main.SetUserValue("S1_Pst",Pst);
Main.SetUserValue("S1_EntryVol",EntryVol);
Main.SetUserValue("S1_EntryCode",EntryCode);
Main.SetUserValue("S1_EntryNum",EntryNum);
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Main.MessageList("Buy_Signal");
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Ask(5), 0);
Pst = 1;
EntryDate = YYYYMMDD;
EntryCode = Main.GetOrderCode(MarketData1.code);
EntryVol = Signal.count;
EntryID = Account1.OrderBuy(EntryCode,EntryVol,MarketData1.GetAsk(EntryCode,5),0); // 이부분이 맞게 작성되었는지요?
}
if (Signal.signalKind == 2)
{
Main.MessageList("Exitlong_Signal");
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Bid(5), 0); // Ask 대신 Bid로 쓴 특별한 이유가 있는지요?
Pst = 0;
EntryCode = "";
EntryVol = 0;
EntryNum = 0;
}
if (Signal.signalKind == 3)
{
Main.MessageList("Sell_Signal");
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Bid(5), 0);
Pst = -1;
EntryDate = YYYYMMDD;
EntryCode = Main.GetOrderCode(MarketData1.code);
EntryVol = Signal.count;
EntryID = Account1.OrderSell(EntryCode,EntryVol,MarketData1.GetBid(EntryCode,5),0); // 이부분이 맞게 작성되었는지요?
}
if (Signal.signalKind == 4)
{
Main.MessageList("ExitShort_Signal");
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count, MarketData1.Ask(5), 0); // Bid 대신 Ask로 쓴 특별한 이유가 있는지요?
Pst = 0;
EntryCode = "";
EntryVol = 0;
EntryNum = 0;
}
}
function Main_OnOrderResponse(OrderResponse) // 이수식 전체적으로 볼때 꼭 필요한지요?
{
if (EntryID == OrderResponse.orderNum)
{
EntryNum = OrderResponse.orderNum;
}
}
지수선물신호를 받아, 미니선물을 거래하는 스팟식을 작성하고자 합니다.
포지션전략식이라.....값들을 저장하여 다음날 읽어오도록 하고 있습니다.(그래야될것 같기도해서요)
지금은 스팟운영되는 조건이
1.선물계좌(하이투자) 개설전이라....계좌에 일단 위탁계좌(하이투자)를 지정하고,
2.모의거래 중이며,
3.포지션전략이라...당일청산이 아닙니다.
그런데...첨부한 그림과 같이 에러가 나는데....
질문의 요지는 아래와 같습니다...
1. 정상적인건가요? (선물옵션계좌가 아니라 위탁계좌로 모의거래중이기 때문에 메세지 나 주문상태가 그림과 같이 나타나는지요?)
2. 전반적인 수식 점검도 좀 부탁드립니다....^^ (제가 이것저것 합쳐서 짜집기한거라서요)
- 주문낼때..어떤건 Ask를 쓰고, 어떤건 Bid를 쓰는데, 특별히 다르게 쓰는 이유가 있나요?
- 주문을 저장해서..다음날 스팟시작할때 유지되고 있는 전포지션을 읽어올 필요가 꼭 있나요? (이 기능이 필요할 것 같아서 짜집기하여 첨가하였지만요....)
이런것(UserValue) 필요없이, 그냥 신호오는데로 처리만 하면 되는건 아닌지 모르겠습니다. 포지션전략이라도 그냥 신경 안쓰고 YT에서 매매신호만 받아와서 스팟에서 처리하면 되는 건 아닌지요......손매매로 지수선물 YT신호와 맞춰놓고 시작하면 문제가 없을수도 있을 것 같기도 하구요....^^
- EntryID를 읽어올때...모의라서 거래가 완성되질 않아 GetAsk...등에 에러가 나는지요?
- 주문상태에 "계좌번호 및 종목코드값이 서로 불일치"라는 메세지가 위탁계좌연결한 모의거래여서 그런건지요?
3. 기존에 보유한 매수포지션이 있을 경우, 그 이후 스팟이 실행되어 Signal.signalKind == 2 가 발생되면, 기존매수포지션을 청산하는지, 아니면 새로운 매도포지션을 가지게 되는지요?
(스팟은 매도주문을 내나, 실계좌에는 매수포지션이 있어서 그게 청산정리되어서 문제가 되질 않을까요?)
4. 미니선물만기일에 미청산된 보유포지션이 있어서 롤오버를 할 경우, YT식에서 만기일날 청산하고 다음날 새로운 월물 시초가에 주문하는 방법으로 해결해야만 하나요? (YT검색해 보니 그런내용과 관련 수식이 있던데요...원신호가 발생되는 YT수식에 그 내용을 적용만 하면 스팟식에서는 신경 안써도 되는지요?)
5. 미니선물을 거래할때, 스크립트객체에서 종목객체에 미니연결선물로 설정하면, 만기일 이후 재설정 등에 신경안써도 되는지요?
6. 선물신호 1계약당 미니선물 2계약으로 거래할 수 있게 수식도 좀 부탁드립니다.
바쁘신데...질문이 많네요...ㅠㅠ(죄송)
감사합니다...^^
좋은 하루 되세요.
=================================================================================
아래부터는 윗부분 글 첨부 전에 작성한 글입니다...
=================================================================================
2015.7.30.
수고 많으십니다.^^
다름이 아니오라,
하이투자증권 YT로, 연결지수선물 차트에서 매수매도진입 및 청산신호를 발생시켜서....
이 신호를 이용하여 새로이 상장한 미니선물을 그대로 거래하고 싶은데요....
수식을 작성할려니....에러나고... YT언어랑 달라서..참 어렵네요...ㅠㅠ
이번달 교대지점에서 한 강의도 열심히 듣긴들었는데...처음부터 제가 작성해 볼려니..
너무 어렵네요....ㅠㅠ
혹시 스팟 수식 (연결선물지수 신호발생시, 미니선물로 거래) 있으시면....부탁드려요...^^
1.신호발생 : 연결선물지수
2.실거래 : 미니선물
주의사항도 있으시면 간단히 알려주시면....감사하겠습니다...^^
좋은 하루 되셔요...^^
================================================================================
2015-08-04
1990
글번호 223598