2018年3月9日 星期五

探索Facebook 隱藏的秘密: 使用Graph API





R語言

使用 R 語言建立自己的演算法交易事業

https://www.slideshare.net/tw_dsconf/r-71023024




搭配部位控管,使用R語言六個步驟輕鬆上手
https://m.moneydj.com/f1a.aspx?a=3c3bfe06-0843-4613-9617-0a485065a551&c=LIFENEWS

最近給了幾場實做的課程,原本是為了教學R語言與quantmod套件,沒想到隨意開發的結果,這績效竟然也還能看,似乎真的可以拿來上線操作。於是我決定把他寫下來分享,但我也沒實際玩過,所以後過自負。畢竟有些我使用了很有";;致命吸引力";;的馬丁。在風險沒控制好的前提下,這絕對不是一個好的做法!!
 ;;
R語言的好處就是免費,搭配quantmod套件,不用購買行情資料。你只需照著打,複製貼上,三分鐘就做開始玩策略回測。
第一步:下載安裝R語言。可參考第一次使用R語言做回測就上手
當然,對R語言不熟悉的朋友可參考R語言翻轉教室,全部完成保證實力強強滾。
 ;;
第二步:安裝quantmod套件,兩行指令如下:(輸入後按ctrl+a 全選,ctrl+r 執行就對了)
install.packages(";;quantmod";;)
library(qantmod)
 ;;
第三步:下載雅虎股市日K資料
STK=get(getSymbols(";;2330.tw";;))  ##下載台積電歷史日K資料
STK=as.matrix(to.weekly(STK))  ##將日K資料轉為週K資料
chartSeries(STK)  ##畫出台積電歷史周K
 ;;
第四步:設定參數與損益向量
profit=setNames(numeric(length(rownames(STK))), rownames(STK))
##設定profit向量紀錄每周損益
 ;;
lastC=STK[1,4]  ##先記錄第一週的收盤價
 ;;
資料下載ready後,便可開始做回測。我們進場依據為為每周第一天,開低買進台積電一張,週五收盤結束部位。因此實際的行情回測需從第二週開始,第一週只能記錄收盤價:
 ;;
for (m in rownames(STK)[-1]) {  ##開始以每週為單位跑迴圈
 ;;
fee=ceiling(STK[m,1]*1000*(0.001425*2*0.5+0.003))  
 ;;##設定手續費與稅(假設手續費打5折)
 ;;
if(STK[m,1]<;;=lastC){profit[m]=(STK[m,4]-STK[m,1])*1000-fee}  ##開低買進的損益
 ;;
lastC=STK[m,4]  ##紀錄本周收盤價,做為下週判斷開高開低的依據
}
 ;;
第五步:檢查策略程式碼的回測結果是否正確?
head(cbind(STK,profit),20)
## 可觀察前20筆的績效,是否確實執行策略
 ;;
第六步: 畫出績效曲線圖
plot(cumsum(profit),type=";;l";;,col=";;red";;,lwd=2)
x

由於雅虎股市下載的資料從2007-01-05到現在,可以發現這將近10年的績效沒有很好,扣掉手續費後賺賺賠賠。別灰心,我們先使出大絕招: 馬丁格爾。(註:這是風險很高的做法,哥有練過,只是為了示範教學別亂用。)

使用馬丁格爾:上次輸,這次加倍壓;上次贏,這次壓1張。

績效瞬間變的還不差,這十年來來賺了將近30萬,最大壓的張數為64張,也就是連輸6次。

當然,馬丁的風險絕對很大,過去成功更不代表未來,我們當然不可能實際上線這樣做。來看保險一點的類馬丁。

等差類馬丁:上次輸,這次多壓1張;上次贏,這次壓1張。


雖然等差類馬丁賺得更少,但似乎更穩定了。這十年來賺了將近20萬,但最大張數只壓了7張。這樣的風險一般民眾應該還可接受。

當然,上面還是過於激進的做法。我們用一個較為保守的方法:上次輸,這次壓2張;上次贏,這次壓1張。
 ;;
 ;;
 ;;
