: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

[转载]PowerLanguage常見問題---MC软件学习系列3

[转载]PowerLanguage常見問題---MC软件学习系列3

Q1:多週期數據引用方式?

說明

MC有附了簡單版的GlobalVariable.dll的功能,讓使用者可以跨圖表跨週期引用資料,對應的四個函數如下:

GVSetNamedDouble

GVSetNamedInt

GVGetNamedDouble

GVGetNamedInt

Set類是存值用的,Get類就是叫用你存的值。一種是存整數,一種是存小數。

範例

指標$TestSet

value1=GVSetNamedInt("O60",Open);
value2=GVSetNamedInt("H60",High);
value3=GVSetNamedInt("L60",Low);
value4=GVSetNamedInt("C60",Close);

指標$TestGet

Plot1(GVGetNamedInt("O60",value1),"O60");
plot2(GVGetNamedInt("H60",value2),"H60");
plot3(GVGetNamedInt("L60",value3),"L60");
plot4(GVGetNamedInt("C60",value4),"C60");

然後,找個60分鐘的圖,插入$TestSet。找個1分鐘的圖,插入$TestGet,就大功告成。

Q2:K棒內產生委託(IOG, IntraBar Order Generation)機制說明。

說明

首先這裡寫了二個進場、二個出場:

[intrabarordergeneration=true]

if close < close[1] then buy("buy 1") 1 shares next bar at market;
if close < close[1] then buy("buy 2") 1 shares next bar at market;
if marketposition = 1 then sell("Sell 1") 1 shares next bar at low-1 point limit;
if marketposition = 2 then sell("Sell 2") 2 shares next bar at low-1 point limit;

範例:

以下是實單測試,這裡只檢測「單一K棒內,此訊號總共只產生一個進場及一個出場委託」。



可以看到,上圖中每個K棒,只進出一次,而且時間幾乎都是在K棒的開頭,

一旦符合了,後續即使有符合訊號的地方,也不會再重複進場。

如果啟用IOG時,千萬要注意不要出現會逐筆下單的狀況。

因為啟動IOG後,是把每一筆進來的TICK,當做收盤價在處理,

台指跳動有多快,相信大家都知道,而一旦K棒收完(實際上就是一個TICK的時間),還沒收到成交回報,

就會產生"無法在K棒內完成委託" 的狀況,MC馬上會進行刪單。

這時候,實際上經紀商那邊,部位沒成交。而圖上,已經標了成交,會有倉位不一致的狀況出現。


Q3:分批進場/出場寫法範例。

說明

在這邊為大家準備一個範例,說明MC多筆委託是如何咦鳌

範例

1.  範例用的程式碼如下:

if close < open then begin //進場條件(請換成您的訊號成立條件)

   buy("buy 1") 1 shares next bar at market;//第一筆進場

   buy("buy 2") 2 shares next bar at open-1 limit;//第二筆進場

   buy("buy 3") 3 shares next bar at open-2 limit;//第三筆進場

end

else if close > open then begin

   sellshort("sell") 2 shares next bar at market;

end;

2.預設參數沒變更的狀況下(於部位限制欄位無勾選),只會執行第一筆進場。

3.於部位限制欄位勾選最多容許幾筆同向委託,填2的話,畫面上就會出現二筆買進委託。

4.於部位限制欄位勾選最多容許幾筆同向委託,填3的話,畫面上就會出現的三

筆買進委託。所以就看策略裡面是分幾批進場,就填多少。

5.另外,以上範例是勾選”當委託由不同訊號產生”的狀況。若當您選擇”無論委託是否由同一訊號產生”時,
若同一訊號被連續觸發時,也會最多進場三筆,請注意!

Q4:指標是否可以儲存備份?

否。存指標的地方,沒有辦法直接備份,如果有需要就是自行copy。於PowerLanguage Editor裡選擇匯出,

勾選您要的指標檔即可。(若要搬到另一台電腦使用,就用同樣的方式,採匯入即可。)

