小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

從一無所知開始學(xué)習(xí)交易開拓者(TB)期貨程序化交易編程

 家心何如 2017-10-09

 

經(jīng)常會(huì)看到很多朋友問:幫我寫個(gè)公式怎么樣啊?幫我把某個(gè)公式改成TB的怎么樣啊?

我想出現(xiàn)這種情況的原因有兩種:

一是真的不會(huì),畢竟做期貨的會(huì)編程的不多;

二是自己如果多花點(diǎn)時(shí)間的話是弄的出來,但是有點(diǎn)懶;

 

我想無論是哪種原因,都應(yīng)該好好的學(xué)習(xí)下TB,因?yàn)檎嬲哪愕慕灰姿悸分挥心阕约翰徘宄?/span>

而且也只有你自己去把你的交易思路用TB表現(xiàn)出來你才能更清楚的知道你的交易思維中有何缺點(diǎn)

 

但是編程不是一件很容易的事情,當(dāng)然,如果您入門了,你會(huì)發(fā)覺TB編程其實(shí)和泡妞一樣的簡(jiǎn)單,就看你敢不敢下手了

所以本文僅是寫給完全不懂編程的朋友的,僅是最基本的入門資料,如果您是高手,請(qǐng)忽略此文,以免耽誤您的時(shí)間.

我先不說那些專業(yè)術(shù)語,什么變量,函數(shù)和語法的,我們先不管他,以免看的頭暈.
我想先說說在TB中代碼的執(zhí)行順序,也就是說在TBK線圖(TBK線叫做Bar)里面你寫的公式或者指標(biāo)是如何得到執(zhí)行的;
我想這個(gè)東西是最重要而且也是最好理解的.
在其他的期貨軟件比如文華飛狐一類,我們是無法知道你寫的公式是如何執(zhí)行的,甚至我們不知道我們寫出來的公式是不是真的
就體現(xiàn)出了我們的思想,因?yàn)槟銓懙墓交蛘咧笜?biāo)是被這些軟件在幕后進(jìn)行處理的,是黑箱操作!
TB不同,我們能夠清楚的看到你寫的代碼在任意一根K線上是如何得到執(zhí)行的!!!!
好了,先說說在TB里面代碼是如何得到執(zhí)行的.
1,
代碼從第一根K線開始執(zhí)行,一直到最后一根K;
2,
在每一根K線上,代碼都是從第一行開始執(zhí)行,一直到最后一行;

明白了吧,是不是很簡(jiǎn)單,我們先看一個(gè)小例子,如果您還不明白,那只能說我完全沒有任何能力寫這文章,您就板磚吧
我們就寫個(gè)輸出每日的收盤價(jià)的例子;
打開TB,在左邊的TB公式里面,點(diǎn)擊新建技術(shù)指標(biāo),新建其他的也沒有關(guān)系,然后在出來的對(duì)話框的簡(jiǎn)稱里面填入名字,記住,這個(gè)名字只能是E文哦
在名字里面填入你喜歡的名字,點(diǎn)確定就OK了啊
然后在出來的公式編輯器里面輸入
Begin
End
注意,除了參數(shù)和變量定義外,所有的代碼都必須包含在BeginEnd之間
意思很簡(jiǎn)單
就是Begin,你的代碼就開始執(zhí)行了,End,你的代碼就執(zhí)行完畢拉
呵呵
我們?cè)僭?span lang="EN-US" xml:lang="EN-US">Begin
End之間輸入一些代碼,完整的就是:
Begin
  FileAppend("c:\\a.log",Text(Year)+"
"+Text(Month)+""+Text(Day)+"日的收盤價(jià)等于");
  FileAppend("C:\\a.log",Text(Close));
End
我們?cè)僬f說這兩行代碼是什么意思
File
就是文件,Append就是添加,現(xiàn)在明白了吧
FileAppend
就是添加一個(gè)文件,文件名是什么呢?就是你后面寫的a.log,這個(gè)文件的路徑在哪里呢?就是c:\\a.log里面的C,且在這個(gè)文件里面添加一行東西,
這行東西的內(nèi)容就是你后面所寫的Text(Year)+""+Text(Month)+""+Text(Day)+"日的收盤價(jià)等于"
當(dāng)然,如果這個(gè)文件已經(jīng)存在,他就不會(huì)添加文件了,僅僅在這個(gè)文件的后面添加一行上面你寫的內(nèi)容
好了,再看看Text,Text的意思就是把那些不是字符串的東西如數(shù)字啊,等變成字符串.Year,Month,Day就代表了
正在執(zhí)行你寫的代碼的那一根K線的年,,,年月日是數(shù)字,我們當(dāng)然要用Text把它搞成字符串,不然Windows會(huì)告訴你你犯了錯(cuò)誤的
Close
的意思我不說大家也明白了吧,就是代表了當(dāng)前正在執(zhí)行你的代碼的那根K線的收盤價(jià)啊,呵呵,如果代碼執(zhí)行到最后的那根K
且行情正在走動(dòng)的時(shí)候Close代表的就是現(xiàn)在的最新價(jià)了咯.
好了
我們點(diǎn)公式編輯器上面的工具欄的第五個(gè)按鈕(打勾的那個(gè)東西),校驗(yàn)保存公式,稍微等一下,OK
我們?cè)诨氐?span lang="EN-US" xml:lang="EN-US">K線圖里面,TBK線圖叫做超級(jí)圖表,呵呵,有點(diǎn)不習(xí)慣
K線圖里面右鍵,選擇商品設(shè)置,然后吧里面的樣本數(shù)由默認(rèn)的300改成5,意思是讓在超級(jí)圖表里面僅僅顯示5K,當(dāng)然,你可以搞成任意你喜歡的數(shù)字
你甚至可以從任意一個(gè)你喜歡的時(shí)間開始顯示K,我們選擇5K線僅僅是為了測(cè)試的方便
點(diǎn)確定后,你就看到在K線圖里面只顯示了5K,所以我們的代碼也僅僅只在這5K線上執(zhí)行了
當(dāng)然現(xiàn)在代碼還不能被執(zhí)行,因?yàn)槲覀儸F(xiàn)在還需要把我們剛剛所寫的那個(gè)指標(biāo)加到K線圖上面才能被執(zhí)行的


我們?cè)僭诔?jí)圖表里面右鍵,選擇插入技術(shù)分析,在出來的列表里面選擇我們剛剛所寫的技術(shù)指標(biāo),然后確定就OKl
暈死,現(xiàn)在怎么在K線圖上沒有任何變化啊?
呵呵
我們上面說了,我們這個(gè)例子僅僅是把每日的收盤價(jià)寫到文件里面去啊,那么我們找一找文件在什么地方咯?
FileAppend("c:\\a.log",
很明顯,文件是在c盤的,文件的名字是a.log
好了,我們到c盤找到a.log文件,雙擊打開,我們就會(huì)看到下面的內(nèi)容:

2007年9月24的收盤價(jià)等于
67280
2007年9月25的收盤價(jià)等于
67800
2007年9月26的收盤價(jià)等于
67160
2007年9月27的收盤價(jià)等于
67300
2007年9月28的收盤價(jià)等于
68020

我們現(xiàn)在來分析下:
首先你寫的代碼在第一根K線上執(zhí)行,先執(zhí)行第一行代碼:
FileAppend("c:\\a.log",Text(Year)+"
"+Text(Month)+""+Text(Day)+"日的收盤價(jià)等于");
這行代碼就輸出了第一根K線的年,,,就在a.log文件里輸出成"2007年9月24的收盤價(jià)等于"
然后執(zhí)行第二行代碼:
FileAppend("C:\\a.log",Text(Close));
折行代碼把第一根K線的收盤價(jià)輸出到a.log文件里面,于是就輸出了"67280"
好了,代碼在第一根K線上執(zhí)行完畢,于是再轉(zhuǎn)到第二根K,再執(zhí)行第一行代碼,再執(zhí)行第二行代碼
.........
好了,現(xiàn)在代碼在第二根,第三根,第四根K線上執(zhí)行完畢,于是轉(zhuǎn)到第五根也就是最后一根K線上執(zhí)行第一行代碼
再執(zhí)行第二行代碼
到此為止,所有的代碼在所有的K線上執(zhí)行完畢了,圓滿的完成了黨和祖國(guó)賦予他的神圣使命,于是也就有了我們上面所看到的結(jié)果:

2007年9月24的收盤價(jià)等于
67280
2007年9月25的收盤價(jià)等于
67800
2007年9月26的收盤價(jià)等于
67160
2007年9月27的收盤價(jià)等于
67300
2007年9月28的收盤價(jià)等于
68020

OK,
下回繼續(xù)

我一直非常愿意幫助客戶們解答在編程中的難點(diǎn),但是卻不大愿意幫助客戶寫完整的公式策略。這其中有三個(gè)原因:
1
、別人寫的交易策略,你難以調(diào)整它。
據(jù)統(tǒng)計(jì),90%以上的交易策略會(huì)在2年半之內(nèi)由于種種原因失效或者效率降低。通常的做法是一個(gè)季度左右,交易員就需要微調(diào)其策略,調(diào)整參數(shù)或改動(dòng)某些條件。如果策略不是自己編寫的,調(diào)整起來就會(huì)有困難。

2
、別人寫的交易策略,你很難徹底執(zhí)行它。
系統(tǒng)交易最重要的好處在于它的執(zhí)行能力。它可以使你的交易擺脫人性的弱點(diǎn),擺脫心理因素的干擾。然而這一切的基礎(chǔ),在于自信。人只會(huì)信任自己了解的東西,這是人性。如果一個(gè)交易策略是別人寫的,無論它的測(cè)試報(bào)告是多么天花亂墜,你都不會(huì)信任它,因?yàn)槟悴涣私馑?。一旦市?chǎng)出現(xiàn)了危機(jī)情況,你就會(huì)坐立不安,你就會(huì)總懷疑是不是策略有問題,然后就又把策略扔到一邊,回到憑感覺去操作的老路上去了。

3
、最重要的一點(diǎn)在于:
編程就是理解,編寫交易策略調(diào)試交易策略的過程其實(shí)就是理解市場(chǎng)的過程。這是一種非常寶貴的積累。大多數(shù)人都是通過在市場(chǎng)中虧錢,靠爆倉來理解市場(chǎng)的。成本高昂,而且難以總結(jié)。使用這種方法來了解市場(chǎng),往往就算你虧了很多錢,交了大把學(xué)費(fèi),你仍然不知道自己到底輸在哪里。你總結(jié)不出來,你就不可能有長(zhǎng)進(jìn),就不可能贏。而通過寫交易策略來了解市場(chǎng)你不需要交什么學(xué)費(fèi),從歷史測(cè)試報(bào)告里很容易分析出來自己到底錯(cuò)在哪里,如此你就很容易改進(jìn)。把編好的交易策略與模擬帳戶交易結(jié)合起來就可以為你帶來足夠逼真的實(shí)戰(zhàn)經(jīng)驗(yàn)。

skywalker 說的非常棒!
編程其實(shí)是一種思想,編程的目的是把你的思想用各種圖形表現(xiàn)出來而已
我們期貨編程的目的是表現(xiàn)我們的交易思想
是為思想而編程,不是為編程而編程!

說起這點(diǎn)我想起了TB的偉大!
不管你用文華還是飛狐,當(dāng)你把指標(biāo)公式寫完后
可能你自己的不是很清楚
你的代碼所表現(xiàn)出來的東西到底是不是就是你的交易思想呢?
因?yàn)樗麄兊拇a是工作在后臺(tái)的
我們?cè)谇懊鏌o法得知這些代碼如何工作
TB完全不同
你可以在任意時(shí)候知道你的代碼在做什么!
所以你也就非常的清楚你的代碼是不是真的表現(xiàn)了你的意思!

好了
現(xiàn)在開始寫數(shù)據(jù)類型,變量和賦值.
這是些非?;镜母拍?span lang="EN-US" xml:lang="EN-US">,
相信您一下就懂的

線說數(shù)據(jù)類型吧
數(shù)據(jù)類型和人的類型差不多
人不是分黃種人,白種人,黑種人么?
TB
里面的數(shù)據(jù)也一樣
分字符串類型,數(shù)值型,還有布爾型

字符串類型很簡(jiǎn)單,用分號(hào)""括起來的東西就叫做字符串類型的數(shù)據(jù),"I love you","3345",.....
數(shù)值型數(shù)據(jù)類型也同樣的簡(jiǎn)單,數(shù)值大家知道吧,1542,1.021....這些東西就是數(shù)值型的數(shù)據(jù)類型
當(dāng)然,如果把一個(gè)數(shù)值型的東西用分號(hào)""括起來了那他就不再是數(shù)值型數(shù)據(jù)了,而是字符串類型的數(shù)據(jù)
1688是數(shù)值型數(shù)據(jù),但是"1688"就是字符串類型的數(shù)據(jù)了啊
還有就是布爾型,當(dāng)然,沒有接觸過編程的朋友可能不明白布爾型的意思
說白點(diǎn),布爾型就是真假型,意思就是布爾類型的數(shù)據(jù)只能取真(True)或假(False).
比如2>1,這個(gè)東西就是布爾類型的數(shù)據(jù),因?yàn)?span lang="EN-US" xml:lang="EN-US">2是大于1,所以這個(gè)表達(dá)式返回True()
那么2<1,大家說這個(gè)表達(dá)式是不是個(gè)布爾類型的數(shù)據(jù)呢?
呵呵,也是的,因?yàn)?span lang="EN-US" xml:lang="EN-US">2大于1,所以2<1是錯(cuò)誤的,就返回False()
大家明白了吧,就這三個(gè)類型,其中最只要的就是數(shù)值型數(shù)據(jù)類型哦
用的最多的也是數(shù)值型數(shù)據(jù)類型
如果明白了,那么請(qǐng)您就記住在TB里面數(shù)值型的E文是Numeric

暈死,看下TB的幫助,數(shù)據(jù)類型里面還有個(gè)序列型,如果數(shù)值序列型,字符串序列型,布爾序列型
序列這個(gè)東西看起來很難理解
想個(gè)辦法來理解他吧
比如我們的K線圖上有10K,Close大家知道吧,就是收盤價(jià)
但是這個(gè)Close包含了第一根K線的收盤價(jià),也包含了第二根K線的收盤價(jià).......一直包含到第五根K線的收盤價(jià)
也就是說序列型的數(shù)據(jù)在沒根K線上都有一個(gè)值的
OK
了吧?如果不OK也沒有關(guān)系,慢慢的就懂了

再說說變量
顧名思義,變量就是一個(gè)可以改變的東西
現(xiàn)在這個(gè)變量的值是100,但是等下我可以把它改成20,只要您喜歡,你可以隨心所欲的改變這個(gè)值
呵呵,能夠修改他的值的東西就叫做變量了
記住:
TB里面變量都是要先定義的!而且有著他獨(dú)到的定義方法,而且這個(gè)定義必須放到Begin的前面
如我們定義一個(gè)數(shù)值型變量a.就應(yīng)該這樣
Vars
  Numeric a;
Begin
......
End
當(dāng)然你也可以定義兩個(gè)或者多個(gè)變量,
Vars
  Numeric a;
  Numeric b;
  //.........
更多變量定義
Begin
......
End

大家也許想到了
我定義這個(gè)變量a,我要讓他等于2,這個(gè)東西很簡(jiǎn)單
你可以在變量定義的時(shí)候就給他賦初值讓他一開始被定義就等于2,也可以在Begin下面寫.
Vars
  Numeric a(2);
  Numeric b;
  //.........
更多變量定義
Begin
......
End
明白了么|?那么變量b?我們沒有用括號(hào)()擴(kuò)個(gè)東西啊,那么這個(gè)時(shí)候b這個(gè)變量等于什么呢?
很簡(jiǎn)單,如果你在定義變量的時(shí)候沒有給他初值,那么b這個(gè)時(shí)候等于0
好了
再看在Begin里面怎么修改這個(gè)變量的值
Vars
  Numeric a(2);
  Numeric b;
  //.........
更多變量定義
Begin
  a = 3;
  b = 100;
End
很簡(jiǎn)單的
現(xiàn)在大家應(yīng)該知道了變量是什么東西了吧
對(duì)了,忘記告訴大家了,Begin下面給變量復(fù)制僅僅只對(duì)當(dāng)前正在執(zhí)行你的代碼的K線有效咯,到下一根K線他就是初始值了啊
寫個(gè)例子吧
Vars
  Numeric a(100);//
定義一個(gè)變量,類型是數(shù)值類型,變量名字是a,變量的初始值是100
Begin
  if(CurrentBar == 0)//
如果是第一根K,就把變量a的值變?yōu)?span lang="EN-US" xml:lang="EN-US">1
  {
      a = 1;
   }
  FileAppend("C:\\a.Log",Text(a));
End

我們?cè)賮砜纯摧敵鼋Y(jié)果:
1
100
100
100
100
我們?cè)賮砝斫庀逻@個(gè)結(jié)果(當(dāng)然這個(gè)時(shí)候我們的K線圖上面只有5K線啊,其實(shí)隨便多少跟K線都一樣)
首先代碼在第一根K線上面執(zhí)行,先執(zhí)行if(CurrentBar == 0)這個(gè)東西,CurrentBar代表正在被執(zhí)行的K線的索引
因?yàn)榇a現(xiàn)在在第一根K線上執(zhí)行,所以索引就是0,于是這個(gè)表達(dá)式就成立了啊,既然if(CurrentBar == 0)這個(gè)表達(dá)式
成立,那么他就會(huì)執(zhí)行{}里面的東西a = 1;1賦給變量a,也就是說吧變量a的內(nèi)容改成1,
然后執(zhí)行FileAppend("C:\\a.Log",Text(a));
這個(gè)時(shí)候變量a的值是1,所以當(dāng)然輸出1了啊
代碼執(zhí)行完畢
然后轉(zhuǎn)到第二根K,
既然是第二根K,那么這根K線的索引就是1了啊,1肯定不等于0
那么表達(dá)式if(CurrentBar == 0)就不成立了啊,既然不成立那么他也就不會(huì)執(zhí)行{}里面的東西a = 1;
于是就直接執(zhí)行FileAppend("C:\\a.Log",Text(a));
那么這個(gè)時(shí)候a的值是多少呢?
很明顯是100,就是他的初始值,而不是上一根K線執(zhí)行代碼的時(shí)候改變了的a的值!這點(diǎn)千萬注意啊
我相信好多朋友會(huì)在這里犯下錯(cuò)誤的咯

再說給變量賦值
其實(shí)我們上面已經(jīng)說了,記住===的區(qū)別吧
=
就是把=右邊的東西賦給=左邊的東西
a = 100;
就是把=右邊的100賦給左邊的變量a
b = 9;
就是把9賦給變量b
我們?cè)谌粘V幸恢卑?span lang="EN-US" xml:lang="EN-US">=當(dāng)成等于,千萬急著在TB里面=就是賦值!!!
真正的等于的符號(hào)是==
if(a==b)//
就是如果a等于b
{
   //
做某件事情
}

好了
11點(diǎn)了
睡覺了
下次見

看了,學(xué)了,收獲不少,不斷消化ING。。。
謝謝斑竹! 


但是編程不是一件很容易的事情,當(dāng)然,如果您入門了,你會(huì)發(fā)覺TB編程其實(shí)和泡妞一樣的簡(jiǎn)單,就看你敢不敢下手了

1688是數(shù)值型數(shù)據(jù),但是"1688"就是字符串類型的數(shù)據(jù)了啊

說白點(diǎn),布爾型就是真假型,意思就是布爾類型的數(shù)據(jù)只能取真(True)或假(False).

序列這個(gè)東西看起來很難理解
想個(gè)辦法來理解他吧
比如我們的K線圖上有10K,Close大家知道吧,就是收盤價(jià)
但是這個(gè)Close包含了第一根K線的收盤價(jià),也包含了第二根K線的收盤價(jià).......一直包含到第五根K線的收盤價(jià)
也就是說序列型的數(shù)據(jù)在沒根K線上都有一個(gè)值的

TB里面變量都是要先定義的!而且有著他獨(dú)到的定義方法,而且這個(gè)定義必須放到Begin的前面

那么變量b?我們沒有用括號(hào)()擴(kuò)個(gè)東西啊,那么這個(gè)時(shí)候b這個(gè)變量等于什么呢?
很簡(jiǎn)單,如果你在定義變量的時(shí)候沒有給他初值,那么b這個(gè)時(shí)候等于0
好了
再看在Begin里面怎么修改這個(gè)變量的值
Vars
  Numeric a(2);
  Numeric b;
  //.........
更多變量定義
Begin
  a = 3;
  b = 100;
End


現(xiàn)在大家應(yīng)該知道了變量是什么東西了吧
對(duì)了,忘記告訴大家了,Begin下面給變量復(fù)制僅僅只對(duì)當(dāng)前正在執(zhí)行你的代碼的K線有效咯,到下一根K線他就是初始值了啊
寫個(gè)例子吧
Vars
  Numeric a(100);//
定義一個(gè)變量,類型是數(shù)值類型,變量名字是a,變量的初始值是100
Begin
  if(CurrentBar == 0)//
如果是第一根K,就把變量a的值變?yōu)?span lang="EN-US" xml:lang="EN-US">1
  {
      a = 1;
   }
  FileAppend("C:\\a.Log",Text(a));
End

我們?cè)賮砜纯摧敵鼋Y(jié)果:
1
100
100
100
100
我們?cè)賮砝斫庀逻@個(gè)結(jié)果(當(dāng)然這個(gè)時(shí)候我們的K線圖上面只有5K線啊,其實(shí)隨便多少跟K線都一樣)
首先代碼在第一根K線上面執(zhí)行,先執(zhí)行if(CurrentBar == 0)這個(gè)東西,CurrentBar代表正在被執(zhí)行的K線的索引
因?yàn)榇a現(xiàn)在在第一根K線上執(zhí)行,所以索引就是0,于是這個(gè)表達(dá)式就成立了啊,
既然if(CurrentBar == 0)這個(gè)表達(dá)式成立,那么他就會(huì)執(zhí)行{}里面的東西a = 1;1賦給變量a,也就是說吧變量a的內(nèi)容改成1,
然后執(zhí)行FileAppend("C:\\a.Log",Text(a));
這個(gè)時(shí)候變量a的值是1,所以當(dāng)然輸出1了啊
代碼執(zhí)行完畢

然后轉(zhuǎn)到第二根K,
既然是第二根K,那么這根K線的索引就是1了啊,1肯定不等于0
那么表達(dá)式if(CurrentBar == 0)就不成立了啊,既然不成立那么他也就不會(huì)執(zhí)行{}里面的東西a = 1;
于是就直接執(zhí)行FileAppend("C:\\a.Log",Text(a));

那么這個(gè)時(shí)候a的值是多少呢?
很明顯是100,就是他的初始值,而不是上一根K線執(zhí)行代碼的時(shí)候改變了的a的值!這點(diǎn)千萬注意啊

我相信好多朋友會(huì)在這里犯下錯(cuò)誤的咯

再說給變量賦值
其實(shí)我們上面已經(jīng)說了,記住===的區(qū)別吧
=
就是把=右邊的東西賦給=左邊的東西

a = 100;
就是把=右邊的100賦給左邊的變量a
b = 9;
就是把9賦給變量b
我們?cè)谌粘V幸恢卑?span lang="EN-US" xml:lang="EN-US">=當(dāng)成等于,千萬急著在TB里面=就是賦值!!!
真正的等于的符號(hào)是==
if(a==b)//就是如果a等于b
{
   //
做某件事情
}

現(xiàn)在我們說說TB中的流程控制
流程控制就是控制代碼執(zhí)行的流程
還說的明白點(diǎn)就是如果滿足什么陽的條件就做什么事情
或者不滿足什么條件的時(shí)候做什么事情
簡(jiǎn)單說流程控制就是控制語句控制代碼

控制語句中分為邏輯控制語句(就是條件控制語句)和循環(huán)控制語句
條件控制語句中大家記住If這個(gè)關(guān)鍵字,翻譯成中文就是如果
循環(huán)控制語句中大家記住For,就是開始循環(huán)了

先說If.
假設(shè)一個(gè)這樣的條件:
如果(收盤價(jià)>開盤價(jià))
  
則輸出:今日收紅陽線
我們先把這個(gè)東西翻譯成TB
如果翻譯成If
收盤價(jià)和開盤價(jià)大家都知道會(huì)翻譯成CloseOpen
輸出語句就是FileAppend,則翻譯成TB就是:
If(Close>Open)
  {
     FileAppend("c:\\a.log","
今日收紅陽線");
  }
是不是很簡(jiǎn)單呢?
大家記住一點(diǎn),凡是if(如果)語句中的代碼,都給我用{}括起來
我們?cè)侔焉厦娴臈l件加上一點(diǎn):
如果(收盤價(jià)>開盤價(jià))
  
則輸出:今日收紅陽線
否則如果(收盤價(jià)==開盤價(jià))
  
則輸出:今日收十字線
我們?cè)俜g成TB,把否則翻譯成Else,如果翻譯成If
If(Close>Open)
  {
     FileAppend("c:\\a.log","
今日收紅陽線");
  }
Else If(Close==Open)
  {
     FileAppend("C:\\a.log","
今日收十字線");
  }
同樣的簡(jiǎn)單,我們可以再把上面的條件再加:
如果(收盤價(jià)>開盤價(jià))
  
則輸出:今日收紅陽線
否則如果(收盤價(jià)==開盤價(jià))
  
則輸出:今日收十字線
否則
則輸出:今日收綠陰線

上面的否則大家知道翻譯成Else,有兩種翻譯方法,因?yàn)槭毡P價(jià)和開盤價(jià)的比較只存在著三種情況:
收盤價(jià)大于開盤價(jià),收盤價(jià)等于開盤價(jià),收盤價(jià)少于開盤價(jià),我們先這樣翻譯:
If(Close>Open)
  {
     FileAppend("c:\\a.log","
今日收紅陽線");
  }
Else If(Close==Open)
  {
     FileAppend("C:\\a.log","
今日收十字線");
  }
Else If(Close
  {
     FileAppend("c:\\a.log","
今日收綠陰線");
  }
上面的這個(gè)語句是很好理解的
但是大家想到了嗎?開盤價(jià)和收盤價(jià)的比較,如果不滿足Close>Open,也不滿足Close==Open
那么肯定的一點(diǎn)就是:Close所以上面的語句可以寫成:
If(Close>Open)
  {
     FileAppend("c:\\a.log","
今日收紅陽線");
  }
Else If(Close==Open)
  {
     FileAppend("C:\\a.log","
今日收十字線");
  }
Else
  {
     FileAppend("c:\\a.log","
今日收綠陰線");
  }


再說For循環(huán)語句.
先記下For語句的語法格式:
For 
循環(huán)變量 初始值 To 結(jié)束值
{
    TradeBlazer
公式語句;
}
也就是(假如變量i已經(jīng)定義,且循環(huán)5)
For i = 0 To 4
{
    TradeBlazer
公式語句;
}

for
語句的理解稍微復(fù)雜點(diǎn),但是大家不要怕,同樣的很簡(jiǎn)單的,我們先看看For語句是如何執(zhí)行的:
比如上面的例子
首先執(zhí)行i=0,就是給變量i賦值讓i等于0,然后判斷i是不是少于等于4,這里i等于0,所以小于4,于是執(zhí)行{}里面的TradeBlazer公式語句;
執(zhí)行{}里面的TradeBlazer公式語句后,TB系統(tǒng)會(huì)自動(dòng)給變量i1,這個(gè)時(shí)候i就等于1(上面剛剛開始的時(shí)候i等于0,加了1就是等于1)
再判斷i是不是少于等于To后面的4,1當(dāng)然少于4,于是再執(zhí)行{}里面的TradeBlazer公式語句;
執(zhí)行完{}里面的TradeBlazer公式語句后,Tb系統(tǒng)又自動(dòng)給變量i1,上面i已經(jīng)等于1,1,于是這個(gè)時(shí)候i等于2,
于是再判斷變量i的值2是不是少于To后面的4,當(dāng)然少于拉,于是再執(zhí)行{}里面的TradeBlazer公式語句;
....
以此執(zhí)行,當(dāng)i等于5的時(shí)候,再與To后面的4進(jìn)行比較,當(dāng)然5>4,所以不滿足條件了,于是不再執(zhí)行{}里面的TradeBlazer公式語句;
而開始執(zhí)行{}下面的語句拉
明白了么?
應(yīng)該很清楚了
大家再研究下下面的HHV的寫法,就會(huì)很明白了的:

//------------------------------------------------------------------------
// 
簡(jiǎn)稱: HHV
// 
名稱N周期的最高值
// 
類別用戶函數(shù)
// 
類型用戶函數(shù)
// 
輸出數(shù)值型
//------------------------------------------------------------------------

Params
   NumericSeries Price(0);
   Numeric Length(5); 
Vars
   Numeric highestValue(0);
   Numeric minDay;
   Numeric i;
Begin
   minDay = Min(CurrentBar,Length-1);
   for i=0 to minDay
   {
           highestValue=Max(highestValue,Price);
   }
   Return highestValue;
End


//------------------------------------------------------------------------
// 
編譯版本        GS2004.06.12
// 
用戶版本        2007/09/24 08:29
// 
版權(quán)所有        pwqzc
// 
更改聲明        TradeBlazer Software保留對(duì)TradeBlazer平臺(tái)
//                        
每一版本的TrabeBlazer公式修改和重寫的權(quán)利
//------------------------------------------------------------------------

現(xiàn)在說說參數(shù)與函數(shù),說完了這個(gè)東西,就要進(jìn)入實(shí)踐階段了咯,就要準(zhǔn)備開始實(shí)打?qū)嵉莫?dú)立編寫指標(biāo)了
首先我們必須明白,參數(shù)僅僅存在于函數(shù)里面,如果函數(shù)里面存在著參數(shù),那么當(dāng)你調(diào)用這個(gè)函數(shù)的時(shí)候必須要先傳遞參數(shù)給這個(gè)函數(shù)

看起來似乎有點(diǎn)深?yuàn)W和晦澀,那么我們先來明白函數(shù)是什么就很容易明了
函數(shù)就是幫助我們完成某一件事情,并且完成這件事情以后會(huì)返回個(gè)東西給我們的一個(gè)方法.
比如一個(gè)這樣的函數(shù) 請(qǐng)注意,這僅僅是個(gè)假想的函數(shù),僅為了幫助理解函數(shù)是什么):
GetCloseFromTrader
我們就很明白,這個(gè)函數(shù)就是幫助我們到交易所跑一趟,然后把收盤價(jià)返回給我們;
有點(diǎn)明白了吧,但是仔細(xì)一想,這個(gè)東西似乎有點(diǎn)問題,比如返回收盤價(jià),暈死,交易所
那么多的品種,且每個(gè)品種都有那么多的月份,他到底返回的是什么東西的收盤價(jià)啊?
呵呵,那么我們這樣寫:
GetCloseFromTrader(Cu0801)
現(xiàn)在應(yīng)該完全明白了,這個(gè)函數(shù)就是從交易所返回某個(gè)品種的收盤價(jià),到底是什么品種什么月份的收盤價(jià)呢?
Cu0801
就是拉.
其實(shí),這里面的Cu0801就是這個(gè)函數(shù)所需要的參數(shù)!
我們于是就可以這樣理解:函數(shù)是幫助用戶完成某一件事情且返回用戶所需要的數(shù)據(jù)的方法;
那么參數(shù)呢?參數(shù)就是參到函數(shù)里面去的數(shù),也就是說必須要傳遞給函數(shù)的數(shù);
我們現(xiàn)在不要求一定能夠自己寫函數(shù),但是必須要懂得的是要看懂這個(gè)函數(shù)是做什么用的,且知道如何去調(diào)用這個(gè)函數(shù)!

我們先看看下面的這個(gè)函數(shù),這個(gè)函數(shù)的名字叫:HHV,是根據(jù)輪回老大的建議改寫的,我們必須要讀懂這個(gè)函數(shù),且知道怎么樣去
調(diào)用這個(gè)函數(shù),如果真懂了,這課就圓滿的完成了!

[Copy to clipboard] [ - ]

CODE:

//------------------------------------------------------------------------
// 
簡(jiǎn)稱: HHV
// 
名稱N周期的最高值
// 
類別用戶函數(shù)
// 
類型用戶函數(shù)
// 
輸出數(shù)值型
//------------------------------------------------------------------------

Params
   NumericSeries Price(0);
   Numeric Length(5); 
Vars
   Numeric highestValue(0);
   Numeric minDay;
   Numeric i;
Begin
   minDay = Min(CurrentBar,Length-1);
   for i=0 to minDay
   {
           highestValue=Max(highestValue,Price[i]);
   }
   Return highestValue;
End


//------------------------------------------------------------------------
// 
編譯版本        GS2004.06.12
// 
用戶版本        2007/09/24 08:29
// 
版權(quán)所有        pwqzc
// 
更改聲明        TradeBlazer Software保留對(duì)TradeBlazer平臺(tái)
//                        
每一版本的TrabeBlazer公式修改和重寫的權(quán)利
//------------------------------------------------------------------------


我們一行一行的讀,一行一行的理解;
首先我們都知道,//后面的代表是注釋,什么是注釋?我狂暈
通過注釋我們可以粗略的明白這個(gè)函數(shù)是干什么的?代表了什么意思:
這個(gè)函數(shù)的名字HHV,他的作用是求N周期的最高值,并且會(huì)把這個(gè)最高值返回給調(diào)用這個(gè)函數(shù)的用戶
通過此,我們就能夠想到,這個(gè)N是個(gè)參數(shù),比如5個(gè)周期或者10個(gè)周期或者其他周期的最高值,
再仔細(xì)一想,是什么價(jià)格的最高值啊?是收盤價(jià)的最高值還是開盤價(jià)的最高值?或者是最高價(jià)的最高值呢?
于是我們也就想到了這個(gè)函數(shù)的另外個(gè)參數(shù):價(jià)格,比如5個(gè)周期的收盤價(jià)的最高值,或者10個(gè)周期的最高價(jià)的最高值
緊接著,這個(gè)函數(shù)開始定義參數(shù)了,
Params
后面定義的就是參數(shù),一個(gè)代表要得到什么價(jià)格的最高值,一個(gè)代表要得到什么周期的最高值;
參數(shù)定義完了,這個(gè)函數(shù)就開始定義變量,對(duì)于函數(shù),我們首先定義一個(gè)變量highestValue,我們這個(gè)函數(shù)必須要把這個(gè)變量返回給用戶的
這個(gè)變量highestValue就代表了你想得到的最高值!其他的兩個(gè)變量我們先不要理睬,緊接著就是Begin,前面我們說過,Begin后面,我們的代碼就要開始工作拉
我們先想一想,假設(shè)我們求5天的收盤價(jià)的最高值,在第一根K線上,我們希望得到的收盤價(jià)的最高值就是這天的收盤價(jià);
到第二根K線的時(shí)候我們希望得到的收盤價(jià)的最高值是這兩天的收盤價(jià)中價(jià)格最高的那個(gè),第三根就是得到這三根K線里面收盤價(jià)最大的那個(gè)收盤價(jià),
第四天同樣如此,第五天同樣如此,第六天開始就取前面5天的收盤價(jià)的最高價(jià),第七天......N天同樣如此了;
這個(gè)時(shí)候我們就應(yīng)該想到,如果當(dāng)前K線的索引小于你需要的周期數(shù)的時(shí)候就取當(dāng)前K線的前面幾個(gè)周期的最高值
于是代碼開始寫:

minDay = Min(CurrentBar,Length-1);
這個(gè)大家都很明白吧,如果當(dāng)前K線索引假設(shè)是3,而你要得到的是5個(gè)周期的最高值,因?yàn)闀簳r(shí)還沒有5個(gè)周期,我們我們就取這3個(gè)周期來獲得這三個(gè)周期的最高值
為什么要-1?因?yàn)?span lang="EN-US" xml:lang="EN-US">K
線的索引是從0開始計(jì)算的,那么前面的minDay?就是個(gè)變量,我們用這個(gè)變量來代表周期,于是我們?cè)俚蕉x變量的地方去定義這個(gè)變量:
Numeric minDay;

再看代碼:

[Copy to clipboard] [ - ]

CODE:

for i=0 to minDay
   {
           highestValue=Max(highestValue,Price[i]);
   }


很明顯,這是一個(gè)前面我們所說的For循環(huán),For循環(huán)里面我們必須要先定義一個(gè)變量i(可以是其他名字),代表從什么基數(shù)開始循環(huán);
于是再到定義變量的地方去定義這個(gè)i變量:
Vars
   Numeric highestValue(0);
   Numeric minDay;
   Numeric i;
再看這個(gè)For循環(huán),
當(dāng)i0的時(shí)候,看這個(gè)時(shí)候0是不是小于等于最小周期minDay,如果條件成立,就執(zhí)行:

[Copy to clipboard] [ - ]

CODE:

highestValue=Max(highestValue,Price[i]);


Price[0]
代表今天的價(jià)格,先比較今天的價(jià)格和最高值,取最大的那個(gè)保存;再把i+1
于是這個(gè)時(shí)候i1,再比較是不是小于等于最小周期minDay,如果條件成立,再執(zhí)行:

[Copy to clipboard] [ - ]

CODE:

highestValue=Max(highestValue,Price[i]);


這個(gè)時(shí)候Price[1]就代表了昨天的價(jià)格,把昨天的價(jià)格和保存的最高值比較,取他們的最高的那個(gè)再次保存;
依次循環(huán),我們是不是就得到了某個(gè)周期某個(gè)價(jià)格的最高值了呢?
呵呵
最后面,我們用代碼:
Return highestValue;
把這個(gè)得到的最高值返回給用戶,Return就是返回拉.

明白了嗎?
調(diào)用這個(gè)函數(shù)的時(shí)候就更簡(jiǎn)單了,比如求10個(gè)周期的收盤價(jià)的最高值:
HHV(Close,10);
20個(gè)周期的最高價(jià)的最高值:
HHV(High,20);
呵呵
大家在看看和分析這個(gè)文章里面的函數(shù)就會(huì)完全明白了的
http://www./forum/thread-520-1-1.html

 

我們現(xiàn)在來寫一個(gè)飛狐的DMA函數(shù)
原文出自這里:

QUOTE:

請(qǐng)編飛狐DMA函數(shù).

函數(shù): DMA(X,N) 
別名: 動(dòng)態(tài)移動(dòng)平均

參數(shù): X為數(shù)組,N為計(jì)算周期

返回: 返回?cái)?shù)組 
說明: 求X的動(dòng)態(tài)移動(dòng)平均。  
算法Y=DMA(X,N)  Y=N*X+(1-N)*Y',其中Y'表示上一周期Y,A必須小于1。 
示例: DMA(CLOSE,HIGH-LOW/CLOSE)
表示求以該周期震幅為平滑因子的平均價(jià)


他上面的描述有點(diǎn)錯(cuò)誤,應(yīng)該是N必須小于1;
N不是計(jì)算周期,我們還是看看文華的關(guān)于DMA的描述吧,這樣清楚點(diǎn):

[attach]396[/attach]

很簡(jiǎn)單,我們可以看出,如果要寫這個(gè)用戶函數(shù),則我們必須要先定義兩個(gè)參數(shù),
一個(gè)是上面的X,代表價(jià)格,我們用Price來表示,一個(gè)是N,代表動(dòng)態(tài)因子,我們用Length來表示
當(dāng)然,您可以用任意你喜歡的名字來表示;
好的,開始吧!
我們先新建一個(gè)用戶函數(shù),簡(jiǎn)稱寫DMA,名稱寫:求動(dòng)態(tài)移動(dòng)平均,分類選用戶函數(shù),模板任意(我選bool),然后確定;
出來如下東西:
Params
        Numeric Num(10);
Vars
        Bool Con1;
Begin
        Con1 = Close > Num;
        Return Con1;
End
我們把那些沒用的東西刪除,僅留下下面的內(nèi)容
Params
        
Vars
        
Begin
        
End
在定義參數(shù)的時(shí)候我們首先考慮下參數(shù)的數(shù)據(jù)類型
我們先看價(jià)格參數(shù),很明顯我們應(yīng)該把它定義為數(shù)值序列型,因?yàn)?span lang="EN-US" xml:lang="EN-US">Close
,Open...,都是數(shù)值序列型的
對(duì)于動(dòng)態(tài)因子,同樣簡(jiǎn)單,應(yīng)該是數(shù)值型,于是,我們?cè)?span lang="EN-US" xml:lang="EN-US">Params關(guān)鍵字后面寫定義參數(shù)的代碼,如下:
Params
    NumericSeries Price(100);
    Numeric Length(0.5);
Vars
        
Begin
        
End
我們首先應(yīng)該明白,我們寫函數(shù)的目的是要他幫我們做點(diǎn)事情并且返回個(gè)什么東西給我們,所以我們
再定義一個(gè)變量ReturnValue,代表這個(gè)函數(shù)要返回的數(shù)據(jù),到時(shí)候當(dāng)這個(gè)函數(shù)執(zhí)行完的時(shí)候我們就把這個(gè)東西返回給調(diào)用者
于是我們?cè)僭?span lang="EN-US" xml:lang="EN-US">Vars后面定義一個(gè)變量ReturnVlaue,數(shù)據(jù)類型是數(shù)值序列型,因?yàn)槊扛?span lang="EN-US" xml:lang="EN-US">K線上都有的,所以定義成序列型,代碼如下:
Params
    NumericSeries Price(100);
    Numeric Length(0.5);
Vars
    NumericSeries ReturnValue(0);
Begin
        
End
好拉,現(xiàn)在我們開始寫這個(gè)函數(shù)的工作代碼了;
看看這個(gè)函數(shù)的意思,我們就很明白,今日的動(dòng)態(tài)移動(dòng)平均=昨日的動(dòng)態(tài)移動(dòng)平均*(1-動(dòng)態(tài)因子)+今日的價(jià)格*動(dòng)態(tài)因子;然后再把這個(gè)值Return返回就Ok;
于是我們?cè)?span lang="EN-US" xml:lang="EN-US">Begin后面寫代碼:
Params
    NumericSeries Price(100);
    Numeric Length(0.5);
Vars
    NumericSeries ReturnValue(0);
Begin
    ReturnValue = ReturnValue[1]*(1-Length)+Price*Length;
    Return ReturnValue;
End

好了,這個(gè)函數(shù)就寫好了啊,是不是very very 簡(jiǎn)單啊?
呵呵
但是細(xì)心的朋友可能會(huì)發(fā)現(xiàn),這個(gè)函數(shù)還有點(diǎn)小問題,就是如果是第一根K,那么這根K線的昨日的動(dòng)態(tài)移動(dòng)平均沒有啊?
這樣做是不是會(huì)出錯(cuò)啊?
對(duì),非常對(duì),會(huì)出錯(cuò)的啊,所以我們要先判斷一下這根K線是不是第一根K,用什么來判斷是不是第一根K線呢?請(qǐng)看這個(gè)函數(shù):
Integer BarStatus()
當(dāng)前公式應(yīng)用商品當(dāng)前Bar的狀態(tài)值,返回值0表示為第一個(gè)Bar,返回值為1表示為中間的普通Bar,返回值為2表示最后一個(gè)Bar。
呵呵,就用BarStatus這個(gè)函數(shù),如果他返回0,就代表第一根K線啊
于是我們?cè)俑膶懲晟粕厦娴拇a為:
//------------------------------------------------------------------------
// 
簡(jiǎn)稱: DMA
// 
名稱求動(dòng)態(tài)移動(dòng)平均
// 
類別用戶函數(shù)
// 
類型用戶函數(shù)
// 
輸出數(shù)值型
//------------------------------------------------------------------------

Params
        NumericSeries Price(100);
    Numeric Length(0.5);
Vars
        NumericSeries ReturnValue(0);
Begin
    If(BarStatus==0)
    {
       ReturnValue = Price;//
如果是第一根K線就直接把Price賦值
    }
    Else
    {
       ReturnValue = ReturnValue[1]*(1-Length)+Price*Length;
    }
    Return ReturnValue;
End

//------------------------------------------------------------------------
// 
編譯版本        GS2004.06.12
// 
用戶版本        2007/11/03 11:57
// 
版權(quán)所有        pwqzc
// 
更改聲明        TradeBlazer Software保留對(duì)TradeBlazer平臺(tái)
//                        
每一版本的TrabeBlazer公式修改和重寫的權(quán)利
//------------------------------------------------------------------------


在編譯這個(gè)用戶函數(shù)的時(shí)候我碰到了一個(gè)小麻煩,大家都知道,我在上面新建這個(gè)函數(shù)的時(shí)候模板選擇的是布爾型
所以我編譯的時(shí)候老是提示:
C0122 Return語句的返回值類型與公式定義的返回值類型不符 
非常郁悶,后面我在公式編輯器里面的文件----屬性設(shè)置-----返回類型里面改成數(shù)值型確定后,再編譯通過,
不知道這是不是TB的一個(gè)小Bug,難道模板決定一切?這是個(gè)很郁悶的問題啊 

寫這么久了,下次我們就整一個(gè)交易模型出來啊

 

這段時(shí)間,寒舍裝修了一下,還有這段時(shí)間朋友的電腦出問題特別多,加之其他一些莫名其妙的問題,
讓本文更新的速度極慢,連自己都感覺到很過意不去了,讓我嚴(yán)肅的對(duì)大家說一聲,用洋玩意兒來說一聲:Sorry

這篇文章我將寫一個(gè)簡(jiǎn)單的交易模型,說起交易模型,大家都會(huì)想到在K線上的那些信號(hào)箭頭,但是對(duì)于TB,我似乎不喜歡這樣做.
基于以下兩點(diǎn):
一是如果把K線比喻成多姿多彩的美女,那么這個(gè)信號(hào)箭頭應(yīng)該是這個(gè)美女頭上的一朵花,但是TB的那些箭頭我怎么看都不舒服,就好比妓女的叫床:哦啊快點(diǎn),啊哦快點(diǎn),讓人興奮但又無可奈何,惡心極了;
二是TB支持全自動(dòng)下單,我對(duì)TB的這個(gè)方面還沒有任何研究,且暫時(shí)現(xiàn)在也沒有進(jìn)行全自動(dòng)交易的打算,沒有調(diào)查就沒有發(fā)言權(quán)啊,呵呵

俺不是學(xué)文學(xué)的,俺現(xiàn)在能夠找到的唯一能夠證明俺有那么一把刷子的東西就僅存一個(gè)初中畢業(yè)證了,不好,俺要回家看看才好,不會(huì)被俺小崽拿去折四角板玩吧?如果真是那樣,我可要狠狠的批評(píng)且嚴(yán)肅的警告他:現(xiàn)在你把老子的畢業(yè)證折四角板玩,等你小學(xué)畢業(yè)了,老子要把你的畢業(yè)證拿來卷煙抽!

言歸正題,我比較喜歡而且非常喜歡把交易模型做成變色的K,紅色代表買,綠色代表賣,非常的簡(jiǎn)單明了,但是一看就又很能明白是什么意思,K線本來就是一位大大的美女,如果把紅色的K線練成一塊,把綠色的K線練成一塊,那是多少爽的一件事情啊!!!

于是我們就要先學(xué)會(huì)畫K,在文華中畫K線是STICKLINE,TB中很簡(jiǎn)單,就用PlotNumeric.
如果你要畫紅色K,那么就先輸出High,Low,Close,Open,很好理解吧,大家都知道陽線從上到下是最高,收盤,開盤,最低,我們這個(gè)也一樣,只是先輸出最高最低,再輸出收盤開盤;如果是要畫綠色K,那么就按照以下順序輸出那四個(gè)價(jià)格:最高,最低,開盤,收盤,呵呵
下面是畫紅色K線的代碼:
PlotNumeric("High",High);
PlotNumeric("Low",Low);
PlotNumeric("Close",Max(Close,Open));
PlotNumeric("Open",Min(Close,Open));
大家看到了上面有個(gè)MaxMin函數(shù),大家可以想一想為什么咯,呵呵
下面是畫綠色K線的代碼:
PlotNumeric("High",High);
PlotNumeric("Low",Low);
PlotNumeric("Open",Max(Close,Open));
PlotNumeric("Close",Min(Close,Open));
終于看到有朋友UP,是多么的感動(dòng)啊
那么就讓我先來解釋下上面的為什么要用MaxMin函數(shù)吧,還是說明白一點(diǎn)好.
如果我們要把所有K線畫成紅色K,那么是要先輸出High,Low,再輸出收盤價(jià)和開盤價(jià).但是如果當(dāng)天Close怎么辦?于是就用Max了咯,當(dāng)然,畫綠色K線的Min原理也一樣.
明白了吧
那么我們先來把前面的150K線全部畫成紅色,后面的150K線全部畫成綠色(呵呵,我是假設(shè)超級(jí)圖表中存在300K線啊)
在右邊的TB公式里面新建個(gè)技術(shù)指標(biāo),名稱為MyKLine,簡(jiǎn)稱隨意,俺寫成哈哈,類型隨意選,模板空,確定,寫下如下代碼:

[Copy to clipboard] [ - ]

CODE:

//------------------------------------------------------------------------
// 
簡(jiǎn)稱: MyKLine
// 
名稱哈哈
// 
類別技術(shù)指標(biāo)
// 
類型其它類
// 
輸出:
//------------------------------------------------------------------------

Begin
   if(CurrentBar>150)
   {
      //
如果是第151K線畫綠色
          PlotNumeric("High",High);
      PlotNumeric("Low",Low);
      PlotNumeric("Open",Max(Close,Open));
      PlotNumeric("Close",Min(Close,Open));
   }
   Else
   {
      //
如果是151K線以前的Kurtosis線畫紅色
          PlotNumeric("High",High);
      PlotNumeric("Low",Low);
      PlotNumeric("Close",Max(Close,Open));
      PlotNumeric("Open",Min(Close,Open));
   }
End

//------------------------------------------------------------------------
// 
編譯版本        GS2004.06.12
// 
用戶版本        2007/11/14 13:51
// 
版權(quán)所有        pwqzc
// 
更改聲明        TradeBlazer Software保留對(duì)TradeBlazer平臺(tái)
//                        
每一版本的TrabeBlazer公式修改和重寫的權(quán)利
//------------------------------------------------------------------------


然后在文件---屬性設(shè)置----默認(rèn)-----默認(rèn)顯示改成主圖顯示,點(diǎn)編譯按鈕完成編譯,然后再在超級(jí)圖表里面調(diào)用這個(gè)技術(shù)指標(biāo),
娃哈哈,效果出來了咯!!
很爽對(duì)不?呵呵,但是如果你是個(gè)完美主義者,肯定你會(huì)發(fā)覺這中間稍有缺陷?在哪里?就是當(dāng)K線是十字星的時(shí)候K線會(huì)是白色的拉.
怎么辦?我們首先要明白為什么會(huì)出現(xiàn)這樣的現(xiàn)象的原因是收盤價(jià)=開盤價(jià)的時(shí)候會(huì)出現(xiàn)這樣的問題.那么如何去解決這個(gè)問題呢?
有兩種方法:第一種是強(qiáng)烈要求TB修改系統(tǒng)的底層去實(shí)現(xiàn),怕怕.
還有就是自己向辦法實(shí)現(xiàn),nopain老大提供了個(gè)思路,very very good!真的是長(zhǎng)江后浪推前浪,前浪死在沙灘上啊,俺們老了,還是nopain這樣的年輕人腦子反應(yīng)快咯~~~
下面是按照nopain老大的思路實(shí)現(xiàn)的代碼:

[Copy to clipboard] [ - ]

CODE:

//------------------------------------------------------------------------
// 
簡(jiǎn)稱: MyKLine
// 
名稱哈哈
// 
類別技術(shù)指標(biāo)
// 
類型其它類
// 
輸出:
//------------------------------------------------------------------------
Vars
   Numeric OpenIsClose;//
當(dāng)開盤等于收盤價(jià)的時(shí)候
Begin
   if(CurrentBar>150)
   {
      //
如果是第151K線畫綠色
          PlotNumeric("High",High);
      PlotNumeric("Low",Low);
          if(Open==Close)
          {
                  //
如果收盤價(jià)等于開盤價(jià)
                  OpenIsClose = Close-PriceScale*MinMove;
                  PlotNumeric("Open",Open);
                  PlotNumeric("Close",OpenIsClose);
          }
          Else
          {
         PlotNumeric("Open",Max(Close,Open));
         PlotNumeric("Close",Min(Close,Open));
          }
   }
   Else
   {
      //
如果是151K線以前的Kurtosis線畫紅色
          PlotNumeric("High",High);
      PlotNumeric("Low",Low);
          if(Open==Close)
          {
                  OpenIsClose = Close+PriceScale*MinMove;
                  PlotNumeric("Close",OpenIsClose);
                  PlotNumeric("Open",Open);
          }
          Else
          {
         PlotNumeric("Close",Max(Close,Open));
         PlotNumeric("Open",Min(Close,Open));
          }
   }
End

//------------------------------------------------------------------------
// 
編譯版本        GS2004.06.12
// 
用戶版本        2007/11/14 13:51
// 
版權(quán)所有        pwqzc
// 
更改聲明        TradeBlazer Software保留對(duì)TradeBlazer平臺(tái)
//                        
每一版本的TrabeBlazer公式修改和重寫的權(quán)利
//------------------------------------------------------------------------


上面有兩個(gè)函數(shù)PriceScaleMinMove,他們相乘的結(jié)果得到當(dāng)前品種的最小變動(dòng)價(jià)位,比如銅是10,膠是5......(這兩個(gè)函數(shù)的具體意義以及他們的乘積為什么會(huì)得到這個(gè)結(jié)果請(qǐng)看TB的函數(shù)幫助)
也就是說當(dāng)開盤==收盤的時(shí)候在收盤價(jià)的基礎(chǔ)上上下浮動(dòng)一個(gè)變動(dòng)價(jià)位來畫K,呵呵大家看下效果,是不是很完美的解決了這個(gè)問題呢?

本想晚上繼續(xù),但是晚上約了個(gè)客戶,完后又上同事家弄電腦,我完全被郁悶死了,那個(gè)討嫌的沒有半點(diǎn)良心的雨過天晴電腦保護(hù)系統(tǒng)可把我害死了!記得我買那個(gè)硬盤的時(shí)候硬盤廠家送了個(gè)雨過天晴保護(hù)系統(tǒng),明明說可以使用一年,但是3個(gè)月后就提示到期了無法使用了,于是只好卸載雨過天晴,在卸載過程中我選擇了回復(fù)電腦到最開始的狀態(tài),當(dāng)重新啟動(dòng)后,我的大腦一片空白!!!!!!天啊,所有的數(shù)據(jù)沒有了!!!!!!花了幾個(gè)小時(shí)才把數(shù)據(jù)找回,到半夜12點(diǎn)才完全弄好,本來俺的睡眠就非常差勁,于是......

不說了,我們有了上面的畫變色K線的基礎(chǔ),現(xiàn)在來做個(gè)簡(jiǎn)單的變色K線系統(tǒng)吧,是非常非常簡(jiǎn)單的;
曾聽說有人用兩條均線打天下,我們就做這個(gè)打天下的變色K線交易模型;
假設(shè)兩條均線是5日均線和10日均線,于是就有兩個(gè)變量,MaFiveMaTen,5日上穿10日買,5日下穿10日賣;
寫成代碼如下:

[Copy to clipboard] [ - ]

CODE:

//------------------------------------------------------------------------
// 
簡(jiǎn)稱: MyKLine
// 
名稱哈哈
// 
類別技術(shù)指標(biāo)
// 
類型其它類
// 
輸出:
//------------------------------------------------------------------------
Vars
   Numeric OpenIsClose;//
當(dāng)開盤等于收盤價(jià)的時(shí)候
   NumericSeries MaFive;//5
日均線
   NumericSeries MaTen;//10
日均線
Begin
   MaFive = SAverage(Close,5);//5
天移動(dòng)平均
   MaTen = SAverage(Close,10);//10
天移動(dòng)平均
   if(MaFive
   {
      //
如果是第151K線畫綠色
          PlotNumeric("High",High);
      PlotNumeric("Low",Low);
          if(Open==Close)
          {
                  //
如果收盤價(jià)等于開盤價(jià)
                  OpenIsClose = Close-PriceScale*MinMove;
                  PlotNumeric("Open",Open);
                  PlotNumeric("Close",OpenIsClose);
          }
          Else
          {
         PlotNumeric("Open",Max(Close,Open));
         PlotNumeric("Close",Min(Close,Open));
          }
   }
   Else If(MaFive>MaTen)
   {
      //
如果是151K線以前的Kurtosis線畫紅色
          PlotNumeric("High",High);
      PlotNumeric("Low",Low);
          if(Open==Close)
          {
                  OpenIsClose = Close+PriceScale*MinMove;
                  PlotNumeric("Close",OpenIsClose);
                  PlotNumeric("Open",Open);
          }
          Else
          {
         PlotNumeric("Close",Max(Close,Open));
         PlotNumeric("Open",Min(Close,Open));

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多