左圖是原始策略,右圖是資金控管後的損益。總獲利達到NT 121,735,最大回檔為NT 34,289。且最大張數只有2張。當然,我們可以把上面的策略弄得更完美,舉例來說,只有上次輸,這次才會壓1張。
 ;;

很明顯的,綠色的回檔被有效控制住,總績效雖然只有 NT 108,757,但回檔只有NT 10,636。這個策略,再搭配部分分數資金控管法,我想就是一個可以上線的策略了。週一買,週五賣,中間過程請專心上班不用盯盤,還蠻適合上班族的朋友的。

另外申明,已上皆為教學內容,如果你覺得合理可上場廝殺,後果就要自行負責唷。當然你也可以測其他股票,其他策略,但最終還是那句話,交易的資金控管還是最重要的!

上場前請先規劃好想清楚,再來就是徹底執行瞜!! 祝大家操作順利!!
 ;;


R_Repository

https://github.com/kaiyu33/R_Repository

第一次使用R語言做回測:六分鐘,就上手!




107年底Kotlin將取代Java成為Android平台上最受歡迎的語言

https://www.ithome.com.tw/news/117493

行動程式開發平台Realm去年第四季針對行動開發人員所使用的語言進行研究,並於上周發表研究成果,顯示目前Android平台上最受歡迎的行動開發語言為Java,但Kotlin可望於明年底超越Java。
Realm指出,Kotlin於Android平台上的發展路線類似iOS上的Swift。蘋果在2014年6月發表了可用來撰寫支援macOS、iOS、watchOS、tvOS及Linux等平台的Swift語言,花了14個月便取代Objective-C成為iOS平台上最受歡迎的語言。
而Kotlin則是在今年5月被Google納入Android Studio,於Android平台上提供Kotlin的一級支援。有別於Swift是由蘋果自行開發,Kotlin則是源自俄國JetBrains開發團隊的開源專案,它是一個靜態程式語言,並能與Java程式碼互動,允許開發人員於既有的專案中增加Kotlin程式碼。
Realm表示,在被納入Android Studio之前,Kotlin就是一個頗受歡迎的語言,現在它更將改變整個Android生態體系,估計到明年12月採用Kotlin開發Android程式的比例就會超過Java。
Realm認為,Android平台上的Java將日益枯萎,不只是因為有愈來愈多的Kotlin開發人員,還因為有許多開發人員正把程式從Java改為Kotlin,在今年5月之前以Java所建置的Android程式中,現在已有20%改採Kotlin,那些缺乏Kotlin技能的開發人員很快就會被視為食古不化的恐龍。

Kotlin Tutorial(1)Hello! Kotlin!



另一種JVM程式語言

如果你是一個Android或Java技術開發人員,Groovy、Scala、JRuby或Jython這些JVM Language,或許曾經聽過、看過,甚至已經研究過,不過你可能最後還是回到Java程式語言的懷抱。
Java程式設計語言已經二十幾歲了,如果有人問我「Java是不是一種「好」程式語言?」,我都會這麼回答「只要是可以幫我付帳單和貸款的,都是一種「好」技術」,算是巧妙的迴避問題。因為如果叫我想五個對於Java程式設計語言的形容詞,其中會有三個是比較負面的。如果針對具備三年以上Java程式設計師進行問卷調查,同樣請大家想五個形容詞,不知道會有什麼樣的結果。
Kotlin是一個比較新的JVM程式語言,它是在2011年7月由JetBrains發表的專案,JetBrains是開發工具IntelliJ IDEA的開發商,Android Studio就是以IntelliJ IDEA為基礎的Android官方開發工具。Kotlin v1.0在2016年2月發表,是第一個由JetBrains發佈的Kotlin正式版本。
對我來說,Kotlin跟其它JVM程式語言最大的差異,倒不是架構或語法,而是2017年5月的Google開發人員大會,發佈Android支援Kotlin為官方的程式設計語言。從Android Studio 3開始,開發人員可以直接使用Kotlin開發Android App。

Kotlin FAQ