Q5:PowerLanguage及EasyLanguage的語法是否完全相同相容?

TS的EasyLanguage轉MC的PowerLanguage只有下面三個語法寫法不同:

sell sellshort (放空)

exitlong sell (多單出場)

exitshort buytocover (空單出場)

Q6:如何啟動指標的警示功能?

1.勾選啟動MC內鍵指標警示功能鍵。

2.您設定的指標中,程式碼是否有個語法叫「Alert」,有這樣寫法才會出聲音。

選取您的指標按開啟腳本。

注意:二個條件都要成立才會有聲音唷。
Q7:如何引用多週期數據?
MC有沒有提供什麼樣的方式可以引用多週期數據?
例如在60分線引用日線的XAverage數據?
並且引用的數據在盤中可以在60分chart中隨著報價變化而變動?
謝謝客服一號提供的方法,我再試試看能不能用

ADE相關資料請參考: http://www.programtrading.tw/viewtopic.php?f=2&t=555&sid=0ce5ecfd9c285cea71d2877b428148f7
ADE昨天我搞了一整天有些問題,而今天在盤中測試發現新的問題,
引用開高收低數據沒問題,但引用的指標數據無法隨著報價變化
目前還找不到問題所在,如果我有解決再上來分享作法

暱稱 : Brian
  郵件 : brianchung@multicharts.com.tw
  回覆日期 : 2009/11/25 21:03:50
我把他貼過來了
這樣封面與內容比較相符,比較好找^^

Input: Length(14),Length2(14);

Variables:A1(0),B1(0);

value1 = RSI(Close, Length) ;  ////////5K
value2 = RSI(Close of data2, Length2) ;  /////////15K

value3 = RSI(Close, Length2) of data2 ;  /////////15K

print(date, time, Close, Close of data2, value1 , value2, value3);

------------輸出----------------

1091007.001200.007540.007540.00  32.47  57.89  57.89
1091007.001205.007544.007540.00  36.05  50.50  57.89
1091007.001210.007545.007540.00  36.94  44.39  57.89
1091007.001215.007545.007545.00  36.94  45.54  58.87
1091007.001220.007543.007545.00  35.78  46.72  58.87
1091007.001225.007548.007545.00  40.81  47.93  58.87
1091007.001230.007541.007541.00  36.50  47.01  57.72
1091007.001235.007547.007541.00  42.14  46.05  57.72
1091007.001240.007548.007541.00  43.05  45.07  57.72






default.jpg
  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/26 10:14:28
盤中在1分K引用5分K的XAverage
但計算出來的值仍然無法即時變動
不知道有沒有方法可以解決?

可不可以在data2新增公式去算XAverage,這樣數據就可以及時變動
然後再把數據傳到data1? 我試過在data2新增公式
但新增的結果都是新增到data1


暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/26 13:44:13
盤中在1分K引用5分K的XAverage
但計算出來的值仍然無法即時變動
不知道有沒有方法可以解決?

可以貼出你的語法嗎,應該不會有這種問題才對
你可以如上面的方式,貼出語法及print 的數值來比對嗎
或者是你的問題是使用ADE才發生的,那就要查ADE的咦髁


可不可以在data2新增公式去算XAverage,這樣數據就可以及時變動
然後再把數據傳到data1? 我試過在data2新增公式
但新增的結果都是新增到data1

公式跟策略是完全不同的東西唷
在MC中,策略是指訊號,公式是指指標
策略訊號是看不到指標公式的
策略自已要去計算你要用的指標值,它不能直接拿畫面上指標的數值來用,一定要自己去計算或叫用函數傳值給它



  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/26 15:06:21
後來就用你的方法沒再用ADE,但確實是也無法即時變動
只有在下一根5分K出來後才變動,而且變動的數據也不正確
我用的語法如下,放在策略訊號檔中,現在盤後看最後一筆數據是正確的
所以請在明天盤中測試才能知道5分的即時數據正不正確
並開兩個chart比對,一個放下面的語法(兩個data),
另一個開5分chart沒有data2,把下面的 of data2拿掉,print改成plot畫出來看,其餘不變再加進去(因這個會即時變動)
當看到5分chart的H_MA及L_MA數字出現變動時,很明顯data1引用data2的方法沒有跟著即時變動,仍停留在上一根5K的數據
麻煩你了

