主選單

2018-01-01

理財筆記:布林通道 B-Band

布林帶(Bollinger Bands,BBands)也稱為布林通道,是由約翰·包寧傑(John Bollinger)在1980年代發明的技術分析工具。應用上結合了移動平均和標準差的概念,其基本的型態是由三條軌道線組成的帶狀通道(中軌和上、下軌各一條)。中軌為股價的平均成本,上軌和下軌可分別視為股價的壓力線和支撐線。

「布林帶」是這樣定義的:
中軌(SMA) = N時間段的簡單移動平均線
上軌(UB) = 中軌 + K × N時間段的標準差
下軌(LB) = 中軌 − K × N時間段的標準差

一般情況下,設定N=20和K=2,這兩個數值也是在布林帶當中使用最多的。在日線圖裡,N=20其實就是「月均線」(MA20)。依照常態分布規則,約有 95% 的數值會分布在距離平均值有正負2個標準差(± 2σ)的範圍內。 《維基百科》


布林通道公式:

1.先求出 N 日均線作為基準:MAt = (Pt +Pt-1 +...+Pt-n+1)/n

2.求各天價格對 MAt 的標準差 SDt = [Σ(Pt-i - MAt)^2 /n ]^0.5

3.每天的上界限 UB 及下界限 LB 則可求出 (2倍標準差):
   UBt = MAt + 2*SDt
   LBt = MAt - 2*SDt


漲到 UB 容易「回檔」、跌到 LB 容易「反彈」:
1、當股價形成開口擴張向上,表示漲勢啟動。
2、當股價形成開口收斂,表示漲多拉回。
3、當股價形成開口擴張向下,表示跌勢啟動。
4、當股價形成開口收斂,表示跌深反彈。

多頭:股價夾在通道上緣線和中值的平均線往右上方移動。
多空:股價夾在通道下緣線和中值的平均線往右下方移動。

布林通道進行壓縮時,即是區間整理,醞釀變盤方向。

參考資料1:http://ebigmoney.pixnet.net/blog/post/152356080-%5B%E6%95%99%E5%AD%B8%5D---%E5%B8%83%E6%9E%97%E9%80%9A%E9%81%93%E8%88%87%E6%B3%A2%E5%8B%95%E7%8E%87
參考資料2:https://zh-tw.facebook.com/bestcooker/posts/672459966130967

2017-05-24

日本的產鬼,姑獲鳥

在某個人煙稀少的竹林裡,傳聞會出現一個沾滿血跡的女人,抱著用紅布包裹著的嬰孩徘徊於林中,沒有一點生氣,有人說那是因喪子而傷心欲絕的母親,也有人說那是含怨的幽靈鬼怪。



日本的姑獲鳥比較類似中國的「產鬼」,但描述稍有不同,也許是傳到日本時被混淆了吧。在日本,姑獲鳥指的是產後死亡的女人所化成的妖怪﹝由怨念所生?﹞,分娩時的出血染紅了她的下半身,據說會抱著一個冰冷的小孩出現在無人煙的荒野,也曾出現在路旁、海邊、寺院門口等地方。她往往在下著雨的深夜裡出現,像在尋覓什麼似的,眼神透露出困惑與無助,當路人靠近時,她會說:「請抱我的孩子好嗎?」,傳聞如果拒絕便會遭遇不幸的事,像是一陣惡寒後死掉!但若是幫忙的話則會有好事發生,而抱過來的小孩則會變成一顆普通的石頭。也有不同版本的故事,但都大同小異。

鳥山石燕畫圖百鬼夜行》


寺島良安和漢三才圖會》中的姑獲鳥  (這是...@@)


中國的「產鬼」是死於難產的母親所化的妖怪,因為沒有見到孩子就已經死去,成為妖怪後就不斷地在尋找孩子。另外也有說法是,產鬼會纏上孕婦,使其無法順利生產,但產鬼會害怕雨傘,只要將雨傘放於門後,產鬼就無法進入。

在中國,「姑獲鳥 ( うぶめどり ) 」指的是另一種妖怪,又稱夜行游女、天帝少女、鬼鳥。姑獲鳥蛻去羽毛後能變成女子。會在喜歡的嬰兒衣服或棉被上滴血做記號,之後會把小孩偷走。

