顯示具有 MultiCharts 標籤的文章。 顯示所有文章
顯示具有 MultiCharts 標籤的文章。 顯示所有文章

2025年5月3日 星期六

函數:字串取代


在 MultiCharts 上對字串處理的內建函數有大、小寫互換、LeftStr、MidStr 等等,缺了在字串中指定字串更換的功能,也就是一般所謂的 String Replace。就... 做一個來用吧。


字串型函數,名稱:ˍStrReplace(參數1, 參數2, 參數3)

參數1:要被處理的字串
參數2:字串中要被更換掉的字元
參數3:字串中要更換成的字元

以下是效果範例:


這是函數的 code:

input: inputStr(string), Str_Find(string), Str_Replace(string);

var: resultStr(""), position(0), lenFind(0), tempStr("");


resultStr = inputStr;
lenFind = StrLen(Str_Find);

if lenFind > 0 then begin
  position = InStr(resultStr, Str_Find);
  while position > 0 begin
    tempStr = LeftStr(resultStr, position - 1) + Str_Replace + 
              RightStr(resultStr, StrLen(resultStr) - position - lenFind + 1);
    resultStr = tempStr;
    position = InStr(resultStr, Str_Find);
  end;
end;

_StrReplace = resultStr;


2022年1月15日 星期六

範例:MultiCharts多商品交易到下單大師


myCTA 的基礎上,我有把這個基礎擴展到多商品,過去曾經有極為少數的幾位朋友上過 myCTA 多商品版本的的課程(當時取名為 SmartCTA),但後來就不再開課,coding 難度實在太高了~

因為要交易多商品,造成在下單設定上的困擾。當你要同時交易 50、100、200、300個商品的話,想一下光是下單機上的設定,就非常痛苦了。為了降低這個痛點,之前與下單大師溝通,並得到大力協助下,才能使用 order 模式的方式,讓多商品的交易得以實現:不需要設定超多數量的"策略",也不需要設定一大堆的"商品"!僅需3~5個下單文字檔,就能駕馭你的一籃子商品了。

2020年9月11日 星期五

策略訊號整合器 in STO


STO 訂閱購買:https://www.touchance.com.tw/sto/index


STO 套件包中有策略訊號整合器(單純加總各策略的訊號),這也是使用 STO 的標準模式。也就是,把 STO 插入在策略訊號整合圖表,而不是放在各個策略圖表上。即使你只有一個策略,我也建議你使用策略訊號整合器。

如果還不知道什麼是 STO:介紹影片


策略訊號整合器即為在 STO 工具包中的兩個指標:@SignalGetter、@SignalsCollector。


2020年7月27日 星期一

以選擇權執行策略訊號工具包


STO 訂閱購買:https://www.touchance.com.tw/sto/index


推展「以選擇權執行策略訊號」一段時間日子後,深感這工具的程式碼即使經過面對面的詳細解說,其實對絕大部分的人來說,難度依然是非常的高!我想,上過課的同學其實就是買工具回去用吧 XD

在 TOUCHANCE 推出了加值函數的 ExtendQuote 之後,我將其引入『以選擇權執行策略訊號套件』(後稱 STO),得到兩大功能突破:
1. 在每次下單動作執行前先檢查當下流動性是否適當?
2. 實盤記錄選擇權交易的權益模擬。

2019年7月26日 星期五

課程:自動化以選擇權執行期貨策略訊號


殷鑑不遠。這是 2019/07/03 的台指期貨,在大約 10來秒的時間之中,台指閃崩了近 500點,並且快速回復。這樣類似的事件,在台指不是空前,也不會絕後,即使台灣期貨交易所有所謂的動態穩定機制在運作,這一天,據我所聽聞到也有不少友人在這很短的時間內... 中槍了。這裡,我們不打算討論交易所的動態穩定機制到底有沒有發揮效用?畢竟這很難論斷,閃崩 500點看似很誇張,也許沒有動態穩定機制,直接到跌停也不一定啊。


2019年5月26日 星期日

函數(WOptionWeekth):台指週選擇權的第幾週


這個函數將會傳回目前 Bar 所屬時間的週選擇權的第幾週合約,正常來說是 1~5。也就是下圖中圈起來的這個數字。



2019年2月21日 星期四

多策略整合之比例式部位實作