data1為1分,data2為5分

Vars: H_MA(0), L_MA(0);
// 1 min for data1, 5 min for data2
H_MA = Round(XAverage(High, 3), 0) of data2;
L_MA = Round(XAverage(Low, 3), 0) of data2;
Print(date, " ", time, " ", H_MA, " ", L_MA);


公式跟策略是完全不同的東西唷
在MC中,策略是指訊號,公式是指指標
策略訊號是看不到指標公式的
策略自已要去計算你要用的指標值,它不能直接拿畫面上指標的數值來用,一定要自己去計算或叫用函數傳值給它


我知道策略與公式不同,不管我是要新增公式或策略都沒法加入data2
因為上面用你的方法無法即時報價變動,所以我才想這個方法的可能性



folkchen@multicharts.com.tw.jpg
  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/26 16:10:10
後來就用你的方法沒再用ADE,但確實是也無法即時變動
只有在下一根5分K出來後才變動,而且變動的數據也不正確
我用的語法如下,放在策略訊號檔中,現在盤後看最後一筆數據是正確的
所以請在明天盤中測試才能知道5分的即時數據正不正確
並開兩個chart比對,一個放下面的語法(兩個data),
另一個開5分chart沒有data2,把下面的 of data2拿掉其餘不變再加進去(因這個會即時變動所以印出正確數據)
兩者print出來的數據比對就知道了,很明顯data1引用data2的方法不會即時變動
麻煩你了

data1為1分,data2為5分

Vars: H_MA(0), L_MA(0);
// 1 min for data1, 5 min for data2
H_MA = Round(XAverage(High, 3), 0) of data2;
L_MA = Round(XAverage(Low, 3), 0) of data2;
Print(date, " ", time, " ", H_MA, " ", L_MA);


是的,在 Data1 使用 Data2 ,它會等 Data1 Close 之後才去計算數值
是我會錯您「無法即時變動」的意思了

Vars: H_MA(0), L_MA(0);
// 1 min for data1, 5 min for data2
H_MA = Round(XAverage(High, 3), 0) of data2;
L_MA = Round(XAverage(Low, 3), 0) of data2;

Print(date, " ", time, " ", High[2] of data2, " ", High[1] of data2, " ", High[0] of data2, " ", H_MA, " ", L_MA);

1091116.00 1300.00 7791.00 7793.00 7792.00 7792.00 7787.00
1091116.00 1301.00 7791.00 7793.00 7792.00 7792.00 7787.00
1091116.00 1302.00 7791.00 7793.00 7792.00 7792.00 7787.00
1091116.00 1303.00 7791.00 7793.00 7792.00 7792.00 7787.00
1091116.00 1304.00 7791.00 7793.00 7792.00 7792.00 7787.00
1091116.00 1305.00 7793.00 7792.00 7802.00 7797.00 7788.00
1091116.00 1306.00 7793.00 7792.00 7802.00 7797.00 7788.00
1091116.00 1307.00 7793.00 7792.00 7802.00 7797.00 7788.00
1091116.00 1308.00 7793.00 7792.00 7802.00 7797.00 7788.00
1091116.00 1309.00 7793.00 7792.00 7802.00 7797.00 7788.00
1091116.00 1310.00 7792.00 7802.00 7798.00 7798.00 7791.00
1091116.00 1311.00 7792.00 7802.00 7798.00 7798.00 7791.00
1091116.00 1312.00 7792.00 7802.00 7798.00 7798.00 7791.00
1091116.00 1313.00 7792.00 7802.00 7798.00 7798.00 7791.00
1091116.00 1314.00 7792.00 7802.00 7798.00 7798.00 7791.00

