이전 블로그 내용 백업


위차트는..

봉차트는 예전에 만들어둔 ASSA_Chart를 사용하였다. ASSA_Chart 설계시 의도한 바는 시계열 데이터를 로드시 좌표변환 혹은 최대값 최소값 을 찾는 작업을 미리 정해진 순서대로 실행하는 load_programs 들을 생각했다. 이러한 프로그램들은 배열에 function 으로 담겨서 순차적으로 실행되며 데이터를 로드하는 과정을 거치게 된다. 그리고 render_programs 는 차트를 그리는 함수들이며 순차적으로 그려지게 된다. 만약 자기가 원하는 자신만의 지표가 있을때 데이터를 새로 조작해야 한다면 로드프로그램에 function 을 등록하고 원하는 방식으로 차트에 지표를 그리도록 render program을 작성하여 function을 등록하면 되는것이다. 하지만 아직은 그렇게 깔끔한 설계는 아니라고 생각하여 더 개선할 예정이다.

반짝반짝 빛이나는 것은 그냥 나는것이 아니고 거래량이 많은 순간에 더 활발하게 거래가 되었음을 시각적으로 보이기 위해 강약을 추가한것이다. 좀더 빛을 강렬하게 표현하는 법을 연구하여 적용할 계획이다.


주가모형에 대해

위 차트의 가격데이터는 랜덤으로 만들어진 데이터일뿐 실제 주식과는 아무 상관이 없다. 다만 이 기하브라운 주가모형으로 생성되는 주가경로는 실제 주가의 양상이랑 다른경우가 많은것 같다 (체감적으로) 이 주가모형은 한 봉의 가격의 움직임은 전봉이랑 전혀 상관이 없으나(독립) 실제 주식세상에서는 가격 그 자체가 시장참여자들에게 중대한 의미를 주기도 하며 어느정도 경향성을 준다. 고로 이 모형은 그렇게 쓸데가 있어보이진 않지만 변동성이 얼마나 중요한가에 대한 의미는 있는것 같다.

원래 주가모형은 종가만을 생성하므로 위 차트에 맞게 시고저종의 데이터를 생성할 필요가 있다. 이는 간단하게 해결했는데 상하한가 +-15% 이내의 범위에서 세개의 가격을 구한뒤 종가를 미리 지정하고 정렬하여 고가, 저가를 정해주면 시고저종을 만들수 있다.

JAVASCRIPT
	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;
		}

	}