已經熟悉Java程式設計語言

  • 我為什麼要從Java轉換成Kotlin?
    這個問題的另外一面,可能是「我花了幾年的時間才完全熟悉Java,現在又要我學另一種程式語言,你最好是給我一個非常好、而且很明確的道理」。雖然這是一個很嚴肅的問題,不過我只能提供自己的幾個想法給你參考:
    • 不論是以開發人員或講師的角色來說,Java技術的確是不算簡單的
    • 那Kotlin比Java簡單嗎?對我來說,是的
    • 同樣功能的程式碼,Kotlin比Java的程式碼清爽多了(官方說最多可以減量40%)
    • Kotlin同樣是在JVM運作,Java在這方面的特性Kotlin也有
  • Kotlin可以完全取代Java?
    • 開發Android App:是的
    • 開發Java應用程式,例如WEB、JavaFX:可以(沒有「是的」那麼肯定)
    • Kotlin官方網站說未來還會支援嵌入式、MacOS、iOS
  • Kotlin可以和Java一起運作?
    是的。Kotlin可以使用Java程式碼,Java也可以使用Kotlin程式碼。
  • Kotlin和Java的語法很不一樣嗎?
    是的。不一樣的程度可以想像成長得有點像的父子或母女。(這其實是廢話,這樣的形容幾乎可以套用在所有不同的程式語言)
  • Kotlin也有Java 8的Lambda(functional programming)?
    有。
  • Kotlin採用哪一種授權方式?
    Apache Software License, Version 2.0
  • 需要花費多少時間學習Kotlin?
    如果選擇一個好的教材,可以很容易把你在Java累積的技能快速轉換到Kotlin。(廣告:例如這個系列專欄就是好的教材,未來可能會出版電子書或實體書)

還不認識Java程式設計語言

  • 我想要學習開發Android App,那我應該要先學Java還是Kotlin?
    開發Android App使用Java或Kotlin都可以,都是官方正式支援的程式設計語言。你可以從幾個想法去選擇:
    • 想要比較快速進入開發Android App的階段:選擇Kotlin
    • 以開發Android App為主要的學習目的:選擇Kotlin
    • 不知道該怎麼選擇,也沒有任何想法:選擇Kotlin
  • Java跟Kotlin哪一個比較容易學習?
    我覺得Kotlin比Java容易學習。我的說法應該算是有說服力的,畢竟我已經當了十年以上的講師,而且以Java與Android課程為主。
  • 聽說學會Java以後可以寫很多種程式,Kotlin也可以嗎?
    Java程式設計語言可以開發網頁、嵌入式、桌面與Android應用程式,Kotlin也可以。
  • Kotlin程式設計語言有哪些書和學習資源?
    目前只有少數幾本英文書,網路的學習資源以Kotlin官方網站為主,也是英文。(廣告:這個系列專欄是學習Kotlin不錯的資源,未來可能會出版電子書或實體書)
  • 目前Android App的範例與資源都是用Java寫的,Kotlin也可以使用嗎?
    在Android App專案裡面,Kotlin和Java程式碼可以一起使用,也可以互相使用對方寫的程式碼。

建立Kotlin開發環境

開發Kotlin應用程式需要安裝Java SE JDK與開發工具,Kotlin開發環境有下面幾種選擇:
  • JetBrains的IntelliJ IDEA
  • Eclipse與Kotlin Plugin
  • 在終端機編譯與執行
  • 使用建置工具,包含常見的Ant、Maven與Gradle
這裡使用的開發工具是IntelliJ IDEA Community,其它方式請參考Kotlin官方網站的說明。

下載與安裝JDK

Kotlin需要Java SE JDK 1.6或更新的版本,如果你的電腦還沒有安裝Java SE JDK,依照下列的步驟下載與安裝,或是參考後面的示範影片:
  1. 開啟瀏覽器,在網址列輸入這個網址http://www.oracle.com/
  2. 將滑鼠游標移到「Downloads」,選擇左側的「Java Developers」。
  3. 選擇「JDK」的「DOWNLOAD」的下載圖示。
  4. 進入下載JDK的網頁以後,選擇「Accept License Agreement」,依照你的作業系統版本選擇下載的連結,如果是32位元就選擇「Windows x86」,64位元的話選擇「Windows x64」。
  5. 儲存下載的檔案,下載完成後執行這個檔案開始安裝的步驟,建議使用預設的安裝路徑,在後續的安裝過程中全部選擇「Next >」。
  6. 在完成安裝的視窗選擇「Close」。