XAverage 的程式邏輯如下

inputs:
PriceValue( numericseries ),
Len( numericsimple ) ;

variables:
var0( 2 / ( Len + 1 ) ) ;

if CurrentBar = 1 then
XAverage = PriceValue
else
XAverage = XAverage[1] + var0 * ( PriceValue - XAverage[1] ) ;

所以

1091116.00 1300.00 的 H_MA = 7792
1091116.00 1305.00 的 H_MA = 7792 + (2/(3+1)) * (7802-7792) = 7797
1091116.00 1310.00 的 H_MA = 7797 + (2/(3+1)) * (7798-7797) = 7797.5 = 7798

看起來似乎沒有錯,若您的資料有錯,請依以上方式確認,或貼上來我幫你確認看看




我知道策略與公式不同,不管我是要新增公式或策略都沒法加入data2
因為上面用你的方法無法即時報價變動,所以我才想這個方法的可能性

請確認以下兩個紅色框框的地方,有沒有設對

test2.jpg


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/26 16:28:57
我印出來的跟你不一樣
上圖的兩個設定在哪? 我找不到

引用data2有沒有辦法達到跟獨立chart所plot出來的數字一樣? 因為獨立的chart中的XAverage以plot呈現的數字是會即時變動的


  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/26 16:59:09
在圖上按右鍵-> 新增公式 -> 選公式  -> 屬性頁中的第二個頁籤


引用data2有沒有辦法達到跟獨立chart所plot出來的數字一樣? 因為獨立的chart中的XAverage以plot呈現的數字是會即時變動的

目前發現若使用一分及五分,在兩根K棒重疊處,也就是第五分時,會即時跳動
但第一到第四分,只有 Close 時會跳動一次




  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/26 17:15:04
你說的地方是放在指標才有這個設定畫面,但我的東西是要在訊號裡面計算

如果只能等重疊的時候才變動數值,那就沒參考意義了
我引用日線或週線的話就根本都不會動了
有什麼辦法讓它『動』嗎? 就跟plot出現的數值一樣的效果

嗯......似乎是無解
除非可以在1分週期中算出XAverge5分週期的參數重新計算
不過太複雜了,不知怎麼算~



  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/27 10:18:15
本來想湊合著用,但發現不行
把data2改成日線,結果今天盤中的數字實在是差太多了
沒有沒高手可以解決這個問題? 謝謝~


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/27 16:43:41
呼叫客服一號~~
我想到一個方法可以試試看
引用日線可以用HighD()函數抓取日線數值
假設XAverage參數是3
個別取出HighD(0)、HighD(1)、HighD(2)組成一個NumericSeries再丟入XAverage
EL語法不熟,試了一些方式但都失敗
可以幫一下如何實作嗎? 謝謝




brianchung@multicharts.com.tw.jpg
  暱稱 : Brian
  郵件 : brianchung@multicharts.com.tw
  回覆日期 : 2009/11/27 16:53:16
客服一號外出中^^
這個方法我昨天有和他討論
請參考CDP那篇文章
應該可以實作出呼叫任意週期的開高低收
這樣子就可以算任意週期的技術指標
但缺點就是,很多指標都要重寫一遍


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/27 17:09:50
我只引用XAverge而已,所以不必重寫很多東西
看不太懂CDP的寫法,好像不是我需要的
可否寫個範例? 謝謝


  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/27 17:52:13
您參考一下 CDP 那篇裡面,向下找有一篇是自訂 HighD 的語法
它的前一個函數,可以自訂切割K棒的週期
改良一下,就可以自訂成不同週期的開高收低

但這仍是不便,只是目前似乎沒有找到其他更佳的方式可以解決



  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/27 18:55:38
抱歉我是新手,看不懂你所說的東西,沒看到你所說的自訂 HighD 的語法的它的前一個函數,只看到CloseD、OpenD
可以麻煩改一下貼出來嗎? 謝謝!



標題:如何引用多週期數據?
  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/29 23:10:59

