【AI 投資教室】買入時機與大戶預判

上一篇文章論述了供求的重要 (請參閱 : 升跌全因供求定律) ,也在最後問了大家一個問題 :「為何有些優質的股票,偏偏股價下跌呢﹖」 答案其實也與供求有關的。 炒賣iPhone也要講究時機 再以炒iPhone來做例子,假設你已能肯定,內地大買家對新iPhone很有需求,你會希望何時賣給他們﹖當然越早越好!炒iPhone最狂熱的時,第一日的網上訂購日,成了大批香港炒家的戰場。大家都屏息靜氣,直至時候一到,就瘋狂登入訂購網,連F5也差點按壞。有些人甚至預早購買一些小程序,提升登入購買頁的機會。

免費訂閱【AI投資教室】

從最重要的投資觀念出發,剖折AI投資應用開發背後,大眾投資也值得學習的概念。

訂閱後會定期收到不同的學習文章及教學資源。

稱呼 電郵* 立即訂閱 [tcb-script type=”text/javascript”]window.cfields = [];window._show_thank_you = function(id, message, trackcmp_url) { var form = document.getElementById(‘_form_’ + id + ‘_’), thank_you = form.querySelector(‘._form-thank-you’); form.querySelector(‘._form-content’).style.display = ‘none’; thank_you.innerHTML = message; thank_you.style.display = ‘block’; if (typeof(trackcmp_url) != ‘undefined’ && trackcmp_url) { // Site tracking URL to use after inline form submission. _load_script(trackcmp_url); } if (typeof window._form_callback !== ‘undefined’) window._form_callback(id);};window._show_error = function(id, message, html) { var form = document.getElementById(‘_form_’ + id + ‘_’), err = document.createElement(‘div’), button = form.querySelector(‘button’), old_error = form.querySelector(‘._form_error’); if (old_error) old_error.parentNode.removeChild(old_error); err.innerHTML = message; err.className = ‘_error-inner _form_error _no_arrow’; var wrapper = document.createElement(‘div’); wrapper.className = ‘_form-inner’; wrapper.appendChild(err); button.parentNode.insertBefore(wrapper, button); document.querySelector(‘[id^=”_form”][id$=”_submit”]’).disabled = false; if (html) { var div = document.createElement(‘div’); div.className = ‘_error-html’; div.innerHTML = html; err.appendChild(div); }};window._load_script = function(url, callback) { var head = document.querySelector(‘head’), script = document.createElement(‘script’), r = false; script.type = ‘text/javascript’; script.charset = ‘utf-8’; script.src = url; if (callback) { script.onload = script.onreadystatechange = function() { if (!r && (!this.readyState || this.readyState == ‘complete’)) { r = true; callback(); } }; } head.appendChild(script);};(function() { if (window.location.search.search(“excludeform”) !== -1) return false; var getCookie = function(name) { var match = document.cookie.match(new RegExp(‘(^|; )’ + name + ‘=([^;]+)’)); return match ? match[2] : null; } var setCookie = function(name, value) { var now = new Date(); var time = now.getTime(); var expireTime = time + 1000 * 60 * 60 * 24 * 365; now.setTime(expireTime); document.cookie = name + ‘=’ + value + ‘; expires=’ + now + ‘;path=/’; } var addEvent = function(element, event, func) { if (element.addEventListener) { element.addEventListener(event, func); } else { var oldFunc = element[‘on’ + event]; element[‘on’ + event] = function() { oldFunc.apply(this, arguments); func.apply(this, arguments); }; } } var _removed = false; var form_to_submit = document.getElementById(‘_form_3_’); var allInputs = form_to_submit.querySelectorAll(‘input, select, textarea’), tooltips = [], submitted = false; var getUrlParam = function(name) { var regexStr = ‘[?&]’ + name + ‘=([^&#]*)’; var results = new RegExp(regexStr, ‘i’).exec(window.location.href); return results != undefined ? decodeURIComponent(results[1]) : false; }; for (var i = 0; i < allInputs.length; i++) { var regexStr = “field\[(\d+)\]”; var results = new RegExp(regexStr).exec(allInputs[i].name); if (results != undefined) { allInputs[i].dataset.name = window.cfields[results[1]]; } else { allInputs[i].dataset.name = allInputs[i].name; } var fieldVal = getUrlParam(allInputs[i].dataset.name); if (fieldVal) { if (allInputs[i].type == “radio” || allInputs[i].type == “checkbox”) { if (allInputs[i].value == fieldVal) { allInputs[i].checked = true; } } else { allInputs[i].value = fieldVal; } } } var remove_tooltips = function() { for (var i = 0; i < tooltips.length; i++) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); } tooltips = []; }; var remove_tooltip = function(elem) { for (var i = 0; i < tooltips.length; i++) { if (tooltips[i].elem === elem) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); tooltips.splice(i, 1); return; } } }; var create_tooltip = function(elem, text) { var tooltip = document.createElement(‘div’), arrow = document.createElement(‘div’), inner = document.createElement(‘div’), new_tooltip = {}; if (elem.type != ‘radio’ && elem.type != ‘checkbox’) { tooltip.className = ‘_error’; arrow.className = ‘_error-arrow’; inner.className = ‘_error-inner’; inner.innerHTML = text; tooltip.appendChild(arrow); tooltip.appendChild(inner); elem.parentNode.appendChild(tooltip); } else { tooltip.className = ‘_error-inner _no_arrow’; tooltip.innerHTML = text; elem.parentNode.insertBefore(tooltip, elem); new_tooltip.no_arrow = true; } new_tooltip.tip = tooltip; new_tooltip.elem = elem; tooltips.push(new_tooltip); return new_tooltip; }; var resize_tooltip = function(tooltip) { var rect = tooltip.elem.getBoundingClientRect(); var doc = document.documentElement, scrollPosition = rect.top – ((window.pageYOffset || doc.scrollTop) – (doc.clientTop || 0)); if (scrollPosition < 40) { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, ”) + ‘ _below’; } else { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, ”) + ‘ _above’; } }; var resize_tooltips = function() { if (_removed) return; for (var i = 0; i < tooltips.length; i++) { if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]); } }; var validate_field = function(elem, remove) { var tooltip = null, value = elem.value, no_error = true; remove ? remove_tooltip(elem) : false; if (elem.type != ‘checkbox’) elem.className = elem.className.replace(/ ?_has_error ?/g, ”); if (elem.getAttribute(‘required’) !== null) { if (elem.type == ‘radio’ || (elem.type == ‘checkbox’ && /any/.test(elem.className))) { var elems = form_to_submit.elements[elem.name]; if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) { no_error = elem.checked; } else { no_error = false; for (var i = 0; i < elems.length; i++) { if (elems[i].checked) no_error = true; } } if (!no_error) { tooltip = create_tooltip(elem, “Please select an option.”); } } else if (elem.type ==’checkbox’) { var elems = form_to_submit.elements[elem.name], found = false, err = []; no_error = true; for (var i = 0; i < elems.length; i++) { if (elems[i].getAttribute(‘required’) === null) continue; if (!found && elems[i] !== elem) return true; found = true; elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, ”); if (!elems[i].checked) { no_error = false; elems[i].className = elems[i].className + ‘ _has_error’; err.push(“Checking %s is required”.replace(“%s”, elems[i].value)); } } if (!no_error) { tooltip = create_tooltip(elem, err.join(‘<br/>’)); } } else if (elem.tagName == ‘SELECT’) { var selected = true; if (elem.multiple) { selected = false; for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected) { selected = true; break; } } } else { for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected && !elem.options[i].value) { selected = false; } } } if (!selected) { elem.className = elem.className + ‘ _has_error’; no_error = false; tooltip = create_tooltip(elem, “Please select an option.”); } } else if (value === undefined || value === null || value === ”) { elem.className = elem.className + ‘ _has_error’; no_error = false; tooltip = create_tooltip(elem, “This field is required.”); } } if (no_error && elem.name == ’email’) { if (!value.match(/^[+_a-z0-9-‘&=]+(.[+_a-z0-9-‘]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,})$/i)) { elem.className = elem.className + ‘ _has_error’; no_error = false; tooltip = create_tooltip(elem, “Enter a valid email address.”); } } if (no_error && /date_field/.test(elem.className)) { if (!value.match(/^dddd-dd-dd$/)) { elem.className = elem.className + ‘ _has_error’; no_error = false; tooltip = create_tooltip(elem, “Enter a valid date.”); } } tooltip ? resize_tooltip(tooltip) : false; return no_error; }; var needs_validate = function(el) { return el.name == ’email’ || el.getAttribute(‘required’) !== null; }; var validate_form = function(e) { var err = form_to_submit.querySelector(‘._form_error’), no_error = true; if (!submitted) { submitted = true; for (var i = 0, len = allInputs.length; i < len; i++) { var input = allInputs[i]; if (needs_validate(input)) { if (input.type == ‘text’) { addEvent(input, ‘blur’, function() { this.value = this.value.trim(); validate_field(this, true); }); addEvent(input, ‘input’, function() { validate_field(this, true); }); } else if (input.type == ‘radio’ || input.type == ‘checkbox’) { (function(el) { var radios = form_to_submit.elements[el.name]; for (var i = 0; i < radios.length; i++) { addEvent(radios[i], ‘click’, function() { validate_field(el, true); }); } })(input); } else if (input.tagName == ‘SELECT’) { addEvent(input, ‘change’, function() { validate_field(this, true); }); } else if (input.type == ‘textarea’){ addEvent(input, ‘input’, function() { validate_field(this, true); }); } } } } remove_tooltips(); for (var i = 0, len = allInputs.length; i < len; i++) { var elem = allInputs[i]; if (needs_validate(elem)) { if (elem.tagName.toLowerCase() !== “select”) { elem.value = elem.value.trim(); } validate_field(elem) ? true : no_error = false; } } if (!no_error && e) { e.preventDefault(); } resize_tooltips(); return no_error; }; addEvent(window, ‘resize’, resize_tooltips); addEvent(window, ‘scroll’, resize_tooltips); window._old_serialize = null; if (typeof serialize !== ‘undefined’) window._old_serialize = window.serialize; _load_script(“//d3rxaij56vjege.cloudfront.net/form-serialize/0.3/serialize.min.js”, function() { window._form_serialize = window.serialize; if (window._old_serialize) window.serialize = window._old_serialize; }); var form_submit = function(e) { e.preventDefault(); if (validate_form()) { // use this trick to get the submit button & disable it using plain javascript document.querySelector(‘#_form_3_submit’).disabled = true; var serialized = _form_serialize(document.getElementById(‘_form_3_’)); var err = form_to_submit.querySelector(‘._form_error’); err ? err.parentNode.removeChild(err) : false; _load_script(‘https://investor9700.activehosted.com/proc.php?’ + serialized + ‘&jsonp=true’); } return false; }; addEvent(form_to_submit, ‘submit’, form_submit);})();[/tcb-script][tcb-script src=”https://investor9700.activehosted.com/f/embed.php?id=66″ type=”text/javascript” charset=”utf-8″][/tcb-script]

上一篇文章論述了供求的重要 (請參閱 : 升跌全因供求定律) ,也在最後問了大家一個問題 :「為何有些優質的股票,偏偏股價下跌呢﹖」

答案其實也與供求有關的。

炒賣iPhone也要講究時機

再以炒iPhone來做例子,假設你已能肯定,內地大買家對新iPhone很有需求,你會希望何時賣給他們﹖當然越早越好!炒iPhone最狂熱的時,第一日的網上訂購日,成了大批香港炒家的戰場。大家都屏息靜氣,直至時候一到,就瘋狂登入訂購網,連F5也差點按壞。有些人甚至預早購買一些小程序,提升登入購買頁的機會。

這都所為何事﹖說穿了就是時機問題,因為第一批到手的iPhone,肯定售價是最高的。如果你只能過幾批才買到,分分鐘會蝕錢收場。

這解答了一開始的問題 :「為何有些優質的股票,偏偏股價下跌呢﹖」你的不幸,其實就是因為時機不對!很明顯,即使手持最好的股票,也需要在正確的時機買入,也要在正確的時機賣出。

散戶經常墮進的時機陷阱

相信我,這個似乎很顯淺的道理,偏偏有很多人做不到。他們給自己很多藉口忽略時機的重要,經常聽到的說法如下:「我是長線投資者,所以我起碼要持有3年才會沽出。」「這是我的愛股,我會繼續相信它是有潛力。」「我還是有點虧損,等它的股價返家鄉,我才會平手沽出。」「反正這股票持續派息,即使蝕錢也無壞。」

這些人都有一個通病,就是無視時機的重要。若果以上4個例子中的股票改為iPhone,你就會更有感受了。你會希望將一部新iPhone持有3年才賣嗎﹖當你的新iPhone已開始蝕錢,你會等它返家鄉才到先達賣嗎﹖不會吧。當然,炒iPhone的現象只是一個簡單比喻,這個快買快賣的一面倒要訣,在真實的股票市場,並不會就此發生。股票的價格變動,實際上是更加複雜的。

以大戶的角度去思考

上一篇文章提及,真正能主宰股價升跌的是機構投資者 ( 請參閱 : 升跌全因供求定律 ),所以當我們要判斷最佳買入時機時,必先要以大戶的角度去思考。

首先,假設大戶有意買入一隻每天有1000萬成交額的優質股,而他有10億的資金,他要用多少天才能買夠10億﹖簡單答案就是100天。一個月大約有20個交易日,所以該大戶要花4-5個月才能完成他的部署。要注意,這4-5個月中,假如你是大戶,你會希望過程中,該股的股價是升還是跌﹖當然是價格越低越好了。怎樣保證股價可以盡量低呢﹖首先不要買得太多而刺激股價。買入的需求少過賣出的供應,價格自然會跌,反之亦然。所以在此,要帶出一個觀察需求變化的很重要方法,就是「價格成交量分析」(Volume Price Analysis)。以剛才大戶買貨的例子,當你發現一隻優質股,其股價下跌的同時,成交量持續偏低的話,那麼該下跌過程未必是想像般差。那麼這優質股,何時才會升呢﹖就是當越來越多大戶發現這隻股票,並同時進行買入部署的時候,因需求開始拋離供應,價格便會開始上升。雖然各位大戶都希望盡可能以低價買入該股,但因需求開始大,他們唯有再出高一點價錢去買,令到股價有秩序地向上。這個時候,你看到它的成交增加的同時,股價向上,這是很好的現象。當這個情況會持續,直到需求大到一個地步,各大戶不得不以急速遞升的股價買入股票,以完成他的部署。同時只要該股票的條件吸引,將會有更多後知後覺的大戶買入,令股價大幅爬升,新一代領先股由此形成。由大戶默默買貨,到大量需求引致股價急升的這過程,與煲水的過程很相似,都會有一個沸點出現。對不用長時間部署,就能買入股票的散戶來說,這個沸點就是最佳的買入時機。

散戶的絕對優勢

用了這麼大的篇幅,去講解時機的重要與及大戶的思維,是為了告訴各位散戶一個福音:「透過預判大戶的行為,找到準確的買入沸點,再運用散戶行動迅速的優勢,你就可以於股市上乘風波浪。」這個也是我們訓練人工智能系統的方向。下一篇文章,將會更深入討論如何更能準確預判大戶的行為,以及最佳買入點的特徵。