詳細的操作步驟可以參考下面的示範影片:

下載與安裝IntelliJ IDEA Community

JetBrains提供免費開放版本的IntelliJ IDEA Community,它完整支援Kotlin程式設計語言。依照下面的步驟執行下載與安裝的工作:
  1. 開啟瀏覽器,在網址列輸入這個網址https://www.jetbrains.com/idea/download/
  2. 選擇「Community」的「DOWNLOAD」,儲存與執行下載的安裝程式:
    kt_01_01
  3. 啟動安裝程式後,在歡迎畫面選擇「Next>」。
  4. 在選擇安裝位置(Choose Install Location)畫面選擇「Next>」。
  5. 在安裝選項(Installation Options)畫面,依照電腦的作業系統,勾選「32-bit launcher」或「64-bit launcher」, 最後選擇「Next>」:
    kt_01_02
  6. 在選擇開始功能表(Choose Start Menu Folder)畫面選擇「Install」開始安裝。
  7. 在完成安裝的畫面,勾選「Run IntelliJ IDEA Community Edition」後選擇「Finish」:
    kt_01_03
  8. 安裝程式自動啟動IntelliJ IDEA Community,第一次啟動後在「Complete Installation」對話框選擇「Do not import settings」,最後選擇「OK」:
    kt_01_04
  9. 在「Customize IntelliJ IDEA」畫面,選擇開發工具的樣式為「IntelliJ」或「Darcula」,最後選擇「Skil All and Set Defaults」:
    kt_01_05
  10. 出現IntelliJ IDEA的主畫面,完成安裝與初始設定:
    kt_01_06

Hello World!

  1. 在IntelliJ IDEA的主畫面選擇「Create New Project」:
    kt_01_07
  2. 在「New Project」視窗選擇「Java」後,選擇右上角的「New…」:
    kt_01_08
  3. 在「Select Home Directory for JDK」視窗,選擇JDK的安裝資料夾後選擇「OK」:
    kt_01_09
  4. 回到「New Project」視窗,Project SDK已經設定為上一步驟的選擇:
    kt_01_10
  5. 在「New Project」視窗的「Additional Libraries and Frameworks」勾選「Kotlin(Java)」後選擇「Next」:
    kt_01_11
  6. 在「Project name」輸入專案名稱,例如「HelloKotlin」,最後選擇「Finish」。
  7. 在出現「Tip of the Day」對話框,取消「Show Tips on Startup」勾選,再選擇「Close」,以後啟動就不會再出現這個對話框。
  8. 第一次建立Kotlin專案會花費一些時間執行初始化的工作。
  9. 完成初始化工作後,在專案的「src」目錄按滑鼠右鍵,選擇「New -> Kotlin File/Class」:
    kt_01_12
  10. 在「New Kotlin file/class」對話框的「Name:」輸入程式碼檔案名稱,例如「HelloWorld」,最後選擇「OK」。
  11. 在新建立的程式碼檔案輸入下面的內容:
    1
    2
    3
    fun main(args: Array) {
        println("Hello World!")
    }
  12. 用滑鼠游標選擇Kotlin圖示後選擇「Run 'HelloWorld.kt'」,也可以使用快速鍵「Ctrl+Shift+F10」:
    kt_01_13
  13. 執行程式以後在畫面下方顯示「Hello World!」:
    kt_01_14

第一個Kotlin程式碼FAQ

  • 不需要宣告類別?
    是的。
  • 「fun」好像是用來宣告main方法?
    是的。Kotlin程式的進入點(Java的main方法),是一個名稱為「main」,參數為「Array、字串陣列」的函式。
  • println為什麼沒有System.out?
    其實println是Kotlin定義在Console.kt裡面的函式。
  • 敘述的最後面不需要分號(;)?
    是的。你也可以加上分號,不過那是多餘的。如果需要在一行執行多個敘述,可以使用分號隔開。例如:
    1
    2
    3
    fun main(args: Array) {
        println("One"); println("Two")
    }