基本上,交易指令是以 Next Bar 在交易
所以它用 Data1 的 Close 時才去算,本身是不影響交易的

影響的只是在劃線時,它有沒有跟著跳動,對人工看點有影響

星期一我寫個函數讓你自訂k棒做資料處理。


P.S: This Bar on Close 指令的交易時間點也是在 Close的最後一個Tick,幾乎等於是在 Next Bar at Market,只是早了一秒或更少


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/29 23:36:37
因為我的策略需要那個會跳動的值作進出價位判斷
所以等close再去算那個值就已經太慢了
謝謝客服一號,就等你寫好的函數囉~

  暱稱 : Brian
  郵件 : brianchung@multicharts.com.tw
  回覆日期 : 2009/11/30 06:27:40
謝謝客服一號
原來我週末沒上網,您有在幫我顧家^^


  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/30 18:35:24
新增  _OHLCPeriodsAgo 函數

inputs: pBarGroup(numericsimple ), PeriodsAgo( numericsimple ), oPeriodOpen( numericref ), oPeriodHigh( numericref ), oPeriodLow( numericref ), oPeriodClose( numericref ) ;
variables: var0( 0 ), pBars(0) ;
arrays: arr0[ 4, 300 ]( -1 ) ;
if Date <> Date[1] then pBars = 1 else pBars = pBars + 1;
if (PeriodsAgo > 300) then begin
oPeriodOpen = -1 ;
oPeriodHigh = -1 ;
oPeriodLow = -1 ;
oPeriodClose = -1 ;
_OHLCPeriodsAgo = -1 ;
end else begin
if (CurrentBar = 1 or mod(pBars, pBarGroup) = 1) then begin
  var0 = var0 - 1 ;
  if var0 = -1 then var0 = 300 ;
  arr0[ 1, var0 ] = O ;
  arr0[ 2, var0 ] = H ;
  arr0[ 3, var0 ] = L ;
  arr0[ 4, var0 ] = C ;
end else begin
  if (H > arr0[ 2, var0 ]) then arr0[ 2, var0 ] = H ;
  if (L < arr0[ 3, var0 ]) then arr0[ 3, var0 ] = L ;
  arr0[ 4, var0 ] = C ;
end ;

oPeriodOpen = arr0[ 1, Mod( var0 + PeriodsAgo, 301 ) ] ;
oPeriodHigh = arr0[ 2, Mod( var0 + PeriodsAgo, 301 ) ] ;
oPeriodLow = arr0[ 3, Mod( var0 + PeriodsAgo, 301 ) ] ;
oPeriodClose = arr0[ 4, Mod( var0 + PeriodsAgo, 301 ) ] ;
_OHLCPeriodsAgo = 1 ;
end ;

if false then Value1 = _OHLCPeriodsAgo[1] ;



新增  _OpenD 函數

