2016年12月29日 星期四

操盤人學C# (4) 處理期交所rpt檔

[前言]

        要做程式回測一開始需要的是歷史資料,歷史資料錯那接下來什麼都免談了。目前市面上較易取得的資料為分鐘資料,但如果將Multicharts的set系列指令用在分鐘資料上會出現回測不準確問題。(參考:http://www.yctseng.net/2013/02/setpercenttrailing.html)
        QT假設期交所提供的歷史資料無誤,那最好的tick資料當然是從期交所提供的資料轉出。期交所提供的tick資料是以.rpt檔格式提供(近期已有提供.csv檔),本篇QT將教大家如何處理rpt檔。

[程式使用]

1. 開新專案,輸入下方程式碼


2. 將範例rpt檔(2016/12/27資料)放入D槽,檔案位置:https://drive.google.com/open?id=0BwqcpF06v4J4SzNyRnM4TFh1TDg
3. 執行程式碼,輸出結果「Result.txt」會放在D槽中



[觀念解釋]

<.rpt格式>

其實期交所提供的rpt檔是一種文字檔格式,只要把他當成文字檔處理即可。

<文字讀取物件>

我們需要運用StreamReader這個物件來讀取文字檔。
還記得第二課的物件概念嗎?
StreamReader sr = new StreamReader(@"D:\Daily_2016_12_27.rpt");
這邊的StreamReader就像是我們當初創造一個操盤人一樣,但是我們這次創造的是一個「文字讀取人」。
[語法補給:建立某些物件的時候可以傳進參數,這邊的檔案路徑就是參數]
string line = sr.ReadLine();
而這行就像我們當初叫操盤人買期貨、買股票一樣,但是這次我們是叫這個文字讀取人「讀取一行文字檔」並傳給參數line,會寫Multicharts的朋友應該可以輕鬆理解。

<分割文字檔>

string[] strs = line.Split(',');
這行是將rpt檔以逗號分割,可以參考系列課程第三課。
if (strs[1].Trim() == "TX" && strs[2].Trim()=="201701")
判斷要的商品跟月份,這邊假設是要台指期、到期月份為2017/01的資料。
[語法補給:Multicharts的and=C#的&]

<文字寫入物件>

StreamWriter sw = new StreamWriter(@"D:\Result.txt");
觀念等同文字讀取物件,但這次建立的是文字寫入物件
sw.WriteLine(line);
運用文字寫入物件將文字檔寫入

[ 該學會什麼 ]

這是本系列課程第一個應用實例,大家應該稍微瞭解學習正統程式語言的用意在哪了。
到目前為止,你應該要會一次處理一個rpt檔,並且你可以取得這個rpt檔的任何一個商品,任何一個月份的資料,這個檔案換成選擇權rpt檔,你也應該要會處理。

[ 延伸提示 ]

本篇教的是如何處理單一文字檔,如何處理多個文字檔,請搜尋「Directory」物件、「foreach」。
本篇並沒有將輸出做處理,所以「Result.txt」不能直接被Multicharts使用,如何才能讓「Result.txt」被Multicharts使用,請參考系列課程第三課。

[ 工商時間 ]

QT會盡量在網站上寫上大部分程式碼及觀念,如果還是有不懂,可以參考實體課程
http://quanttrade168.blogspot.tw/2016/12/cmulticharts.html

適合操盤人的線上程式語法班(C#、Multicharts)

QUANT TRADE 團隊推出C#、Multicharts程式語法班
本系列課程著重教你釣魚;而不是給你魚吃
CP值最高的程式交易語法訓練就在 QUANT TRADE

[ 操盤人學C#線上課程 ]

=============================
課程費用:
20,000 TWD

課程時數:
10 小時

適用對象:
1. 已經有任一程式語言基礎(Multicharts可)
2. 對操盤有興趣且有基礎概念

課程內容:

<程式語法>

C#基礎語法
類別&物件
陣列&串列
例外處理
檔案處理

<開發實做>

期交所rpt檔處理

=============================


[ 初心者學Multicharts實體課程]

=============================
課程費用:
10,000 TWD

課程時數:
5 小時

適用對象:
1. 程式交易初學者

課程內容:

<觀念建立>

認識程式交易
金融商品基礎
程式開發流程

<程式語法>

Multicharts語法
Multicharts函數
Multicharts進階語法(視學習狀況)

<開發實做>

寫出第一支當沖策略
寫出第一支留倉策略
寫出第一支價差策略
=============================

※ 本系列課程使用雲端會議軟體「Zoom」為上課工具
※ 課程開始時段為每月開班,視報名情況可能一人至多人同時上課
※ 課程開始前會事先協調學員上課時間
※ 報名、其他問題請以下方任一方式聯絡
Line帳號:@ayl6252m 
e-mail:quanttrader168@gmail.com

2016年12月28日 星期三

操盤人學C# (3) 學會使用陣列

陣列觀念 ]

陣列也是Multicharts使用者較為不熟悉的(雖然MC有陣列功能),我們可以把陣列想像成一個大箱子,其中有很多小箱子。
Multicharts來說,我可以把開、高、低、收分別存進四個不同變數



或是把他們全部存到一個陣列變數裡面



這個ToDay_Bar陣列變數就像一個箱子,他有四個空間(*註1),要放東西進空間一的時候就 ToDay_Bar[1]=XXX,要從空間一拿東西出來的時候就 XXX=ToDay_Bar[1],非常簡單。

*註1:其實是五個空間(包括0)

為什麼要學會陣列? ]

1.      方便,如果你有一個函數需要今天的開、高、低、收四個參數,你可以分別傳進四個參數,也可以直接傳入一個陣列。
2.      可以使用像forforeach等函數
3.      有時候內建函數就是回傳陣列給你,你非會用不可

[ C#實例 ]

以操盤的例子做個總結吧,你在網路上抓到2016/12/28的台指期近月開高低收文字檔為「9110,9213,9105,9211」,用眼睛看當然很簡單,但你在程式中要怎麼知道這天最低價是多少?
答案:





2016年12月27日 星期二

操盤人學C# (2) 什麼是物件

[前言]

Multicharts的使用者轉換成C#最不熟的應該是所謂的「物件」概念,以下教學將解釋C#的物件、欄位、方法。

[程式使用]

1. 新增專案「WhatIsClass
2. 寫入下列程式碼


[觀念解釋]

<物件>

所謂的「物件」你可以想像成他是一樣東西的「抽象主體」,
例如「操盤人」,這個世界上有很多操盤人。
class Trader 即是在定義操盤人這個物件
[語法補給:在C#中大括號{}定義了物件、方法的範圍]

<物件欄位>

那要如何區分誰是誰?需要用到物件內的「欄位」。
public string name 定義了操盤人這個物件裡面有name這個欄位可以使用。
 [語法補給:public代表name這個欄位大家都可以使用]
 [語法補給:string代表name這個欄位的型態是字串]

<物件方法>

我們創造操盤人,當然也要給他們操盤的能力,這時候我們要定義Trader物件裡面的「方法」。
public void BuyStock() 定義了操盤人有買股票的能力
public void BuyFutures() 定義了操盤人有買期貨的能力
 [語法補給:void代表這兩個方法沒有回傳值]
這部分就像Multicharts的自定義函數一樣,差別在於,這個自定義函數只有Trader物件能夠使用。

!!<建立、使用物件>!!

現在把自己想像成造物主,你要創造一個虛擬的程式世界,
這個世界需要一步一步創造,而入口就是Main方法。
進入虛擬世界後,我用兩行程式碼即可以在這個世界中創造兩個「不同」的操盤人(物件)

Trader soros = new Trader();           
Trader buffett = new Trader();
 [語法補給:創造新物件用new]

這就像我是這個程式世界的造物主,我雖然創造了兩個操盤人,我知道他們是誰,但是他們不知道他們自己是誰,我只好給他們名字。

soros.name = "索羅斯";
buffett.name = "巴菲特";
 [語法補給:使用欄位 => 物件.欄位]

這樣,soros這個Trader物件有了自己的名字"索羅斯"buffett也有了自己的名字"巴菲特"

而我這個造物主,我想要索羅斯買點期貨、股票,巴菲特買股票就好

soros.BuyFutures(); //命令索羅斯買期貨
soros.BuyStock(); //命令索羅斯買股票
buffett.BuyStock(); //命令巴菲特買股票
 [語法補給:使用方法(method、函式) => 物件.方法()]

執行開始(F5),看看自己創造的程式世界怎麼運作吧


[該學會什麼]

到這個階段,你不需要學會自己定義物件,但要會「建立」跟「使用」物件。
例如上方程式碼,需要知道「物件.欄位」跟「物件.方法()」是什麼意思,有任何不懂的地方,歡迎留言提問。

操盤人學C# (1) 開始使用C#

相信很多對金融市場有興趣的人聽過「程式交易」,而第一個(或許也是唯一一個)用來撰寫交易策略的工具就是Multicharts,Multicharts的確是一個非常方便的回測&即時交易工具,但是在諸如整理資料、統計、選擇權策略...等等的需求上,Multicharts可以說完全達不到要求。QT準備了一系列的操盤人學程式教學,讓已經有Multicharts底子的朋友無痛學習C#。
[開發工具]
C#的開發工具為微軟的「Visual Studio」,Visual Studio有非常多的版本,一般開發者選擇免費的Community版即可。
「Microsoft Visual Studio Community 2015」下載網址為:https://www.microsoft.com/zh-tw/download/details.aspx?id=48146

[動手寫程式]
打開Visual Studio後,選擇新增專案,並選擇Visual C#的「主控台應用程式」


輸入兩行程式碼
Console.WriteLine("Hello World!");
Console.ReadLine();
按下開始(F5)即完成C#的第一隻程式了

[程式碼解釋]

!重要觀念:在C#中「//」後面的文字代表「註解」

//利用了哪些函式庫
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//命名空間:一般小型程式不需理會此項
namespace ConsoleApplication1
{
    //類別:日後解釋,此處只需要知道,在C#中所有的程式一定都在某個類別中
    class Program
    {
        //程式起始點
        static void Main(string[] args)
        {
            //輸出文字
            Console.WriteLine("Hello World!");
            //等待使用者輸入文字,執行完這個程式程式會直接結束
            Console.ReadLine();
        }
    }
}