《本草綱目》中紀載「《玄中記》云︰姑獲鳥,鬼神類也。衣毛為飛鳥,脫毛為女人。云是產婦死後化作,故胸前有兩乳,喜取人子養為己子。凡有小兒家,不可夜露衣物。此鳥夜飛,以血點之為志。兒輒病驚癇及疳疾,謂之無辜疳也。荊州多有之。亦謂之鬼鳥。時珍曰︰此鳥純雌無雄,七八月夜飛,害人尤毒也。」
(原來本草綱目也記載妖怪傳說啊~ XD)


2017-05-18

C#:拖曳上傳檔案 (drag and drop file uploading)

在網頁上製作一個區塊,將檔案拖曳過去後,可以自動上傳檔案到 Server 端。



網頁內容加入以下HTML,包含接受拖曳檔案的區塊 drop_block,以及顯示上傳進度的進度條 upload_progress。
<body>
    <div>
        <div id="drop_block" ondragover="javascript: drag_handler(event);" ondrop="javascript: drop_file(event);" class="upload-block">
            請將檔案拖曳到此...
            <div class="progress">
                <div id="upload_progress" class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="" aria-valuemin="0" aria-valuemax="100">
                </div>
            </div>
        </div>
    </div>
</body>
外觀對應的 CSS 如下,因為進度條使用 bootstrap,所以也要引用 bootstrap.min.css。
<head>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
    <style type="text/css">
        .upload-block
         { 
             width: 300px; 
             height:200px; 
             border-style: dotted; 
             border-color: #999999;        
             text-align:center;
             padding: 20px;
             margin: 20px; 
        } 
        .dragover 
        { 
            border-color:#FF9900; 
        } 
        .progress 
        { 
            text-align:center;
            width: 100%; 
        } 
    </style>
</head>

主要的 JavaScript 如下。event.dataTransfer 是負責處理拖曳事件的物件,可以從中取得被拖曳檔案清單 (關於DataTransfer)。XMLHttpRequest 物件可將資料傳送出去, TestUpload.aspx 是準備要負責處理接收的網頁。
<script>
    function drop_file(e) 
    {
        e.preventDefault();
        var upload_image = document.getElementById('drop_block');
        var elProgress = document.getElementById('upload_progress');
        var images_container = document.getElementById('images_container');
        var objXhr  = new XMLHttpRequest();
        var files = e.dataTransfer.files;
        var objForm = new FormData();
        var sucess_count = 0;

        objXhr.upload.onprogress = function(e) 
        {
            if (e.lengthComputable) 
            {
                var intComplete = (e.loaded / e.total) * 100 | 0;

                elProgress.innerHTML = intComplete + '%';
                elProgress.style.width = intComplete + '%';

                elProgress.setAttribute('aria-valuenow', intComplete);
            }
        }

        objXhr.onload = function(e) 
        {
            upload_image.className = upload_image.className.replace(' dragover', '');
            elProgress.className = elProgress.className.replace(' active', '');

            alert(objXhr.responseText); //接收網頁回傳結果
        }

        objXhr.open('POST', 'TestUpload.aspx');
        for (var i = 0; i < files.length; i++) 
        {
            if (!files[i].type.match('image')) 
            {
                var name = files[i].name;
                alert(name + '格式不正確,須為圖檔!');
                continue;
            }
            objForm.append('images[]', files[i]);
            objForm.append('save_file', "Y");
        }

        objXhr.send(objForm);
    }
</script>
避免某些瀏覽器執行自己的預設動作,如自動開啟圖檔等...
<script>
    function drag_handler(e) 
    {
        var upload_image = document.getElementById('drop_block');
        var elProgress = document.getElementById('upload_progress');
        e.preventDefault();  //防止瀏覽器執行預設動作
        if (!upload_image.className.match('dragover')) 
        {
            upload_image.className = upload_image.className + ' dragover';
        }

        if (upload_progress.style.width != '0%') 
        {
            upload_progress.style.width = '0%';
        }
    }
</script>


後端可使用不同程式來接收,下面是使用 ASP.NET 3.5 的例子。
protected void Page_Load(object sender, EventArgs e)
{
    if (Request["save_file"] != null)
    {
        MyUpload();
        Response.Write("上傳完成");
        Response.End();
    }
}

