COCO研究院

 找回密碼
 註冊
搜索
查看: 4473|回復: 11

[API] 請教 C# 問題

[複製鏈接]
發表於 13-10-2 21:17 | 顯示全部樓層 |閱讀模式
001.png
這個某期貨商的API
問題1: 以下這段程式大意如何?(大意即可)

002.png
問題2:  為何tbTSymbol.Text[2]的 Text後面還有中括號參數? 是何用途?

Thanks.
 樓主| 發表於 13-10-2 21:37 | 顯示全部樓層
補充說明:
radioButton1 單式
radioButton2複式
tbTStrikePrice.Text履約價
tbTCallPut.Text買權/賣權
tbTSide買/賣
tbTSide2買/賣(第2商品)

發表於 13-10-2 22:27 | 顯示全部樓層
資訊太少,可能是這樣,胡亂回答一下!
問題一:

如果 tbTSymbol.Text[2] = 0 且 tbTSymbol.Text[2] = 1 且...... 的情形下,進入下面情境選擇,
  如果radio按鈕1被按下的情形,
      就......
    不然
      就......
  
問題二:

不知道是不是有類似的文字框,所以[1]...[2]......用以表達不同的文字框。

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 讚,感謝.

查看全部評分

 樓主| 發表於 13-10-2 22:41 | 顯示全部樓層
本帖最後由 googleandy 於 13-10-2 22:46 編輯
rockwell 發表於 13-10-2 22:27
資訊太少,可能是這樣,胡亂回答一下!
問題一:

感謝rockwell大.
tbTSymbol.Text[2] 可能是--- tbTSymbol.Text 從左算起第3個字母.以這個字母來 進一步邏輯判斷.




發表於 13-10-2 23:12 | 顯示全部樓層
從左算起?那為什麼不從右算起?難道 tbT 是語法嗎?


andy大,有興趣念書的話,可以參考「Head.First.C#」中文版,

看完後,應該就比較容易去修改券商的範本了。

曾經讀過30~40頁,感覺書寫得滿易懂的。

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 哈,我用了十餘年VB,不懂C#,請多包涵。.

查看全部評分

發表於 13-10-2 23:29 | 顯示全部樓層
本帖最後由 ambercrystal 於 13-10-2 23:33 編輯

G 大, 這應該是 K 公司 API sample codes?  你再去他們網站下最新版 sample codes 這段應該已經改過了(如下面).  實際上在寫, 只要自己做 symbol 的處理方式, 不需要參考這段的寫法.  我自己的交易策略平台也是用C#寫的, 曾 port 在兩家國內期貨商和一家國外交易商的 API 上, 這家期貨商相較我另一家國內期貨商, 這家報價和國內和外期下單處理非常快速且穩定, 連人在對岸連回台灣都很穩定, 唯一的缺點是沒有國外期貨報價, 需要另外再接報價源來下API外期單.

這家 API 刪除"全部"委托單的方式稍微比較麻煩, 需要將一個個委托單刪除單和成交單放在另一個 dataGridView 來判斷處理, 但刪單處理非常快速, 你如果走完這關, 其他下單處理功能應該就沒啥問題了.  Login 方式不要用範例的那種每次要輸入的方式, 直接叫tfcom.LoginDirect(...) 把參數放在裡面, 就可以按一個鍵就把登入動作完成.  有什麼問題, 需要幫忙請不吝提出.


private void InputChange(object sender, EventArgs e) {
            string symbol = tbTSymbol.Text;
            if (tbTSymbol.Text.Length < 3) return;
            //if (tbTComym.Text.Length < 4) return;
            if (tbTComym.Text.Length < 5) return;

            if (radioButton2.Checked) {
                if (tbTComym2.Text.Length < 4) return;
            }

            //2013.7.5 : 期貨也有短天期,故無法再以第二碼來判別 期/選 ; 改以radiobox判別
            //if ((tbTSymbol.Text[2] == 'O') || (tbTSymbol.Text[2] == '1') || (tbTSymbol.Text[2] == '2') || (tbTSymbol.Text[2] == '4') || (tbTSymbol.Text[2] == '5')) {
              if (rbOpt.Checked) {  //2013.7.5 選擇權
                if (radioButton1.Checked)
                    tb20Code.Text = tfcom.GenOptSymbol(tbTSymbol.Text, tbTComym.Text, tbTStrikePrice.Text, tbTCallPut.Text);
                else
                    tb20Code.Text = tfcom.GenOptDoubleSymbol(tbTSymbol.Text, tbTComym.Text, tbTStrikePrice.Text, tbTCallPut.Text, tbTSide.Text, tbTComym2.Text, tbTStrikePrice2.Text, tbTCallPut2.Text, tbTSide2.Text);
            }
            else  {  //2013.7.5 期貨
                if (radioButton1.Checked)
                    tb20Code.Text = tfcom.GenFutSymbol(tbTSymbol.Text, tbTComym.Text, "");
                else
                    tb20Code.Text = tfcom.GenFutSymbol(tbTSymbol.Text, tbTComym.Text, tbTComym2.Text);
            }
              tbSymbol.Text = tb20Code.Text;
            if ((radioButton2.Checked) && (tb20Code.Text.Length == 0))
                tb20Code.Text = "無此商品組合";
        }

評分

參與人數 5金錢 +9 收起 理由
AGWZ + 2 太強了 為啥麼大家都這麼強.....
rockwell + 2 太強了
winmoney + 2 太強了
googleandy + 2 太強了,讚!
tedwang + 1 太強了