inputs: pBarGroup(numericsimple ), PeriodsAgo( numericsimple ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( 0 ) ;
Value1 = _OHLCPeriodsAgo(pBarGroup, PeriodsAgo, var0, var1, var2, var3 ) ;
_OpenD = var0 ;



新增  _HighD 函數

inputs: pBarGroup(numericsimple ), PeriodsAgo( numericsimple ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( 0 ) ;
Value1 = _OHLCPeriodsAgo(pBarGroup, PeriodsAgo, var0, var1, var2, var3 ) ;
_HighD = var1;


新增  _LowD  函數

inputs: pBarGroup(numericsimple ), PeriodsAgo( numericsimple ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( 0 ) ;
Value1 = _OHLCPeriodsAgo(pBarGroup, PeriodsAgo, var0, var1, var2, var3 ) ;
_LowD = var2;


新增  _CloseD 函數




inputs: pBarGroup(numericsimple ), PeriodsAgo( numericsimple ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( 0 ) ;
Value1 = _OHLCPeriodsAgo(pBarGroup, PeriodsAgo, var0, var1, var2, var3 ) ;
_CloseD = var3 ;


新增 一個指標

vars: pO(0), pH(0), pL(0), pC(0), pMA(0);
pH = _HighD(6,0);
pMA = Average(pH, 2);
plot1(pMA, "30M-2MA");
print(date,time,H , pH, pMA);



畫面上商品設定為大台十分K
指標 以 6根K棒組合成新的 K棒
即時計算 60分K的高點做二K均線劃在圖上
但它是每十分就劃一次
若要每六十分劃一次,要在指標處動手腳


執行結果如下

1091126.00 855.007786.007786.007782.00
1091126.00 905.007794.007794.007790.00
1091126.00 915.007820.007820.007807.00
1091126.00 925.007825.007825.007822.50
1091126.00 935.007788.007825.007825.00
1091126.00 945.007787.007825.007825.00
1091126.00 955.007800.007800.007812.50
1091126.001005.007796.007800.007800.00
1091126.001015.007794.007800.007800.00
1091126.001025.007791.007800.007800.00
1091126.001035.007789.007800.007800.00
1091126.001045.007787.007800.007800.00
1091126.001055.007784.007784.007792.00
1091126.001105.007777.007784.007784.00
1091126.001115.007785.007785.007784.50
1091126.001125.007783.007785.007785.00
1091126.001135.007784.007785.007785.00
1091126.001145.007784.007785.007785.00
1091126.001155.007792.007792.007788.50
1091126.001205.007786.007792.007792.00
1091126.001215.007777.007792.007792.00
1091126.001225.007769.007792.007792.00
1091126.001235.007759.007792.007792.00
1091126.001245.007755.007792.007792.00
1091126.001255.007759.007759.007775.50
1091126.001305.007763.007763.007761.00
1091126.001315.007756.007763.007763.00
1091126.001325.007750.007763.007763.00
1091126.001335.007759.007763.007763.00
1091126.001345.007754.007763.007763.00
1091127.00 855.007630.007630.007696.50
1091127.00 905.007623.007630.007630.00
1091127.00 915.007619.007630.007630.00
1091127.00 925.007580.007630.007630.00
1091127.00 935.007572.007630.007630.00
1091127.00 945.007570.007630.007630.00
1091127.00 955.007567.007567.007598.50
1091127.001005.007565.007567.007567.00
1091127.001015.007558.007567.007567.00
1091127.001025.007557.007567.007567.00
1091127.001035.007564.007567.007567.00
1091127.001045.007564.007567.007567.00
1091127.001055.007580.007580.007573.50
1091127.001105.007574.007580.007580.00
1091127.001115.007590.007590.007585.00
1091127.001125.007590.007590.007590.00
1091127.001135.007582.007590.007590.00
1091127.001145.007574.007590.007590.00
1091127.001155.007572.007572.007581.00
1091127.001205.007568.007572.007572.00
1091127.001215.007553.007572.007572.00
1091127.001225.007552.007572.007572.00
1091127.001235.007531.007572.007572.00
1091127.001245.007527.007572.007572.00
1091127.001255.007530.007530.007551.00
1091127.001305.007527.007530.007530.00
1091127.001315.007500.007530.007530.00
1091127.001325.007493.007530.007530.00
1091127.001335.007479.007530.007530.00
1091127.001345.007455.007530.007530.00
1091130.00 855.007570.007570.007550.00
1091130.00 905.007563.007570.007570.00
1091130.00 915.007558.007570.007570.00
1091130.00 925.007582.007582.007576.00
1091130.00 935.007576.007582.007582.00
1091130.00 945.007580.007582.007582.00
1091130.00 955.007569.007569.007575.50
1091130.001005.007574.007574.007571.50
1091130.001015.007584.007584.007579.00
1091130.001025.007581.007584.007584.00
1091130.001035.007574.007584.007584.00
1091130.001045.007586.007586.007585.00
1091130.001055.007588.007588.007587.00
1091130.001105.007589.007589.007588.50
1091130.001115.007590.007590.007589.50
1091130.001125.007590.007590.007590.00
1091130.001135.007588.007590.007590.00
1091130.001145.007592.007592.007591.00
1091130.001155.007586.007586.007589.00
1091130.001205.007587.007587.007586.50
1091130.001215.007590.007590.007588.50
1091130.001225.007585.007590.007590.00
1091130.001235.007587.007590.007590.00
1091130.001245.007586.007590.007590.00
1091130.001255.007585.007585.007587.50
1091130.001305.007581.007585.007585.00
1091130.001315.007577.007585.007585.00
1091130.001325.007577.007585.007585.00
1091130.001335.007570.007585.007585.00
1091130.001345.007562.007585.007585.00


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/30 21:02:54
謝謝客服一號的函數!
請問如果是60分鐘要引用日線高點
需算幾根60分鐘K才能算出日線數據?
還有如果是週線高點的話要多少?

  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/30 21:20:13
謝謝客服一號的函數!
請問如果是60分鐘要引用日線高點
需算幾根60分鐘K才能算出日線數據?

5小時為一日,所以用5根

還有如果是週線高點的話要多少?

5日為一週,用25根

  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/30 21:26:09
請問1日是5根60分K
所以是每60分鐘數字才跳動一次是嗎?

我試了一下,似乎有點問題,數據差很多
在60分chart加入指標:

vars: pO(0), pH(0), pL(0), pC(0), pMA(0);
pH = _HighD(5,0);
pMA = XAverage(pH, 2);
plot1(pMA, "30M-2MA");
print(date,time,H , pH, pMA);

pMA最後顯示的是7592

然後在日chart加入指標:
vars: pO(0), pH(0), pL(0), pC(0), pMA(0);
//pH = _HighD(6,0);
pMA = XAverage(High,2);
plot1(pMA, "30M-2MA");
print(date,"  ",time,"  ",H,"  ",pH,"  ",pMA);


pMA最後顯示的是7624


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/30 22:07:20
我用的是60分鐘
  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/11/30 23:02:50
在此說聲抱歉,前面的語法,傳回的是單一變數,在使用上不能丟給既有的函數
要改用陣列型態 average等指令才能使用
我再改一下,Sorry


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/11/30 23:14:51
辛苦了!
我看Average與XAverage都是接收numericseries
不也都是陣列型態嗎?


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/12/02 11:39:21
請客服一號幫幫忙
無法引用日線週線我的波段策略就寫不下去了
謝謝

  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/12/02 21:38:21
X狐都辦的到,我想MC應該也可以吧?
  暱稱 : Brian
  郵件 : brianchung@multicharts.com.tw
  回覆日期 : 2009/12/02 21:54:24
一定可以的

當初我轉進奇狐,也是費了一番功夫,
有些easylanguge在數據引用、重複賦值很方便,在奇狐就要繞來繞去,也是搞很久。

不可否認,奇狐在多週期數據引用是蠻方便的,
不過有些函數也是後來慢慢加上的,
我相信我們也可以辦到,只是客服一號這二天忙了點^^

  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/12/03 16:19:12
新增 函數  array_Shift

inputs: pArray[x](NumericArrayRef );
vars: pI(0);
for pI = array_getmaxindex(pArray) DownTo 1 begin
pArray[pI] = pArray[pI-1];
end;
pArray[0] = 0;



新增 函數  _OHLCPeriodsAgoArr

inputs: pBarGroup(numericsimple ), oPeriodOpen[x]( NumericArrayRef ), oPeriodHigh[x]( NumericArrayRef ), oPeriodLow[x]( NumericArrayRef ), oPeriodClose[x]( NumericArrayRef ) ;
variables: pBars(0), pArrCnt(0) ;
if pArrCnt = 0 then pArrCnt = array_getmaxindex(oPeriodOpen);
if Date <> Date[1] then pBars = 1 else pBars = pBars + 1;

if (CurrentBar = 1 or mod(pBars, pBarGroup) = 1) then begin
  array_Shift(oPeriodOpen);
  array_Shift(oPeriodHigh);
  array_Shift(oPeriodLow);
  array_Shift(oPeriodClose);
  oPeriodOpen[1] = O ;
  oPeriodHigh[1] = H ;
  oPeriodLow[1]  = L ;
  oPeriodClose[1]= C ;
end else begin
  if (H > oPeriodHigh[1]) then oPeriodHigh[1] = H ;
  if (L < oPeriodLow[1]) then oPeriodLow[1] = L ;
  oPeriodClose[1] = C ;
end ;
_OHLCPeriodsAgoArr = 1 ;

if false then Value1 = _OHLCPeriodsAgoArr[1] ;



新增指標  _T01

var: pMA(0), pMA2(0), pMA3(0);
array: pO[100](-1),pH[100](-1),pL[100](-1),pC[100](-1);

Value1 = _OHLCPeriodsAgoArr(5,pO,pH,pL,pC);

pMA = AverageArray(pC, 2);
pMA2 = Average(C, 2);
pMA3 = Average(C of data2, 2);

plot1(pMA ,  "MA1");
plot2(pMA2 , "MA2");
plot3(pMA3 , "MA3");



您可以比對畫面上的這三個數值
要套用在其他函數的話,請選用尾巴有帶 array  的函數
例如 highest -> highestarray


  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/12/03 17:19:44
函數、指標都新增之後
插入chart時出現錯誤訊息:
2資料遺漏。請設定圖表資料。

  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/12/03 17:33:50

為了比對,所以 MA3 有用到  data2

你加個 data2  是 data1 的五倍就可以了
例 data1  是1分    data2 是5分


這種做法的優點是,不需要用到 data2
缺點是長短線只能是倍數,做不到 2分對3分這樣的組合

補充:
Value1 = _OHLCPeriodsAgoArr(5,pO,pH,pL,pC);

裡面的 5 就是  幾根K棒要合併成一根



  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/12/03 17:52:37
謝謝客服一號的嘔心瀝血之作
這個等我把早上問的進場出場同時成立的問題解決後再試試看

  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/12/04 09:56:03
請問只能用在array型態嗎?
XAverage接收的是NumericSeries
我試過不能套用
還是哪裡我沒設定好? 謝謝

  暱稱 : 客服一號
  郵件 : 不顯示
  回覆日期 : 2009/12/04 18:10:08

是呀 NumericSeries 是時間序列的陣列,跟一般的陣列不一樣
我也試著想找方法來轉換,但沒辦法

而且  帶有array的函數的資料都是從 1 開始取陣列值做咚
沒有帶 array 的函數是從 0 開始取陣列值作咚

所以要自已寫這類的 雙型態函數時,除了COPY過來改變數型態之外,也要記得,它的起始值不同

也因此我寫的那個函數傳回的值  pH[1] 代表的是當根資料,而不像 H[1] 是指前一根的資料



至於 XAverage 沒有 array 型的函數可以用,就只能自已打造了



  暱稱 : J.I.
  郵件 : 不顯示
  回覆日期 : 2009/12/04 19:14:58
晴天霹靂啊.......
客服一號就好人做到底吧,幫忙寫個XAverage可以用的
你寫不出來的話,我是新手更是寫不出來
沒這個我的策略也完蛋了
我知道你們工作忙所以有空慢慢寫就好
麻煩你了,感謝~~




標題:如何引用多週期數據?
http://www.multicharts.com.tw/Discuss/Discuss_List_Reply.aspx?Zone_ID=5&List_ID=16&page=4



default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

brianchung@multicharts.com.tw.jpg (8.07 KB)

brianchung@multicharts.com.tw.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

brianchung@multicharts.com.tw.jpg (8.07 KB)

brianchung@multicharts.com.tw.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg

default.jpg (28.17 KB)

default.jpg

folkchen@multicharts.com.tw.jpg (17.1 KB)

folkchen@multicharts.com.tw.jpg

default.jpg (28.17 KB)

default.jpg


论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表