前文:多策略部位整合(http://www.yctseng.net/2018/12/blog-post.html)的文末說到改造成比例式下單是很容易的,這篇我們就來實作一下吧。

由於我們不會直接連結到下單命令的執行,稱為比例式"下單"不大適當,所以文章標題採用了比例式部位,反正你只要把這個換算出來的比例式部位,丟文字檔或其他管道給下單機,也就真的是比例式下單了。

我們先來定義一下這個比例式部位的 比例式是個什麼碗糕?畢竟每個人對比例的含意很有可能是不同,你當然可以沿用這樣的架構,去實作出你自己的"比例"。本文所作的比例是:目前策略組合的訊號部位總和佔過去各策略最大持倉數量的百分比;而比例式部位則是把這個比例再乘上對照目前資金量的單位數。


2019年1月17日 星期四

Portfolio Trader 即時對外輸出資訊測試


一直以來,MultiCharts 的原廠都說 Portfolio Trader 是不支援 IOG的,近日友人發信到原廠詢問得到的回應也依然是如此。但是,聽聞有人利用 PT 執行策略並且外接下單機,這就讓我感到很有趣了!

我們在 PT 內,的確可以在 Strategy 下掛多個訊號,讓其中一個訊號不做任何買賣動作,單純的只是做 GVSet 或是寫出文字檔,但如果 PT 並不支援 IOG 的話,那這些擔任輸出資訊功能的訊號,將會無法"即時"的部位資訊傳送出去,而需要等到像是換棒這樣的 event 才能動作... 很明顯的,輸出部位資訊如果需要等到換棒的延遲程度,有誰能受得了 XD


2018年12月27日 星期四

關於陣列偏移的應用與更新數值先後的影響


之前分享過的舊文:陣列偏移。其應用的情境,我自己常常使用在要讓陣列的第一格是目前最新的數值,其後的格子,依序是預定規則儲存... 大家可能覺得很空泛 =_=

舉個例子來說,在 1分鐘K的圖表上,我想計算15分K的10MA,通常最快的方式是開 15分K最為 Data2,然後 value1= ( Average( Close, 10 ) ) of Data2。但是,除了 Data2 開越多會讓你的 MultiCharts 效率變低以外,還會引動其他的問題。所以,如果不是很困難的狀況,跨週期資料的計算,我喜歡自己用陣列處理。


2018年12月10日 星期一

多策略部位整合


在執行多策略組合交易的時候,每個策略圖表獨立運作,各自下各自的單。但我們常常可以發現在某些時候(特別是開盤),出現 A策略要翻多、B策略卻要翻空,對我們的帳戶來說,因為策略圖表獨立運作的原因,實際上卻幾乎同時發出買進、賣出的委託單,而成交回來的價格又往往是買外盤、賣內盤,這完全是沒有必要交易動作,因為這兩個策略訊號對立,總合部位其實是沒有變化的,無端的損失買賣價差與稅費。

因此,我們可以把多策略的所有策略訊號統合在一起,再以訊號總合的部位去發出交易指令就不會做無謂的交易了。

我們需要一個讀取圖表的策略訊號的指標,及一個總和所有策略訊號的圖表來發出交易指令。既然我們要總和多策略的訊號來做交易,就順便也把再投資(Reinvestment)的功能也一併建立,讓日後的多策略組合部位隨著我們的權益增減而連動。


2018年11月15日 星期四

myCTA:智能風險控制套件


myCTA 是適用於台指期貨的交易管理系統,運作在 MultiCharts 之上。你的交易策略必須是在 MultiCharts 上執行才能使用 myCTA。專業版或券商版皆可使用。

myCTA 會自動依你選用的績效指標幫你的交易策略做資金分配、並依照各策略圖表的動態風險評估做部位換算、還可依照個人意願設定的風險承受做自動槓桿縮放。換言之,您只需準備好自己的策略圖表,myCTA 就能幫你自動做好再投資、風險平衡這些很重要的資金、策略管理工作,協助你的交易事業規避毀滅可能的發生。

手上已有數個交易策略,卻擔心或無法決定如何執行這些策略?
對策略何時上架、下架、該投入多少資金到個別策略感到困難?
想適度降低隔夜風險,卻又不想改寫手上僅有日盤設計的策略?
還困惑於是否該在策略中或是策略組合去設計加、減碼的機制?

發展、運行交易事業,再也不必投入多年心血在這些煩悶但重要的工作上,您只需把心力投注在真正為你的事業創造利潤的項目-交易策略。不論您是要自行開發、對外採購、甚至採用一些 Data mining 軟體產生的策略。不必煩惱策略何時上下架?不必煩惱獲利、損失發生了,部位何時對應調整?您可以利用 myCTA 來幫你做對人性來說很困難的工作,並架設帳戶安全網。

可下載使用說明文件:下載連結

軟體購買(費用請見購買表單):終生授權對象為 MultiCharts 的 UserName (用券商版者請慎重考慮),包含實機交付或遠端幫您做 myCTA 與 下單大師的安裝設定。myCTA 還贈送四個含程式碼的策略圖表,供你與自己的策略做組合。


※ myCTA 的授權時間皆為永久、不限制您交易多少帳戶、資金。
※ myCTA 支援無限數量模擬帳戶,於安裝時一律把各項內建的績效評估指標都開立模擬帳戶,方便日後觀察哪一種策略績效指標對您的策略組合效益最佳。

myCTA購買表單或需更詳細資訊請洽:syc.tseng@gmail.com


使用 myCTA 會在你的策略圖表上放置指標,如下:


負責資金、策略管理與模擬帳戶(下單部位)的圖表如下:
購買 myCTA



myCTA 提供一個堅強的船體,讓你在偉大航道上冒險時有足夠的後援,承受在某些船員出包時,我們還能海上繼續旅程而不致沉沒。當然,您還是需要優秀的船員(交易策略)!

為了提高你的策略數量、讓資金自動分配有更多機會,購買 myCTA 就附贈四個策略(含程式碼)圖表。而這些策略也是我自己正在使用中的。


現在就取得 myCTA:策略管理、風險管理、資金管理、擴展策略數量,一次滿足!


2018年10月31日 星期三

讓 MultiCharts 隨意執行外部程式


起因於上過 myCTA 課程的同學問了我個問題:「有沒有讓 MultiCharts 可以直接發 mail 的函數或是指令?」就我個人的印象:沒有。只記得可以透過 alert 去觸發凱衛報價元件的警報通知來發 mail,從 MC 直接來的應該沒有。比如我自己現在沒使用凱衛的報價服務,就無法透過這個管道。

日常維運需要的訊息通知發送,我都是仰賴下單大師本身的錯誤通報功能與自己用 AutoIT 做出來的發 mail 用的 .exe 來實現,還得配合 MacroExpress 才做到應我自己的需要去發送通知及其他應用。但在上回已經能利用 kernel32.dll 來做文字檔的讀取工作後,想到 windows API 應該也會有這方面的功能、應用吧?幾經搜尋下,線索指向了 shell32.dll,看了 shell32.dll 的 call fuction list 後,對於如何在 MultiCharts 引用,還是不得其門。


2018年10月4日 星期四

函數在迴圈內時,也許跟你想得不一樣?


如果你需要在程式碼中處理有特定規律且重複做的事情,通常會直覺的想要用迴圈去做。比如:我要讀取很多個有檔名規律的文字檔,這樣寫... 很一般、普通、正常吧

var: j(0), fileName("");
array: getting[11](0);

for j=1 to 10 begin
  fileName= "F:\" + NumToStr(j,0) + ".txt";
  getting[j]= _readTXT( fileName );
end;


但是在 MultiCharts,我卻發現這會跟我們想像的不大一樣~ 至少,上面那樣寫的效果,跟下面這麼寫的就不見得會相同咧(以下這種寫法才不大正常啊 XD)。

array: getting[11](0);

getting[1]= _readTXT( "F:\1.txt" );
getting[2]= _readTXT( "F:\2.txt" );
getting[3]= _readTXT( "F:\3.txt" );
getting[4]= _readTXT( "F:\4.txt" );
getting[5]= _readTXT( "F:\5.txt" );
getting[6]= _readTXT( "F:\6.txt" );
getting[7]= _readTXT( "F:\7.txt" );
getting[8]= _readTXT( "F:\8.txt" );
getting[9]= _readTXT( "F:\91.txt" );
getting[10]= _readTXT( "F:\10.txt" );

後文就是分享上述這個為何所得不相同的測試、觀察與結論。
====================

2018年9月27日 星期四

函數(_priceTWS):適應台股最小跳動的價格轉換


台灣股票的最小跳動間距,算是自外於國際現況,會因為股價高低而有不同的最小跳動,相關規則可參考:https://dh3p7.app.goo.gl/vBs5

這個函數的用途在於,我們在編寫交易策略的時候,常常會有指定價位的 stop 或是 limit 交易指令,如果我們指定的價格(比如:往上碰到5日均線時買進,往下觸到布林通道下緣出場)沒有經過處理轉換,又剛好下單機是採掛價送單的話,就會出現掛價不存在而遭退單。

就算你是看股票現貨做股票期貨也是一樣的狀況,所以,我們會需要一個函數來幫忙把指定價格轉換成在該價格對應到符合最小跳動規格的正確數字。


2018年7月2日 星期一

函數(_isSettlementDay):多商品版結算日判斷


這篇文章的緣由有兩個,一是這個函數能比較多的適用在不同商品的結算日判斷,二是應該還有許多人對於在函數中的參數對宣告成 Reference 型態的使用感到疑惑。

本文所分享的函數 code 原作不是我,出處來自:https://goo.gl/7Nni3p 的第三樓。
感謝 Vincez 的分享,原始 code 請自行連過去閱讀。


2018年2月11日 星期日

智能風險管理系統:myCTA


你手上已有數個交易策略,卻擔心或無法決定如何執行這些策略?
你對策略何時上架、下架、該投入多少資金到個別策略感到困難?
你想適度降低隔夜風險,卻又不想改寫手上僅有日盤設計的策略?
你還困惑於是否該在策略中或是策略組合去設計加、減碼的機制?


2018年2月4日 星期日

函數(_isTrading):判斷商品當下是否有在交易中


由於正在往國外期貨做更多的努力,也陸陸續續碰到很多問題,維運方面或是策略、管理對不同市場、商品的自動適應都有。

這是為了在做出下單動作的時候,先判斷一下目前該商品,是否處於可交易的狀態?因為我自己已經發生多次,輸出部位的文字檔改變了,卻在該商品沒有交易的時段 XDDD


函數: _isTrading。回傳:True / False。
var: intrabarpersist volToday(0), intrabarpersist volUpdateTime(0),
     intrabarpersist TimeValue(0), intrabarpersist isTrading(false);


if LastBarOnChart then begin
  
  value1= currentTime_s;
  value2= HoursFromDateTime( ELTimeToDateTime_s(value1) );
  value3= MinutesFromDateTime( ELTimeToDateTime_s(value1) );
  value4= SecondsFromDateTime( ELTimeToDateTime_s(value1) );
  TimeValue= value2*3600 + value3*60 + value4;
  
  once volToday= q_ask*q_bid + q_totalvolume; 

  if (q_ask*q_bid+q_totalvolume) <> volToday then begin
    volUpdateTime= TimeValue;
    volToday= (q_ask*q_bid+q_totalvolume);
  end;
  
  _isTrading= TimeValue-volUpdateTime < 60 and volUpdateTime <> 0 
              and q_bid*q_ask <> 0 and q_bid <> q_ask;

end;


2017年12月19日 星期二

函數(_commaFormat):讓數字以千分位形式顯示


在製作介面的時候,有關於資金量的顯示,如果是短短的萬元以下,通常我們的人眼辨識沒有什麼問題,當數字位數多一些起來時,往往就會有辨識解讀的困擾(這是一種略帶快樂的麻煩嗎?)

然而 MultiCharts 內建的數字顯示形式的功能,我只看到 :7:0 這類的方式,好像沒有看到以千分位加個逗號的形式?因此,自己就做了個函數,在數字最後要顯示在畫面上時,可以用千分位加逗號的文字型態來表現。


2017年9月29日 星期五

函數(_fancyDailyEquity):爽歪歪版日權益


在開發交易管理系統的早期,我注意到給策略做評價的 KPI 計算出來的分數會出現負數,而負數的出現自然是被評估的那個策略實在太爛的關係。然而所謂的策略績效表現太爛,通常不是策略訊號本身就衰到爆,卻往往是交易成本(稅、費、滑價)把訊號本身的價差獲利吃乾抹淨所致。也就是我常在講座、課程中提到的:我們手上策略賺不了錢的絕大部分原因,是被賭場抽頭給抽死的。

近期,好友(就是凌波微步大)與我討論到把賠到不行的策略對做這件事(他也有發文講這事)。真的要做的話,我們第一件要做的事情就是先把策略績效中的交易成本因素剔除。

由於我們還打算跟超級爛策略對做(你叫多單,我就下空單),所以最好把策略績效修改成,每做一筆交易就算平出也能拿到獎金,如果在這種條件下,還能做到賠錢,那真無疑是地獄倒楣鬼:一空就漲、一多就跌。因此,我先寫個函數來把原始策略績效改成剔除交易成本還附送獎金,產生負面評估的原始材料。


2017年8月29日 星期二

訊號:智能版收盤前清倉(當沖專用)


在跟好友的討論中產生出來的當沖策略用的臨收盤前出場的"訊號"。不過,這篇文章的題目加上了智能版,總是要比過去分享過的東西多聰明一點點才行嘛 XD

因應交易多商品的需求,每一種商品的收盤時間都很可能不一樣。至少,想讓這個臨收盤出場能隨著個別商品的 QM 設定而自動配合。

用 SessionLastBar 這個內建函數來協助判斷目前的 K 棒是否是交易時段的最後一根,再用這最後一根 K棒的結束時間作為基準,接著以 q_time 來計算距離這商品的收盤時間還有幾分鐘?當這個距離時間小於等於指定的時間長度(參數):平倉。


熱門文章