커뮤니티
예스스팟 Q&A
답변완료
옵션 합성
안녕하세요?
아래와 같은 조건을 만족하는 시스템을 작성하고자 합니다.
0. 콜과 풋의 가격이 1.0 ~ 2.0인 양 옵션 종목을 사용한다.
1. 진입1: 장 시작 후 콜과 풋이 교차(수렴)할 때, 교차가 + 1틱에 먼저 도달하는 옵션(상승 종목)을 매수한다
2. 진입2: 잠시 후 양옵션이 등락하여 반대 옵션(하락 종목)이 교차가 + 1틱에 도달하는 경우 이 종목도 매수한다. 이 때는 양매수 상태가 된다.
3. 손절1: 하락종목이 반등하여 교차가를 넘지 못하고 직저(반등시 저가)를 이탈할 때 스탑한다. 이 때 상승 종목만 남는다.
4. 손절2: 하락 종목이 상대(상승종목)의 최저가를 이탈 시 스탑한다. 이 때 상승 종목만 남는다. 만일 이탈 가격를 돌파하면 재매수 한다.
5. 상승 종목이 목표가 도달 시(시초가 + 1.25 P) 또는 가격 = 2.5 P에서 익절한다.
6. 당일 장 마감시 청산 한다.
감사합니다.
2017-05-31
2275
글번호 224179
답변완료
함수 작성 방법 검토 부탁드립니다.
아래 예와 같이 전역변수 C2_f_rsi1, C2_f_rsi2, C2_f_rsi4에 차트에 적용된 indicator 값을 받아오는 코딩을 하려고 하는데요... case3는 잘동작하는데, 사용자정의 모듈 함수로 처리하고자 할 때 case1, case2 어떤 방식이 맞는 건가여?
var C2_f_rsi1, C2_f_rsi2, C2_f_rsi4;
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)
{
// case1
CollectIndicators_Test1();
Main.MessageList("test1", C2_f_rsi1.toFixed(2), C2_f_rsi2.toFixed(2), C2_f_rsi4.toFixed(2));
// case2
CollectIndicators_Test2(C2_f_rsi1, C2_f_rsi2, C2_f_rsi4);
Main.MessageList("test2", C2_f_rsi1.toFixed(2), C2_f_rsi2.toFixed(2), C2_f_rsi4.toFixed(2));
// case3
C2_f_rsi1 = Chart_2min.GetIndicatorData("___000rsi_data1", 1, 0);
C2_f_rsi2 = Chart_2min.GetIndicatorData("___000rsi_data1", 2, 0);
C2_f_rsi4 = Chart_2min.GetIndicatorData("___000rsi_data1", 3, 0);
Main.MessageList("test3", C2_f_rsi1.toFixed(2), C2_f_rsi2.toFixed(2), C2_f_rsi4.toFixed(2));
}
CollectIndicators_Test1()
{
C2_f_rsi1 = Chart_2min.GetIndicatorData("___000rsi_data1", 1, 0);
C2_f_rsi2 = Chart_2min.GetIndicatorData("___000rsi_data1", 2, 0);
C2_f_rsi4 = Chart_2min.GetIndicatorData("___000rsi_data1", 3, 0);
}
CollectIndicators_Test2(_C2_f_rsi1, _C2_f_rsi2, _C2_f_rsi4)
{
_C2_f_rsi1 = Chart_2min.GetIndicatorData("___000rsi_data1", 1, 0);
_C2_f_rsi2 = Chart_2min.GetIndicatorData("___000rsi_data1", 2, 0);
_C2_f_rsi4 = Chart_2min.GetIndicatorData("___000rsi_data1", 3, 0);
}
2017-05-31
2294
글번호 224178
답변완료
장시간 이후에 예스스팟을 테스트 어떻케 하나요 ?
수고가 많으십니다.
1. 시험적용 과 자동주문에 차이는 무엇인가여?
2. 장시간 이후에 예스스팟을 테스트 어떻케 하나요?
자동주문을 선택하고 장시간 이후에는 매수,매도 할경우 장마감시간이라고 메시지 뜨면서
매수.매도가 안되던데. 꼭 장시간에만 테스트를 할수 있는건지?
장시간 이후에도 별도로 테스트 할수 있는 방법좀 알려주세요.
2017-05-29
2325
글번호 224176
somun 님에 의해서 삭제되었습니다.
2017-05-29
3
글번호 224174
개똥이 님에 의해서 삭제되었습니다.
2017-05-29
3
글번호 224173
확장차트 생성 후 엑셀 작성 문의합니다.
안녕하세요. 예스스팟으로 매매에 도움을 얻고자 하는 1인입니다.
최근 여러 종목에서 필요한 값을 엑셀에 정리할 때 예스스팟을 활용할려고 합니다.
그래서 구상한 형태는 다음과 같은데요.
1 엑셀에 종목코드, 코스닥/코스피 표시 해두기
2 엑셀에 종목코드 읽어들여서 확장차트 생성하기
3 확장차트에서 최근 260일 종가 읽어들여서 수식 값 계산하기
4 수식 결과값 엑셀에 출력
그런데 현재 2번 확장차트 생성하기까지는 실행이 되는데,
이후 확장차트가 생성이 되어도 function Main_OnRcvChartEx(ChartEx) 로 진행이 되질 않습니다.
무엇이 잘못되었는지 참 고민하다가 여기에 글을 올립니다.
조언 부탁드립니다.
------------
엑셀 파일
A B C D
1 종목코드 종목명 K (수식결과값입력란:빈칸)
2 종목코드 종목명 Q (수식결과값입력란:빈칸)
(K면 코스피, Q면 코스닥)
--------------
코드
var ExcelCode = [], InMarket = [], Code = [];
var KPprofit = [], KQprofit = [], Profit = [], Covar = [], Beta = [];
var rcv, rcv1, ExcelRow, C1, ChartEx1, Period;
var Avgpf, AvgKPpf, AvgKQpf, VarKP, VarKQ, AvgCovItem;
function Main_OnStart() //특정이벤트에서
{
Main.MessageLog("시작")
ExcelRow = Excel1.GetRowCount(1);
//엑셀에서 종목코드를 가져와 ExcelCode에 저장
for (var i = 2; i <= ExcelRow; i++)
{
ExcelCode[i-2] = Excel1.GetData(1, "A"+i);
InMarket[i-2] = Excel1.GetData(1, "C"+i);
}
//객체수신 횟수를 카운트할 변수
rcv = 0;
//객체수신하면 저장할 배열변수
Code = [];
//자료수집 기간 설정
Period = 260;
//코스피, 코스닥 지수 수익률 분산 계산
for (var j = 0 ; j < Period ; j++)
{
KPprofit[j] = ( ChartExKP.GetClose(1,j) / ChartExKP.GetClose(1,j+1) ) - 1;
AvgKPpf = AvgKPpf + KPprofit[j] / Period;
KQprofit[j] = ( ChartExKQ.GetClose(1,j) / ChartExKQ.GetClose(1,j+1) ) - 1;
AvgKQpf = AvgKQpf + KQprofit[j] / Period;
}
for (var k = 0 ; k < Period ; k++)
{
VarKP = VarKP + Math.pow( AvgKPpf - KPprofit[k], 2);
VarKQ = VarKQ + Math.pow( AvgKQpf - KQprofit[k], 2);
}
Main.MessageLog("KP, KQ 분산 측정, 타이머 시작");
Main.SetTimer(1,1000)
}
function Main_OnTimer(nEventID) //특정이벤트에서
{
//ExcelCode에 저장된 값이 1개이상이면
if (nEventID == 1 && ExcelCode.length >= 1 && ExcelCode.length <= ExcelRow + 1 )
{
//ExcelCode[rcv]방의 종목요청
Main.ReqMarketData(ExcelCode[rcv]);
Main.MessageList("종목 <",ExcelCode[rcv],"> 생성 요청");
}
Main.KillTimer(1);
}
function Main_OnRcvMarketData(MarketData)
{
//확장차트 객체 초기화
// var ChartEx1 = null;
//직전 요청산 종목이 수신되면
if (MarketData.code == ExcelCode[rcv])
{
//Object의 rcv방에 해당종목객체 저장
Code[rcv] = MarketData;
var C1 = new ReqChartItem(MarketData.code, 1, CHART_PERIOD_DAILY, 261, CHART_REQCOUNT_BAR,false, false);
Main.ReqChartEx(C1, null, null, null);
Main.MessageList("종목 <",ExcelCode[rcv],">의 확장차트 생성");
}
function Main_OnRcvChartEx(ChartEx)
{
ChartExA = ChartEx;
for (var l = 0 ; l < Period; l++)
{
Profit[l] = ( ChartExA.GetClose(1,l) / ChartExA.GetClose(1,l+1) ) - 1;
Avgpf = Avgpf + Profit[l] / Period;
Main.MessageLog("Avgpf 측정");
}
//코스피, 코스닥 종목 구분
if ( InMarket[rcv] == "K" )
{
for (var m = 0 ; m < Period ; m++)
{
Covar[m] = ( Profit[m] - AvgKPpf )*( KPprofit[m] - Avgpf );
AvgCovItem = AvgCovItem + Covar[m] / Period;
}
Beta[rcv] = AvgCovItem / VarKP;
Main.MessageLog("Beta 측정");
}
if ( InMarket[rcv] == "Q" )
{
for (var n = 0 ; n < Period ; n++)
{
Covar[n] = ( Profit[n] - AvgKQpf )*( KQprofit[n] - Avgpf );
AvgCovItem = AvgCovItem + Covar[n] / Period;
}
Beta[rcv] = AvgCovItem / VarKQ;
Main.MessageLog("Beta 측정");
}
if ( InMarket[rcv] == "" )
{
Beta[rcv] = 0;
Main.MessageLog("Beta 측정");
}
rcv1 = rcv + 2;
//엑셀에 베타(1년) 입력
Excel1.SetColData(1, "D"+rcv1, Beta[rcv]);
Main.MessageList("종목 <",ExcelCode[rcv],">의 Beta 출력");
//필요한 변수 초기화
Avgpf = 0;
AvgCovItem = 0;
//rcv는 1증가
rcv = rcv+1;
//타이머 재설정
Main.SetTimer(1,5000);
//배열변수가 0부터 존재하므로
//rcv가 종목코드갯수 이하일때만 요청
if (rcv < ExcelCode.length)
{
Main.ReqMarketData(ExcelCode[rcv]);
}
if ( rcv >= ExcelRow - 1 ) { Excel1.Save() };
}
}
2017-05-25
2606
글번호 224172
찬홍아빠 님에 의해서 삭제되었습니다.
2017-05-25
14
글번호 224171
찬홍아빠 님에 의해서 삭제되었습니다.
2017-05-22
7
글번호 224170
답변완료
Grid 와 엑셀 객체 사용관련 문의 드립니다.
예스스팟에서 그리드를 활용하여 수시로 변경되는 데이터들을 보관하고, 업데이트하여 사용중입니다.
질문이 좀 여러가지네요. ^__^
1. 전략을 실행하면 Grid 부분에서 마우스로 보이기 를 클릭해 줘야 보이는데,
기본적으로 보이도록 할 방법은 없는지요?
2. Grid 객체를 예스스팟 편집기에서 사용시 row는 최소 1 이상으로 줘야 합니다.
이런 경우 실행시 grid.rows 하면 1이 아닌 0이 리턴 됩니다. 맞는 건가요?
이걸 알아야 새로운 row 추가 후 사용시 0 또는 1로 결정해서 set data를 할 수 있거든요.
3. Grid의 row 나 col은 0부터 시작된다고 하였는데요.
모두 0부터 사용이 되는게 맞는것 같은데, deleterow(0) 이렇게 하면 0 row가 아닌 1번 row가 삭제되는 것으로 테스트가 됩니다.
4. 엑셀객체를 사용하는데, 항상 화면에 엑셀이 나타나는데, 이거 나타나지 않게 할 수 있나요?
5. 엑셀객체 사용시 새로운 프로세스로 가동이라는 게 있던데, 이거는 Y / N 으로 해도 큰 차이를 알수가 없네요.
6. 전략 실행 후 엑셀객체가 뜬 상태에서 전략을 중지하거나 취소하면 PC가 종료되어 버리는 경우가 있습니다. 어떤 경우에 해당되는지 알 수가 없네요. 예스트레이더 파일 전체 새로 받아서 해 보아도 마찬가지 입니다.
7. 엑셀에는 예스스팟에서 사용할 여러 설정값을 저장해 놓고 불러다 사용하는 용도입니다.
그냥 txt 파일에 저장해 놓고 불러다 사용토록 하면 더 좋을 것 같은데요. 좋은 방법이 없을까요? (일반적인 스크립트의 파일스트림은 사용 불가한 듯)
좀 여러가지이지만 성실한 답변 부탁드립니다.
2017-05-15
2536
글번호 224166
매매광 님에 의해서 삭제되었습니다.
2017-05-11
24
글번호 224165