股票量化交易軟件:赫茲量化軟件 MQL5 中創(chuàng)建多色彩指標(biāo)
為什么要用彩色指標(biāo)?
使用彩色指標(biāo),您即能夠:
于燭形圖上顯示更多信息。
實現(xiàn)指標(biāo)混合(MACD 顏色取決于 RSI 值)。
突顯指標(biāo)的重要信號。
只是單純地裝飾美化您的客戶端。
只需要開動您的想像力,讓您的交易更加便利。
MQL5 基礎(chǔ)
我們從指標(biāo)原理著手開始。
總體來講,指標(biāo)會獲取輸入數(shù)據(jù)(價格、其它指標(biāo)數(shù)據(jù)),履行一些計算并向多個緩沖區(qū)填入相應(yīng)數(shù)據(jù)??蛻舳藭?biāo)繪源于緩沖區(qū)的信息,該信息由指標(biāo)根據(jù)其繪制類型提供。
繪圖風(fēng)格由開發(fā)人員定義。指標(biāo)緩沖區(qū)為雙精度數(shù)組,于全局層面聲明。如果某風(fēng)格需要一個以上的緩沖區(qū),則可將多個緩沖區(qū)捏合到圖形標(biāo)繪中。如果您從未創(chuàng)建過自定義指標(biāo),則可以閱讀相關(guān)文章(其中包含基礎(chǔ)知識的詳細(xì)介紹)
下面是彩色指標(biāo)的最精簡代碼,我來講講其組成部分:
//+------------------------------------------------------------------+ //|???????????????????????????????????????? test_color_indicator.mq5 | //|???????????????????????????????????????????????????????????? ProF | //|??????????????????????????????????????????????????????????http:// | //+------------------------------------------------------------------+ #property copyright "ProF"????????????????????? //作者 #property indicator_separate_window??????????? ?//指標(biāo)將在獨立的窗口中繪制 #property indicator_buffers 2?????????????????? //指標(biāo)緩存數(shù)量 #property indicator_plots 1???????????????????? //繪制指標(biāo)個數(shù) #property indicator_type1 DRAW_COLOR_HISTOGRAM??//繪圖樣式 - 彩色柱狀圖 #property indicator_width1 3??????????????????? //繪圖圖形的寬度(可選) #property indicator_color1 Red,Green,BlueViolet //確定3種顏色用來繪圖 //緩存聲明 double buffer_line[]/*Data Buffer*/, buffer_color_line[]/*Color index buffer*/; //+------------------------------------------------------------------+ //| 自定義指標(biāo)初始化函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????? | //+------------------------------------------------------------------+ int OnInit() ??{ //為指標(biāo)緩存分配數(shù)據(jù)數(shù)組 ?? SetIndexBuffer(0,buffer_line,INDICATOR_DATA); //為指標(biāo)緩存分配顏色索引數(shù)組 ?? SetIndexBuffer(1,buffer_color_line,INDICATOR_COLOR_INDEX); //確定用來繪圖的顏色索引數(shù)量 ?? PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2); //為每個索引設(shè)置顏色 ?? PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Blue);?? //0號索引 -> 藍(lán)色 ?? PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Orange); //1號索引 -> 橙色 ?? return(0); ??} //+------------------------------------------------------------------+ //| 自定義指標(biāo)迭代函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????? | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, ????????????????const int prev_calculated, ????????????????const datetime &time[], ????????????????const double &open[], ????????????????const double &high[], ????????????????const double &low[], ????????????????const double &close[], ????????????????const long &tick_volume[], ????????????????const long &volume[], ????????????????const int &spread[]) ??{ ?? //我們?yōu)槊總€柱形循環(huán)填充數(shù)據(jù)緩存,以及顏色索引緩存 ?? for(int i=prev_calculated;i<=rates_total-1;i++) ???? { ??????//讓我們添加一個簡單的繪圖條件 -> 如果開盤價格大于收盤價,那么: ??????if(open[i]>close[i]) ????????{?? buffer_color_line[i]=0;?? }? ? ? ?//分配顏色索引為0 ??????else ????????{??buffer_color_line[i]=1;?? }?? ? ? //分配顏色索引為1 ?????? ??????//確定繪圖數(shù)據(jù),在這里是開盤價 ??????buffer_line[i]=open[i]; ???? } ?? return(rates_total-1); //返回已經(jīng)計算的柱形的數(shù)量, ???????????????????????? //由于最后一個柱形要重算,減1 ??} //+------------------------------------------------------------------+
我們來檢查一下編寫彩色指標(biāo)的細(xì)節(jié):
#property indicator_buffers 2 ///指標(biāo)緩存數(shù)量 #property indicator_plots 1?? //繪圖圖形個數(shù)
我們于第一行中指定指標(biāo)緩沖區(qū)的數(shù)量,本例中有兩個緩沖區(qū):
指標(biāo)數(shù)據(jù)緩沖區(qū),本例中為開盤價;
彩色索引緩沖區(qū)。
我們再于第二行中指定圖形的數(shù)量。區(qū)分開圖形與指標(biāo)緩沖區(qū)非常重要。圖形是指標(biāo)的線(燭形、柱、箭頭等)。指標(biāo)緩沖區(qū)是一個含數(shù)據(jù)的數(shù)組,需要標(biāo)繪,帶有彩色索引的數(shù)組或是供指標(biāo)內(nèi)部計算使用的數(shù)組(該類型不于指標(biāo)窗口中繪制)。
標(biāo)繪的數(shù)量可小于等于緩沖區(qū)的數(shù)量,它取決于繪制風(fēng)格以及用于計算的緩沖區(qū)的數(shù)量。繪制風(fēng)格與每種風(fēng)格需要的緩沖區(qū)數(shù)量表,請見?赫茲量化軟件“繪制風(fēng)格”章節(jié)。
“最好玩的內(nèi)容”從這里開始:
#property indicator_type1 DRAW_COLOR_HISTOGRAM??//繪圖樣式 - 彩色柱狀圖 #property indicator_width1 3????????????????????//繪制線寬(可選) #property indicator_color1 Red,Green,BlueViolet //確定3種顏色用來繪圖
我們于第一行中指定繪圖風(fēng)格,本例的繪圖風(fēng)格是從零線開始的一個直方圖。此繪圖風(fēng)格要求一個數(shù)據(jù)緩沖區(qū)和一個彩色索引緩沖區(qū)。所有包含 "COLOR" 一詞的繪圖風(fēng)格都要求一個彩色索引緩沖區(qū)。
我們再于第二行中將行寬指定為 3 像素,默認(rèn)行寬是 1 像素。赫茲量化軟件
在第三行中,我們指定圖形索引的顏色,本例中我們指定 "Red", "Green" 和 "BlueViolet" 三種顏色。顏色索引從零開始:0-"Red",1-"Green",2-"BlueViolet"。這些都是設(shè)置圖形顏色必需的顏色。顏色的指定有多種方式,其中就包括 "#property indicator_color1"。這是一種“靜態(tài)”方法,用于程序編譯階段。后文我們還會討論第二種方法。
double buffer_line[]/*數(shù)據(jù)緩存*/, buffer_color_line[]/*顏色索引緩存*/;
我們在這里聲明兩個用作緩沖區(qū)的數(shù)組,第一個會被用作一個數(shù)據(jù)緩沖區(qū),而第二個則會被用于彩色索引,兩個全作為雙精度型數(shù)組聲明。
我們一起來研究指標(biāo)初始化函數(shù):赫茲量化軟件
SetIndexBuffer(0,buffer_line,INDICATOR_DATA);
我們在這里為指標(biāo)緩沖區(qū)分配一個數(shù)組,指定的 "INDICATOR_DATA" 緩沖區(qū)類型意味著該緩沖區(qū)將被用于存儲指標(biāo)值(即,它是指標(biāo)的數(shù)據(jù)緩沖區(qū))。注意第一個參數(shù)為零 (0) - 它是緩沖區(qū)索引。赫茲量化軟件
SetIndexBuffer(1,buffer_color_line,INDICATOR_COLOR_INDEX);
我們在這里為指標(biāo)緩沖區(qū)分配一個數(shù)組,并指定 "INDICATOR_COLOR_INDEX" 作為緩沖區(qū)類型 - 也就是說,此緩沖區(qū)會被用于存儲指標(biāo)每個柱的顏色索引。注意第一個參數(shù)為 (1) - 它是緩沖區(qū)索引。赫茲量化軟件
緩沖區(qū)定序必須具體:首先是指標(biāo)數(shù)據(jù)緩沖區(qū),然后是顏色索引緩沖區(qū)。
最后,再講講指定圖形顏色的第二種方式(指定顏色索引):
//確定用來繪圖的顏色索引數(shù)量 PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);
我們在這里指定顏色索引的數(shù)量。此函數(shù)的第一個參數(shù)為 "0",它是圖形索引。注意這種情況下我們必須指定顏色索引的數(shù)量(第一種方法中會由編譯器計算)。
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Blue);?? //0號索引 -> 藍(lán)色 PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,Orange); //1號索引 -> 橙色
我們在這里指定每個索引的顏色。此函數(shù)的第一個參數(shù)是圖形索引,第三個參數(shù)是顏色索引,從零開始。設(shè)置顏色索引的第二種方式存在下述差異:顏色數(shù)量及其索引可以動態(tài)指定,比如利用函數(shù)。如果您兩種方法都用,請記得動態(tài)方法會推翻靜態(tài)方法(也就是第一種方法)。
接下來是研究?OnCalculate?函數(shù),我們會為指標(biāo)的圖形計算緩沖區(qū)的值。我們選擇直方圖最簡單的顏色選擇規(guī)范,如果開盤價高于收盤價,則我們?yōu)楫?dāng)前的緩沖區(qū)元素分配的顏色索引(于 "buffer_color_line" 數(shù)組中)為零 (0)。前面已經(jīng)指定,零 (0) 顏色索引對應(yīng)的是 "Blue" 顏色。
如果開盤價低于收盤價,則我們分配為顏色索引為 1,對應(yīng) Orange 顏色。此為該簡單示例:
足見其簡單,只需要我們發(fā)揮一點想像力就好了。赫茲量化軟件
顏色設(shè)置的方法
現(xiàn)在,我們來詳細(xì)地介紹一下顏色設(shè)置。
根據(jù)“MQL5 參照”,赫茲量化軟件可通過不同的方法來指定:
常值表示;
數(shù)值表示;
利用顏色名稱表示。
我們?nèi)伎匆豢础?/p>
?