下一步

想要趕快開始寫Kotlin程式?在安裝好開發環境以後,接下來的「10分鐘認識Kotlin」,使用精心挑選的主題,讓你快速認識Kotlin的基本精神。
相關的檔案都可以在GitHub瀏覽與下載。

PHP Laravel 開發入門

source: http://www.codedata.com.tw/uncategorized/php-laravel-dev-tutorial-1st-class-getting-started

簡介

Laravel是近年來相當熱門的PHP框架,雖然PHP是容易學習與撰寫的程式語言,但當網站專案日漸龐大時,沒有一套規範來管理這些程式碼,不僅造成錯誤叢生、維護困難,更造成開發人員的負擔。而眾多的PHP框架也為了解決這些問題如雨後春筍般林立,至於為什麼選擇Laravel的原因為何?主要是少了許多繁瑣的設定,而框架的觀念也淺顯易懂,更可以搭配命令列指令,加快開發的速度,也因此獲得許多開發者的青睬,在最近幾年的評比中都名列前矛。引述Laravel 台灣的Laravel 哲學
Laravel 是一套富有表達性且具有簡潔語法的網頁應用程式框架。我們認為開發過程應該是愉悅且有創造性的體驗。Laravel 努力減少開發過程中的不便,因此我們提供了驗證(authentication)、路由(routing)、sessions、快取(caching) 等開發過程中經常用到的工具或功能。
Laravel 目標是給開發者創造一個愉快的開發過程,並且不犧牲應用程式的功能性。快樂的開發者才能創造最棒的原始碼。為了這個目的,我們竭取了各框架的優點集中到 Laravel 中,這些框架甚至是基於 Ruby on Rails、ASP.NET MVC 和 Sinatra 等開發語言或工具。
Laravel 是易於理解且強大的,它提供了強大的工具來開發大型、穩健的應用程式。傑出的 IoC、資料庫遷移工具和緊密集成的單元測試,這些工具賦予你構建任何應用程式的能力。
在這個單元中,會教導讀者如何在Windows環境中開發Laravel程式。

系統需求

由於Laravel會使用到許多PHP的特殊功能,甚至會使用到新的PHP版本中特性,所以在學習Laravel前需注意相關設定及環境需求。
以上需求為Laravel 5.3
  • PHP >= 5.6.4
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension
另外還需要安裝Composer這個工具,Composer是一個PHP依賴性管理工具。透過宣告專案需要的依賴函式庫,能在專案中安裝/管理/更新這些套件。

安裝

一、安裝Apache、MySQL、PHP環境
為了讓讀者能快速的撰寫程式,作者在Github上已經整理出一個適合開發Laravel的XAMPP環境。我們進到 https://github.com/superlevin/xamppforlaravel 點選 Clone or Download 後按 Download ZIP。

下載後,解壓縮到d:\xampp就可以運作了。執行 xampp-control 後,開啟相關服務即可。

二、安裝 composer,到 https://getcomposer.org/download/ 下載Composer-Setup.exe

安裝時,將PHP路徑指向D:\xampp\php.exe

三、進入終端機模式(開始→執行  cmd),然後設定php到系統變數
set PATH=%PATH%;d:\xampp\php
四、新增Laravel專案,進入終端機模式(開始→執行  cmd)
進入d:\xampp\htdocs目錄,輸入 composer create-project laravel/laravel blog –prefer-dist

然後可以去泡杯咖啡小憩片刻後,最後看到 Application key就代表完成了!

五、接著來看看Laravel安裝完的初始畫面。一種是透過xampp,在網址列打上 http://localhost:8899/blog/public\ 就可以看到頁面;第二種呢,直接透過命令列模式,切換到 xampp\htdocs\blog下面輸入 php artisan serve,接著到 http://localhost:8000/就可以看到畫面。我們下次見!


PHP Laravel 開發入門(二) – 設置與目錄架構



SQL Online



https://www.tutorialspoint.com/execute_sql_online.php

http://sqlfiddle.com/#!9/0a1da8/1



https://www.mis.nsysu.edu.tw/db-book/PDF/Ch7.pdf