查看全部評分

 樓主| 發表於 13-10-3 00:18 | 顯示全部樓層
ambercrystal 發表於 13-10-2 23:29
G 大, 這應該是 K 公司 API sample codes?  你再去他們網站下最新版 sample codes 這段應該已經改過了(如下 ...

感謝Ambercrystal大詳盡解說。  
我個人用了十餘年的VB,不懂C#。
不過,既然期貨商交給我C#,只好硬著頭皮,生吞活剝去拆解。
我甚至還不知道已改版。

C#和VB的 .net版本都在  .net平台共用同樣的類別庫,
不過語法有相當多的差異,
想要弄通還得花相當多的時間和精神。



評分

參與人數 2金錢 +4 收起 理由
rockwell + 2 G大有VB的基礎,很好跨界的
ambercrystal + 2 利用這個機會把C#熟悉也是不錯的收獲.

查看全部評分

 樓主| 發表於 13-10-3 00:32 | 顯示全部樓層
本帖最後由 googleandy 於 13-10-3 00:59 編輯
rockwell 發表於 13-10-2 23:12
從左算起?那為什麼不從右算起?難道 tbT 是語法嗎?

譬如圖片1紅圈:TXF 從左算起第3個字母是 F ----代表期貨   
                       TXO 從左算起第3個字母是 O ----代選擇權
以上是我猜的,不一定對

評分

參與人數 1金錢 +2 收起 理由
rockwell + 2 G大是對的。我去旁邊畫圈圈

查看全部評分

發表於 13-10-3 06:01 | 顯示全部樓層
本帖最後由 電腦人 於 13-10-3 06:22 編輯

不需要這麼麻煩,不想再學習C#的話

這邊有快速C#轉VB.NET代碼

http://www.developerfusion.com/tools/convert/csharp-to-vb/

該網頁另一頁也有VB.NET TO C#的轉換器

VB.NET與C#沒有誰高階低階,高尚不高尚,好不好用的問題

兩個都是.NET FRAMEWORK平台,都一樣需要轉成中介語言來執行

自己找一個喜歡用的就好

但是如果是要參考別人寫的語法,只能遷就對方的原始碼了

不要去強迫任何人一定要去學會 C# 或 VB.NET,只要是.NET FRAMEWORK內的語言,現在是沒有差別的
愛用C#就用C#,愛用VB.NET就用VB.NET,兩者語法可以互轉沒問題
不過以G大的問題,應該重點在於要到市面上找書去了解C#語法結構才是正途
要解讀人家程式的意圖,需要去徹底了解語法

順勢而為...現在程式界,使用微軟的方案趨勢的確是使用C#的人比較多,若不徹底解決(看懂程式碼架構),永遠只能用猜的
連微軟認證都沒有VB.NET認證了

一直用轉換器去轉也不是好辦法,畢竟這不是一般學校作業寫寫就好,這是跟錢有關的程式....


評分

參與人數 3金錢 +6 收起 理由
AGWZ + 2 太強了 沒錯,跟錢有關...
rockwell + 2 電腦大是高手,太強了
googleandy + 2 按一個讚

查看全部評分

發表於 13-10-3 14:41 | 顯示全部樓層
googleandy大:
tbTSymbol.Text[2] 可能是--- tbTSymbol.Text 從左算起第3個字母

譬如圖片1紅圈:TXF 從左算起第3個字母是 F ----代表期貨   
TXO 從左算起第3個字母是 O ----代選擇權


你說的全部正確
[ ] 是陣列(array), 例如
如果tbTSymbol.Text = "TXF";
那麼 tbTSymbol.Text[0] 表示是 'T'
tbTSymbol.Text[1] 表示是 'X'
tbTSymbol.Text[2] 表示是 'F'

評分

參與人數 2金錢 +4 收起 理由
rockwell + 2 感謝分享,G大是對的,學習了
googleandy + 2 太強了, 感恩!!

查看全部評分

發表於 13-10-4 00:23 | 顯示全部樓層
本帖最後由 randloop 於 13-10-4 00:33 編輯

VB.NET的陣列索引子用小括號(),在C#用中括號
另外radioButton是單選的控制項

以圖片來猜測radioButton1是那個"單"
意思是"單複"選中"單"要做的事,反之則是選中"複"要做的事

另外以下例說明兩個語言最常見的差異

C#
int[] intArray = new int[3];

VB.NET
Dim intArray As Integer() = New Integer(2) {}


建立長度為3之陣列時,兩個語言會有差1的現象
如上 在C# 中括號裡要指定為3    VB.NET在小括號裡要指定為2
我曾在寫某個程式為這個debug了半天 Orz

然後就是有中括號跟小括號的差別

另外就是宣告變數時 型別跟變數名稱之先後順序會不一樣

最後 C#一定要分號結尾

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 按一個讚

查看全部評分

 樓主| 發表於 13-10-5 11:46 | 顯示全部樓層
randloop 發表於 13-10-4 00:23
VB.NET的陣列索引子用小括號(),在C#用中括號
另外radioButton是單選的控制項

.......建立長度為3之陣列時,兩個語言會有差1的現象
如上 在C# 中括號裡要指定為3    VB.NET在小括號裡要指定為2
我曾在寫某個程式為這個debug了半天 ......


感謝 randloop 大分享很寶貴的經驗.

評分

參與人數 1金錢 +2 收起 理由
randloop + 2 按一個讚

查看全部評分

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-25 06:36

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |