版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1TB編程基礎和策略實現(xiàn)示例編程基礎和策略實現(xiàn)示例蔡云華蔡云華深圳開拓者科技有限公司深圳開拓者科技有限公司內(nèi)容安排內(nèi)容安排TB 程序化交易的設置和使用(演示)TB 程序化交易編程基本知識TB 技術(shù)指標和交易策略編寫示例2 TB公式如何使用?公式如何使用?TB公式類型用戶函數(shù)公式應用(包括技術(shù)指標、交易指令等)如何使用一個交易模型? 或新建公式應用,粘貼代碼,校驗保存公式(編譯) 打開超級圖表,選擇交易品種,插入公式應用 修改公式應用設置 投資組合性能測試和參數(shù)優(yōu)化 啟動自動策略交易系TB公式的導入導出3456 公式源代碼公式源代碼ParamsNumeric Length(10);Numeric
2、 Lots(1);VarsNumericSeries MA;BeginMA = AverageFC(Close,Length);PlotNumeric(MA,MA);If (Close1 MA1)Buy(Lots, Open);If (Close1 High1 比較今天的最高價是否突破了前兩天的最高價 表達式為:High High1 and HighHigh2 或者:High High1 & HighHigh212 TB公式運行機制公式運行機制從左到右,從上到下13 例例1:Hello WorldSample1:BeginFileAppend(c:tbsample1.txt,Hello
3、 World!);End 公式運行結(jié)果公式運行結(jié)果大家都知道每個Hello World!都是怎么產(chǎn)生的嗎? 注釋語句注釋語句- CommentaryTB的信息輸出,除了可以通過FileAppend輸出到文件外,也可以將信息輸出顯示到圖表上;Commentary的用法: 在超級圖表的當前BAR添加一行注釋信息; 參數(shù):String strTip; / 提示的信息 信息輸出函數(shù)的作用信息輸出函數(shù)的作用調(diào)試和診斷TB公式的代碼錯誤;檢驗TB公式的運行結(jié)果是否符合設計邏輯;學習TB的運行機制,熟悉TB內(nèi)建函數(shù)的用法; 例例2:輸出:輸出BAR數(shù)據(jù)數(shù)據(jù)Sample2:BeginFileAppend(c:
4、tbsample2.txt,Date= +text(Date)+ Time= +text(time)+ Open= +Text(Open)+ High= +Text(High)+ Low= +Text(Low)+ Close=+Text(Close)+ CurrentBar= +Text(CurrentBar)+ Barstatus= +Text(BarStatus);End 例例2 運行結(jié)果運行結(jié)果 參數(shù)與變量參數(shù)與變量 簡單地說,參數(shù)和變量都是代號,代表一個某一類型的數(shù)據(jù),變量還可以代表一個表達式的運算結(jié)果;參數(shù)的作用是給用戶一個不需修改代碼即可改變公式運行結(jié)果的一個外部接口;參數(shù)的值在公
5、式的內(nèi)部不能夠被修改;變量的作用是保存數(shù)據(jù)或是計算結(jié)果,便于以后調(diào)用;參數(shù)和變量都需要聲明。 參數(shù)的作用參數(shù)的作用 假如我們要寫一個均線指標,現(xiàn)在是用10天做周期。代碼如下:BeginPlotNumeric(MA,AverageFC(Close,10); End那如果要改用20天做周期,我們必須改程序,把10改成20,然后編譯。下次想用別的周期,還得改,非常麻煩。如果使用參數(shù),就方便多了。程序?qū)懞?,使用時改參數(shù)就好了。代碼如下:ParamsNumeric Length(10); BeginPlotNumeric(MA,AverageFC(Close,Length); End 數(shù)據(jù)類型數(shù)據(jù)類型T
6、B公式中有三種基本的數(shù)據(jù)類型 數(shù)值型(Numeric)字符型(String)布爾型(Bool)為了對變量、參數(shù)進行回溯,又增加了序列類型 數(shù)值型序列變量/參數(shù)(NumericSeries)字符型序列變量/參數(shù)(StringSeries)布爾型序列變量/參數(shù)(BoolSeries)為了通過用戶函數(shù)返回多個值,又增加了引用類型 NumericRef、StringRef、BoolRef變量(或參數(shù))申明方法:數(shù)據(jù)類型 變量名或參數(shù)名 (初始值); 控制語句控制語句條件語句(If-Else) if 語句 if - else 語句 if - Else if 語句 if - Else 嵌套循環(huán)語句(For
7、While) For 循環(huán)變量 = 初始值 TO 結(jié)束值 For 循環(huán)變量 = 初始值 Downto 結(jié)束值 While 循環(huán) 條件語句條件語句-IF Else語句語句v語法如下:If (Condition) TB公式語句1; ElseTB公式語句2; v如果TB公式語句是單條,您可以省略,二條或者二條以上的語句必須使用。 25 技術(shù)指標輸出函數(shù)技術(shù)指標輸出函數(shù) PlotNumeric 在當前BAR輸出一個數(shù)值 參數(shù):String Name - 輸出值的名稱; Numeric Number - 輸出的數(shù)值; Numeric Locator=0 - 輸出值的定位點; Integer Color=
8、-1 - 輸出值的顏色; Integer BarsBack=0 - 從當前BAR回溯的 BAR數(shù)舉例:PlotNumeric(“MA”,AverageFC(Close,10); 輸出均線指標值PlotNumeric (“OpenToClose”,open,close); 輸出開盤價與收盤價的連線(線型選擇柱狀圖)26 技術(shù)指標輸出函數(shù)技術(shù)指標輸出函數(shù)(2) PlotString 在當前BAR輸出一個字符串 參數(shù):String Name - 輸出值的名稱 String str - 輸出的字符串; Numeric Locator=0 - 輸出值的定位點; Integer Color=-1 - 輸出
9、值的顏色; Integer BarsBack=0 - 從當前BAR回溯的 BAR數(shù)舉例:PlotString(CandleStick,陽線,Low,Red); 在Bar的最低價位置輸出字符串“陽線”,并顯示為紅色27 技術(shù)指標輸出函數(shù)技術(shù)指標輸出函數(shù)(3) PlotBool 在當前BAR輸出一個布爾值 參數(shù):String Name - 輸出值的名稱 Bool bPlot - 輸出的布爾值; Numeric Locator=0 - 輸出值的定位點; Integer Color=-1 - 輸出值的顏色; Integer BarsBack=0 - 從當前BAR回溯的 BAR數(shù)舉例:PlotStrin
10、g(“con,con,High); 在Bar的最高價位置輸出布爾變量con的值,如果con為真, 則顯示“笑臉”圖標,否則顯示為“哭臉”圖標28 例例3:技術(shù)指標的編寫:技術(shù)指標的編寫Sample3: 單均線加通道指標單均線加通道指標ParamsNumeric Length(10);/ 均線周期Numeric FilterPercent(20);/ 通道幅度比例(%)VarsNumericSeries MA;NumericSeries UpperBand;NumericSeries LowerBand;Bool ConBuy(False);Bool ConSell(False);BeginMA
11、 = AverageFC(Close,Length);UpperBand = MA * ( 1 + FilterPercent / 10000 );LowerBand = MA * ( 1 - FilterPercent / 10000 );29 PlotNumeric(MA,MA,0,Yellow);PlotNumeric(UpperBand,UpperBand,0,Red);PlotNumeric(LowerBand,LowerBand,0,Green);ConBuy = CrossOver(Close,UpperBand);ConSell = CrossUnder(Close, Lowe
12、rBand);if (ConBuy)PlotBool(ConBuy,ConBuy,High+(High-Low)*0.3);PlotString(BS,多頭突破,High+(High-Low)*0.6,red);if (ConSell)PlotBool(ConSell,!ConSell,Low-(High-Low)*0.3);PlotString(SS,空頭突破,Low-(High-Low)*0.6,Green);End30 指標編寫常見問題指標編寫常見問題指標編寫完成后,還要注意在屬性設置中進行相應的設置;指標是在主圖顯示還是在子圖顯示;指標的線型;從V3轉(zhuǎn)到V4的客戶注意參數(shù)的位置另外學習
13、的例子可以參考:MACD指標的寫法(柱狀圖)SAR指標(點圖)31 運行結(jié)果運行結(jié)果32 交易指令交易指令 Buy/Sell Buy - 平掉所有空頭持倉,開多頭倉位; sell - 平掉指定多頭持倉; Sellshort - 平掉所有多頭持倉,開空頭倉位; Buytocover - 平掉指定空頭持倉。 參數(shù):Numeric Share 買入數(shù)量,默認=0時,使用系統(tǒng)設置參數(shù)Numeric Price 買入價格,為浮點數(shù),默認=0時為使用現(xiàn)價(非最后Bar為Close)。33 交易指令交易指令 A_SendOrder針對當前公式應用的帳戶、商品發(fā)送委托單。該函數(shù)直接發(fā)單,不經(jīng)過任何確認,并會在
14、每次公式計算時發(fā)送,一般需要配合著倉位頭寸進行條件處理,在不清楚運行機制的情況下慎用。不能使用于歷史測試,僅適用于實時行情交易。參數(shù):BuyOrSell :買賣類型,買Enum_Buy/賣Enum_Sell; EntryOrExit: 開平倉類型, 開倉 Enum_Entry / 平倉Enum_Exit/ 平今 Enum_ExitToday;fLot 委托單的交易數(shù)量; fPrice 委托單的交易價格。 疊加多個商品合約進行交易疊加多個商品合約進行交易TB可以在一個圖表中插入多個商品合約,支持同時對多個商品合約數(shù)據(jù)源編寫公式應用。具體的方法是在交易指令、BAR數(shù)據(jù)及系統(tǒng)函數(shù)前加上數(shù)據(jù)源。TB中
15、數(shù)據(jù)源的命名規(guī)則如下:Data0:圖表中最開始選擇的商品合約Data1:第一個插入的商品合約Data2:第二個插入的商品合約一個圖表最多支持50個數(shù)據(jù)源;調(diào)用方法:Data1.A_SendOrder() Data2.Buy(.)Data3.Close Data4.MarketPosition34 盤中和盤后公式運行的差別盤中和盤后公式運行的差別盤后公式的執(zhí)行情況分析 K線是確定的,不存在信號消失問題 公式在每根K線上只執(zhí)行一遍 符合開倉條件和平倉條件會標出買賣信號(使用Buy、Sell指令),但并不真正發(fā)單盤中公式的執(zhí)行情況分析K線是變化的,如用最新價或基于最新價計算出的指標來作為入場或出場條
16、件會出現(xiàn)信號消失問題 每當分筆交易數(shù)據(jù)(tick)傳來時,公式都會執(zhí)行一遍 符合開倉條件和平倉條件除標出買賣信號,還會真正發(fā)單 信號消失問題信號消失問題(1)產(chǎn)生原因:使用變化的價格(如Close)或是基于最新價Close計算的技術(shù)指標,來作為交易的進場、出場或止損條件時,就會產(chǎn)生信號消失問題。如果編寫的公式策略中存在信號閃爍問題,在歷史測試中會得出失真的測試結(jié)果,在實盤交易時,更會因為重復發(fā)單造成嚴重損失。信號消失問題的一般解決辦法:延遲發(fā)單或用前一根K線的數(shù)據(jù)來做為判斷條件用能保持得住的價格來做為判斷條件 信號消失問題信號消失問題(2)延遲發(fā)單舉例:condition = 交易條件If (
17、condition)Buy(1, NextOpen, true);用前一根K線做判斷舉例:condition = 交易條件If (condition1)Buy(1, Open);用High,Low,Open等做判斷 If (HighHigh1) buy(1,High1); 例例4:單均線系統(tǒng):單均線系統(tǒng)ParamsNumeric Length(10);Numeric Lots(1);VarsNumericSeries MA;BeginMA = AverageFC(Close,Length);PlotNumeric(MA,MA);If (MarketPosition 1 and Close1 M
18、A1)Buy(Lots, Open);If (MarketPosition -1 and Close1 MA1)Buy(Lots, Open);If (MarketPosition!=-1 and Close1 = MyEntryPrice * (1 + TakeProfit * 0.01)MyExitPrice = MyEntryPrice * (1 + TakeProfit * 0.01);if (open MyExitPrice) MyExitPrice = Open;Sell(0,MyExitPrice);43 Else if ( Low MyEntryPrice-Stoploss *
19、 MinPoint)MyExitPrice = MyEntryPrice-Stoploss * MinPoint;if (Open MyExitPrice) MyExitPrice = Open;Sell(0,MyExitPrice); Else if (MarketPosition = -1)if (Low = MyEntryPrice * (1 - TakeProfit * 0.01)MyExitPrice = MyEntryPrice * (1 - TakeProfit * 0.01);if (open MyEntryPrice + Stoploss * MinPoint)MyExitP
20、rice = MyEntryPrice + Stoploss * MinPoint;if (Open MyExitPrice) MyExitPrice = Open;BuyToCover(0,MyExitPrice);End 44 追蹤止盈策略的實現(xiàn)追蹤止盈策略的實現(xiàn)追蹤止盈的設置也有多種方法,常見的有:峰值價回落固定點數(shù)峰值價回落一定的百分比峰值價的一定比例;平均波動范圍的一定比例;開盤價的一定比例。是否盈利達到一定幅度才啟用追蹤止盈;動態(tài)的回落點數(shù)或比例。下面以峰值價回落一定比例為例,來實現(xiàn)它。45 追蹤止盈的代碼追蹤止盈的代碼(不包含進場部分)Params Numeric Trailin
21、gStop(1); / 跟蹤止損百分比Vars Numeric MinPoint;Numeric MyExitPrice;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;Numeric StopLine(0);Beginif (BarsSinceEntry = 1)HigherAfterEntry = AvgEntryPrice;LowerAfterEntry = AvgEntryPrice; Else If(BarsSinceEntry 1)HigherAfterEntry = Max(HigherAfterEntry
22、1,High1);LowerAfterEntry = Min(LowerAfterEntry1,Low1);46 ElseHigherAfterEntry = HigherAfterEntry1;LowerAfterEntry = LowerAfterEntry1;MinPoint = MinMove * PriceScale;If(MarketPosition=1)StopLine = HigherAfterEntry * (1 - TrailingStop * 0.01);If(Low = StopLine)MyExitPrice = StopLine - MinPoint ;If(Ope
23、n = StopLine)MyExitPrice = StopLine + MinPoint;If(Open MyExitPrice) MyExitPrice = Open;BuyToCover(0,MyExitPrice);End 4748 應注意的問題應注意的問題如果單根K線的最高價和最低價相差很大,有可能出現(xiàn)止盈和止損同時滿足的情況,解決辦法:切換到更小的時間周期上進行交易;擴大止盈和止損的幅度在開倉BAR,因無法判斷開倉價和最高價最低價的先后順序,因此一般是在開倉BAR的后一根BAR才開始判斷是否滿足止盈止損或跟蹤止盈的的條件。如交易策略需要及時的止損,同樣需要切換到更小的時間周期上進
24、行交易。 進場位置和盈利峰值價計算進場位置和盈利峰值價計算 開盤價開盤價最低價最低價追蹤止損價追蹤止損價盈利峰值價盈利峰值價止止損損沒沒被被止止損損 再進場策略的設計再進場策略的設計使用止損止盈或追蹤止盈出場后,如果趨勢沒有改變,我們?nèi)匀恍枰龠M場的策略以避免錯失大的波段趨勢;可以考慮的再入場的方法有:價格創(chuàng)出新高或新低,再次入場;出場后一定時間后,大趨勢仍未改變則再次入場;出場后大趨勢未改變,其他輔助指標出現(xiàn)和大趨勢一致的進場信號時再次入場。下面以出場后一定時間后大趨勢仍未改變即再次入場的方法來舉例。50 跟蹤止盈后,我們要設個標志,表示曾經(jīng)出場過,因此要增加兩個布爾型序列變量;BoolSe
25、ries bLongStoped(false);BoolSeries bShortStoped(false);跟蹤止盈后,設置這兩個變量; / 多頭跟蹤止盈后If(Low = StopLine ) BuyToCover(0,MyExitPrice);bShortStoped = true;51 這兩個序列變量值必須往下傳遞(V4中可以免寫)if (BarStatus 0)bLongStoped = bLongStoped1;bShortStoped = bShortStoped1;多頭或空頭初次進場和再次進場后,都要將這兩個變量復位;bLongStoped = false;bShortStop
26、ed = false;為了配合再進場,我們需要記錄當前的趨勢方向。52 追蹤止盈后的等待時間,我們可用止盈后的K線根數(shù)來衡量。因為我們止盈后bLongStoped或bShortStoped會被置為True,因此我們可通過一個函數(shù)NthCon來尋找跟蹤止盈的那根BAR到現(xiàn)在的BAR數(shù)。具體止盈后多少根BAR后趨勢還在持續(xù)再進場,我們可以設置為一個參數(shù):BarsReEntry。多頭再進場部分的代碼如下BarsAfterLongExit = NthCon(!bLongStoped,1);Commentary(BarsAfterLongExit=+text(BarsAfterLongExit);If(
27、bLongStoped and MarketPosition = 0 and condBuy1 = true and BarsAfterLongExit = BarsReEntry)Buy(Lots,Open);bLongStoped = False;HigherAfterEntry = Open;53 例例6:雙均線系統(tǒng):雙均線系統(tǒng)加上跟蹤止盈和再進場策略加上跟蹤止盈和再進場策略Params Numeric Length1(10);Numeric Length2(20); Numeric Lots(1);Numeric TrailingStop(1); / 跟蹤止損百分比跟蹤止損百分比Num
28、eric BarsReEntry(5);/ 出場后趨勢維持多少根出場后趨勢維持多少根Bar后再進場后再進場Vars NumericSeries MA1; NumericSeries MA2; BoolSeries condBuy(false);BoolSeries condSell(false);Numeric MinPoint;Numeric MyExitPrice;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;Numeric StopLine(0);BoolSeries bLongStoped(false);Boo
29、lSeries bShortStoped(false);Numeric BarsAfterLongExit(0);Numeric BarsAfterShortExit(0);Begin /*if (BarStatus 0) / V4中可以省略的序列變量傳遞部分中可以省略的序列變量傳遞部分bLongStoped = bLongStoped1;bShortStoped = bShortStoped1;*/Commentary(bLongStoped=+IIFString(bLongStoped,true,false);Commentary(bShortStoped=+IIFString(bShor
30、tStoped,true,false);if (BarsSinceEntry = 1)HigherAfterEntry = AvgEntryPrice;LowerAfterEntry = AvgEntryPrice; Else If(BarsSinceEntry 1)HigherAfterEntry = Max(HigherAfterEntry1,High1);LowerAfterEntry = Min(LowerAfterEntry1,Low1);ElseHigherAfterEntry = HigherAfterEntry1;LowerAfterEntry = LowerAfterEntr
31、y1; MA1 = AverageFC(Close,Length1); MA2 = AverageFC(Close,Length2); PlotNumeric(MA1,MA1);PlotNumeric(MA2,MA2);condBuy = CrossOver(MA1,MA2);condSell = CrossUnder(MA1,MA2);if ( condBuy = false and condSell = false )condBuy = condBuy1;condSell = condSell1;If ( MarketPosition 1 and condBuy1 = true and bLongStoped = false)Buy(Lots,Open);HigherAfterEntry = Open;bLongStoped = false;bShortStoped = false;If ( MarKetPosition -1 and condSell1 = true and bShortStoped = false)SellShort(lots,Open); LowerAfterEntry = Open;bLongStoped = false;bShortStoped = false
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年保密協(xié)議文檔
- 2025年產(chǎn)假補償協(xié)議
- 2025年醫(yī)療服務營養(yǎng)配餐協(xié)議
- 2025年代理商代理傭金費協(xié)議
- 2025年大型露天演出場地租用協(xié)議
- 2025年生存保險受益人變更申請
- 《用友業(yè)務流程》課件
- 二零二五版增值稅發(fā)票委托第三方服務框架協(xié)議3篇
- 事業(yè)單位2024年度勞動合同定制版
- 二零二五年度知識產(chǎn)權(quán)侵權(quán)賠償合同補充協(xié)議3篇
- 新疆2024年中考數(shù)學試卷(含答案)
- 2024-2030年中國連續(xù)性腎臟替代治療(CRRT)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 跨學科主題學習:實施策略、設計要素與評價方式(附案例)
- 場地委托授權(quán)
- 2024年四川省成都市龍泉驛區(qū)中考數(shù)學二診試卷(含答案)
- 項目工地春節(jié)放假安排及安全措施
- 印染廠安全培訓課件
- 紅色主題研學課程設計
- 胸外科手術(shù)圍手術(shù)期處理
- 裝置自動控制的先進性說明
- 《企業(yè)管理課件:團隊管理知識點詳解PPT》
評論
0/150
提交評論