protected void MyUpload()
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        HttpPostedFile postedFile = Request.Files[i];

        if (postedFile.ContentLength > 0)
        {
            string fileName = Path.GetFileName(postedFile.FileName);
            postedFile.SaveAs(Server.MapPath("~/Uploads/") + fileName);
        }
    }
}


原始參考資料(使用PHP):http://code-beginner.logdown.com/posts/313821


2017-05-13

C#:FileUpload 多檔案上傳 (upload multiple files)

HTML5 只需要加入 multiple 即可支援多檔上傳,但要看瀏覽器是否支援。(IE10、IE11 後的版本)
<input name="uploads[]" type=file multiple>



ASP.NET 3.5 的寫法,增加 multiple 屬性。
<asp:FileUpload ID="FileUpload1" runat="server" multiple="multiple" />
<asp:Button ID="btnUpload" Text="Upload" runat="server" OnClick="btnUpload_Click" />
後端程式碼如下,檔案會存檔到網站根目錄下的 Uploads 資料夾:
protected void btnUpload_Click(object sender, EventArgs e)
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        HttpPostedFile postedFile = Request.Files[i];
        if (postedFile.ContentLength > 0)
        {
            string fileName = Path.GetFileName(postedFile.FileName);
            postedFile.SaveAs(Server.MapPath("~/Uploads/") + fileName);
        }
    }
}


ASP.NET 4.5 後版本的 FileUpload 元件支援 AllowMultiple 屬性。
<asp:FileUpload ID="FileUpload1" runat="server" AllowMultiple="true" />
<asp:Button ID="btnUpload" Text="Upload" runat="server" OnClick="btnUpload_Click" />
後端程式碼如下,PostedFiles 也是 .NET 4.5 開始才有的成員。
protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        foreach (var postedFile in FileUpload1.PostedFiles)
        {
            string fileName = Path.GetFileName(postedFile.FileName);
            postedFile.SaveAs(Server.MapPath("~/Uploads/") + fileName);
        }
    }
}
判斷檔案型態:postedFile.ContentType == "image/jpeg"
判斷檔案大小:postedFile.ContentLength < 102400


參考資料:https://www.aspsnippets.com/Articles/Upload-multiple-files-with-ASPNet-45-FileUpload-control-in-Visual-Studio-2012-and-2013.aspx


墮落的水神,河童

河川附近傳來了小孩嘻笑的聲音,但是在接連的落水聲之後,只留下了鴨掌般的怪異腳印。河童是一種水中的妖怪,也有人說它們是墮落的水神。「河童 ( かっぱ ) 」是較為普遍統一的名稱,因地點不同還有「みずち」、「川太郎 ( かわたろう ) 」、「かわの主」、「ひょうすべ」等稱呼方式。



河童的體型通常像小孩一樣,而身上最大的特徵是頭上的儲水碟,裡面裝著些許的水,是它們的法力泉源,其次則是刀槍不入的甲殼、鳥喙般的嘴以及有蹼的手腳,據說它們有能將牛馬拉入水中的力量,不過當頭上的儲水碟乾枯時,就會失去所有的力量,另外,隨著年齡增長,河童也可以具有得知人心的能力。有人說,河童偶爾會幫忙種稻也懂得報恩並喜歡與人角力﹝能贏才有鬼﹞,但也有截然不同的說法,當中印象比較深刻的描述是:河童能以屁飛天﹝驚!﹞,而且不但會吸食牛馬的血,還會將人拉入水中取其蛋蛋為己用...這很可怕。

日本許多地方的河川或池塘都有與河童相關的傳說,也因為各地風俗不同而有不同的稱呼方式,不過那些名稱的意義大多是「住在河裡的小孩」的意思。雖然河童是個廣為人知的日本妖怪,不過據說它們原本來自於中國﹝游泳到日本嗎?﹞

據說從前日本九州的雲仙溫泉附近,曾經出現過一個河童老大,名叫「九千和尚」,經常帶著許多小河童到溫泉鄉去惡作劇,時常將牛馬拉入水中,居民對此感到十分的困擾。這事被一個名叫「赤峰」的和尚知道了以後,決定以佛法擊退它們,雙方的實力相當,所以一直無法分出高下,此時赤峰和尚心生一計,將河童引到熱氣谷去,在熱氣的侵襲下,河童頭上的水盤迅速枯竭,便向赤峰和尚求饒,答應不再作惡了。故事有很多版本但大同小異。