이전 블로그 내용 백업
위차트는..
봉차트는 예전에 만들어둔 ASSA_Chart를 사용하였다. ASSA_Chart 설계시 의도한 바는 시계열 데이터를 로드시 좌표변환 혹은 최대값 최소값 을 찾는 작업을 미리 정해진 순서대로 실행하는 load_programs 들을 생각했다. 이러한 프로그램들은 배열에 function 으로 담겨서 순차적으로 실행되며 데이터를 로드하는 과정을 거치게 된다. 그리고 render_programs 는 차트를 그리는 함수들이며 순차적으로 그려지게 된다. 만약 자기가 원하는 자신만의 지표가 있을때 데이터를 새로 조작해야 한다면 로드프로그램에 function 을 등록하고 원하는 방식으로 차트에 지표를 그리도록 render program을 작성하여 function을 등록하면 되는것이다. 하지만 아직은 그렇게 깔끔한 설계는 아니라고 생각하여 더 개선할 예정이다.
반짝반짝 빛이나는 것은 그냥 나는것이 아니고 거래량이 많은 순간에 더 활발하게 거래가 되었음을 시각적으로 보이기 위해 강약을 추가한것이다. 좀더 빛을 강렬하게 표현하는 법을 연구하여 적용할 계획이다.
주가모형에 대해
위 차트의 가격데이터는 랜덤으로 만들어진 데이터일뿐 실제 주식과는 아무 상관이 없다. 다만 이 기하브라운 주가모형으로 생성되는 주가경로는 실제 주가의 양상이랑 다른경우가 많은것 같다 (체감적으로) 이 주가모형은 한 봉의 가격의 움직임은 전봉이랑 전혀 상관이 없으나(독립) 실제 주식세상에서는 가격 그 자체가 시장참여자들에게 중대한 의미를 주기도 하며 어느정도 경향성을 준다. 고로 이 모형은 그렇게 쓸데가 있어보이진 않지만 변동성이 얼마나 중요한가에 대한 의미는 있는것 같다.
원래 주가모형은 종가만을 생성하므로 위 차트에 맞게 시고저종의 데이터를 생성할 필요가 있다. 이는 간단하게 해결했는데 상하한가 +-15% 이내의 범위에서 세개의 가격을 구한뒤 종가를 미리 지정하고 정렬하여 고가, 저가를 정해주면 시고저종을 만들수 있다.
function stock_process(s, mu, vol, t, n){
this.s = s || 100.0;
this.mu = mu|| 0.1;
this.vol = vol || 0.3;
this.t = t || 1.0;
this.n = n || 365;
this.date = new Date();
function clip_data(dat){
if(dat > 0.15)
return 0.15;
else if (dat < -0.15)
return -0.15;
else
return dat;
}
this.randRate = function(){
var x1 = Math.random();
var x2 = Math.random();
var u1 = Math.sqrt(-2 * Math.log(x1))
* Math.cos(2 * Math.PI * x2);
var u2 = Math.sqrt(-2 * Math.log(x1))
* Math.sin(2 * Math.PI * x2);
var dt = this.t / this.n;
return clip_data(this.mu * dt + this.vol * u1 * Math.sqrt(dt));
}
this._prevS = 0;
this.init = function(){
this._prevS = this.s;
}
this.getPrice = function(){
var arr = [];
for(var i=0; i < 3; i++){
//console.log('randr' + randRate());
arr[i] = this._prevS + this._prevS * this.randRate();
}
var close = arr[0];
arr.sort();
var ret = {
vol : parseInt(Math.random()*10000),
open : this._prevS,
high : arr[2],
low : arr[0],
close: close,
date: "20130921"
};
this._prevS = this._prevS + this._prevS * this.randRate();
return ret;
}
this.getPricePath = function(){
var ret = new Array(this.n);
for(var i=0; i < this.n; i++){
ret[i] = this.getPrice();
}
return ret;
}
}