커뮤니티
예스스팟 Q&A
답변완료
선물 기준 옵션 매매 수식 수정부탁드립니다.
예스스탁님이 올려주신 선물 신호 기준 옵션가격 3보다 작은 가격중 3에 가장 가까운 가격의 옵션종목을 매매하는 수식입니다.
여기서 실제 주문을 넣어보니 옵션이 아니라 선물 매매가 이루어 지는 듯합니다.
옵션 주문 코드를 따로 변수로 받아야 하는것인지. 어떤것이 잘못된것이지 설명과 함께 수정 부탁드립니다.
var CPrice = new Array(101);
var CCode = new Array(101);
var PPrice = new Array(101);
var PCode = new Array(101);
var MaxCall;
var MaxCallCode;
var MaxPut;
var MaxPutCode;
function c1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
//ATM-50~+50까지 종목중 0~3사이 종목을 제외하고 모두 -1처리
for(var i = -50; i <= 50; i++)
{
if (Option.GetCurrent(0,i) < 3 && Option.GetCurrent(0,i) > 0)
{
CPrice[50+i] = Option.GetCurrent(0,i);
CCode[50+i] = Option.GetATMCallRecent(i);
}
else
{
CPrice[50+i] = -1;
CCode[50+i] = -1;
}
if (Option.GetCurrent(1,i) < 3 && Option.GetCurrent(1,i) > 0)
{
PPrice[50+i] = Option.GetCurrent(1,i);
PCode[50+i] = Option.GetATMPutRecent(i);
}
else
{
PPrice[50+i] = -1;
PCode[50+i] = -1;
}
}
//저장된 CPrice, PPrice값중 최고값 계산
MaxCall = -1;
MaxCallcode = -1;
MaxPut = -1;
MaxPutcode = -1;
for(var A = 0; A <= 100; A++)
{
if (CPrice[A] > MaxCall)
{
MaxCall = CPrice[A];
MaxCallcode = CCode[A];
}
if (PPrice[A] > MaxPut)
{
MaxPut = PPrice[A];
MaxPutcode = PCode[A];
}
}
Main.MessageLog("가격:"+MaxCall+"종목코드:"+MaxCallcode);
Main.MessageLog("가격:"+MaxPut+"종목코드:"+MaxPutcode);
//--올려주신 수식에서 종목코드 MaxCallcode 만 넣었습니다... 여기서 잘못된거 같은데..
Main.OrderBuy(a1.number, Option.GetATMCallRecent(MaxCallcode), 1, 0, 1)
2013-01-02
2318
글번호 221896
답변완료
증거금 부족이 나옵니다.
예스스탁님이 올려주신 선물 신호 기준 옵션가격 3보다 작은 가격중 3에 가장 가까운 가격의 옵션종목을 매매하는 수식입니다.
여기서 실제 주문을 넣어보니 옵션이 아니라 선물 매매가 이루어 지는 듯합니다.
옵션 주문 코드를 따로 변수로 받아야 하는것인지. 어떤것이 잘못된것이지 설명과 함께 수정 부탁드립니다.
.
실험 적용은 되는데 자동 매매시 증거금 부족으로 매매가 되지 않습니다.
현재 계좌에 미청산 계약이 있는관계로 매매는 되는 상황이지만 .실제 증거금은 약 300만원 정도만 계좌에 들어있습니다.
선물 챠트 기준으로 옵션을 거래하는 수식인데 거래 종목에는 선물로 잡히는거 같습니다.
옵션 수동 매매로는 주문이 되는 상황으로.. 증거금 문제는 아닌거 같은데.. 참고로
하이투자 사용하고 있습니다.
설명 부탁드립니다.
var CPrice = new Array(101);
var CCode = new Array(101);
var PPrice = new Array(101);
var PCode = new Array(101);
var MaxCall;
var MaxCallCode;
var MaxPut;
var MaxPutCode;
function Main_OnStart()
{
Main.MessageLog("시작");
}
//ATM-50~+50까지 종목중 0~3사이 종목을 제외하고 모두 -1처리
for(var i = -50; i <= 50; i++)
{
if (Option.GetCurrent(0,i) < 3 && Option.GetCurrent(0,i) > 0)
{
CPrice[50+i] = Option.GetCurrent(0,i);
CCode[50+i] = Option.GetATMCallRecent(i);
}
else
{
CPrice[50+i] = -1;
CCode[50+i] = -1;
}
if (Option.GetCurrent(1,i) < 3 && Option.GetCurrent(1,i) > 0)
{
PPrice[50+i] = Option.GetCurrent(1,i);
PCode[50+i] = Option.GetATMPutRecent(i);
}
else
{
PPrice[50+i] = -1;
PCode[50+i] = -1;
}
}
//저장된 CPrice, PPrice값중 최고값 계산
MaxCall = -1;
MaxCallcode = -1;
MaxPut = -1;
MaxPutcode = -1;
for(var A = 0; A <= 100; A++)
{
if (CPrice[A] > MaxCall)
{
MaxCall = CPrice[A];
MaxCallcode = CCode[A];
}
if (PPrice[A] > MaxPut)
{
MaxPut = PPrice[A];
MaxPutcode = PCode[A];
}
}
Main.MessageLog("콜가격:"+MaxCall+"종목코드:"+MaxCallcode);
Main.MessageLog("풋가격:"+MaxPut+"종목코드:"+MaxPutcode);
//-----아래 주문 부분만 수정해서 붙인겁니다. 옵션 코드를 MaxCallcode 로 넣었는데
// 이 부분이 적용이 안되고 선물로 주문이 들어가는것은 아닌지 생각됩니다...
//증거금 부족액이 약 1400만원 정도로 잡히는데 제 계좌에 약 370만 있으니 증거금이 부
//족하다면 약 1200 만원 정도로 잡혀야 하는데..
// 수식이 잘못된거 같습니다.
function c1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
a1.OrderBuy(Option.GetATMCallRecent(MaxCallcode), 1, 0, 1)
}
if (Signal.signalKind == 2)
{
a1.OrderSell(Option.GetATMCallRecent(MaxCallcode), 1, 0, 1)
}
}
2013-01-02
2322
글번호 221895
예시스 님에 의해서 삭제되었습니다.
2013-01-02
9
글번호 221893
답변완료
예스트레이더 3.1에서 4.0으로 ...
예스트레이더 3.1에서 4.0으로 변경되었다고하여
3.1에서 사용중이던 수식들을 4.0으로 옮기려하는데..
그냥 폴더만 복사해서 넣으면 되는건지요?
어떤 어떤 폴더를 복사해야하는건지..자세한 설명 부탁드립니다.
수고하세요!
2013-01-01
2408
글번호 221892
답변완료
예스스팟에 관하여
4.0버젼을 사용하고 있는데 예스스팟이라는 것이 있는데 이것은 무엇이며 어떻게 이용하는지 전혀 모르겠습니다. 궁금한 사항은 어디서 어떻게 알아 볼 수 있나요?
2013-01-01
2425
글번호 221891
답변완료
질문 있습니다.
선물 분봉이하 즉 틱,초봉 데이터가 현재 2012년 1월부터 밖에 없습니다.
그 이전 데이터는 언제쯤 업데이트가 가능한지 궁금해서 문의드립니다.
1년 남짓 데이터로는 시뮬레이션이 한계가 있어서 그렇습니다.
항상 감사드립니다.
2012-12-28
2489
글번호 221888
답변완료
관심종목 관리 오류
다수의 파워종목검색 결과를 내보내기 한 다음 종목관리에서 확인해 보면,
동일 종목이 중복되어 있습니다.(불러오기를 하면 중복은 제거됨)
확인후 빠른 수정 부탁 드립니다.
감사합니다.
2012-12-27
2540
글번호 221887
답변완료
총거래대금 단위 오류 수정 요청
안녕하세요?
신버전 파워종목검색에서 "총거래대금"의 단위 (억)을 (천)으로 수정되어야할 것 같습니다. 확인부탁드립니다.
감사합니다.
2012-12-24
2530
글번호 221880
답변완료
정정,취소 주문
안녕하세요..
다음 수식 수정 부탁드립니다.
var Start;
var BuyID;
var BuyOrderNum;
function Main_OnStart()
{
Start = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Start = 1;
BuyID = Account1.OrderBuy(MarketData1.code,Vol,MarketData1.Bid(2),0);
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID)
{
BuyOrderNum = OrderResponse.orderNum;
Main.SetTimer(1, 10000);
Main.SetTimer(2, 25000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(BuyOrderNum, MarketData1.Bid(1));
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(BuyOrderNum, MarketData1.Ask(1));
}
}
}
< 제가 원하는 수식 내용 >
- 연결선물 분봉 차트 신호를 기준으로하고, 연결선물을 종목객체로 선택
- 매수신호 발생시 매수2호가 주문
- 신호 발생으로부터 10초후 미체결시 매수1호가로 1차정정
- 1차정정으로부터 15초후 1차정정 미체결시 매도1호가로 2차정정 (원주문에서 25초 경과)
- 2차정정으로부터 5초후 미체결시 해당 주문 취소 (원주문에서 30초 경과)
< 궁금한 점 >
1) 위의 내용상 2차정정을 위하여 1차정정에 대한 'orderID'와 'orderNum'가 별도로
설정되어야 할 것 같은데 어떻게 연결시켜야 할지 모르겠습니다.
(제 개인적인 생각에 위의 수식 내용은
원주문 번호에 대하여 1차정정과 2차정정을 하라는 것으로 판단됨)
2) 위의 수식을 시험적용하면 정정주문으로 넘어가지 않습니다.
또한 정정주문에서 'BuyID ='을 추가하면
시험적용시 체결사항이 없기 때문에, KillTimer 함수를 사용하여도
SetTimer가 반복적으로 수행됩니다.
시험적용시에도 1,2차 정정 등이 아예 1회만 실행되도록 수식을 작성하고 싶습니다.
(예를들면 YT에서 거래횟수 제한과 같이,
원주문,1차정정주문,2차정정주문,취소주문 모두 1회 주문 발생)
단, 새로운 매수신호가 발생하면 당연히 동일한 과정이 수행됩니다.
3) 위의 수식에 2차정정으로 부터 5초후 미체결시 해당주문을 취소하고 싶습니다.
즉, 원주문 번호 --> 원주문 번호에 대한 1차정정 번호
--> 1차정정 번호에 대한 2차정정 번호 --> 2차정정 번호에 대한 취소주문
시험적용에서도 정정주문이 반복되지 않고 각 주문이 1회만 발생하도록 제어하고,
새로운 매수신호 발생시 제가 원하는 위의 과정을 반복 수행하는 수식이 되도록
수정 부탁드리겠습니다.
이상입니다.
그럼 즐거운 크리스마스 되세요~
감사합니다 !!!
2012-12-24
2526
글번호 221879
답변완료
[386]관련 추가 질문
안녕하세요~
답변 잘 받았습니다.
정정주문과 관련하여 추가로 몇가지 질문이 있습니다.
function Chart1_OnRiseSignal(Signal)
{
if (Signal == 3)
Account1.OrderSell(MarketData1.code, Vol, Signal.price, 0);
}
1) 위의 수식에서 YT의 PriceScale 함수를 추가하고 싶은데 가능한지요?
부연하면 'Signal.price - PriceScale'과 같은 의미로 사용하려면
YesSpot에서 PriceScale에 해당하는 함수가 무엇인지요?
2) 위의 수식을 수정한 내용이 맞는지 확인 부탁드립니다.
차트에서 매도신호 발생시 만약 1호가매수잔량 > 1호가매도잔량 상태이면 매도1호가 매도
1호가매수잔량 > 1호가매도잔량 상태가 아니라면 완성봉 가격으로 매도
(물론 경우에 따라서 두가지 경우의 가격이 같을 수도 있겠습니다)
Sellid 와 Sellfill은 이후 정정을 위한 변수입니다.
function Chart1_OnRiseSignal(Signal)
{
if (Signal == 3)
{
if (MarketData1.BidAmount(1) > MarketData1.AskAmount(1))
{
Sellid = Account1.OrderSell(MarketData1.code, Vol, MarketData1.Ask(1), 0);
Sellfill = 0;
}
else
{
Sellid = Account1.OrderSell(MarketData1.code, Vol, Signal.price, 0);
Sellfill = 0;
}
}
}
3) 현재 신호발생시의 가격으로 주문후 10초후까지 체결이 안되면 5호가 아래로
정정주문을 내는 것을 시험test중입니다. (MarketData1.Bid(5)로 정정 처리)
그런데 시험test이므로 실제 체결이 안되는 관계로
10초 단위로 계속 정정주문이 발생하는데,
시험적용 상태에서도 실거래에서와 같이 test해 볼 수 있는 방법은 없는지요?
(즉 시험적용 상태에서도 정정가격이 체결조건을 만족하면 다음 신호까지
추가로 정정주문 발생하지 않도록 함)
이후 정정수식은 하이투 교육시 사용하는 교재의 정정주문 예제에 준하여 작성된 상태입니다.
4) 예스스팟은 언제쯤 모의투자가 가능할까요?
이상입니다.
그럼 즐거운 주말되시기 바라겠습니다.
감사합니다 !!!
2012-12-21
2350
글번호 221873