在遠航版指標編輯器中,我們采取了最接近自然語言的編程語言——Python來編寫指標。 為了用戶使用方便,我們編寫了快速入門教程,讓沒有任何編程基礎(chǔ)的用戶也能快速上手編寫自己的指標。 文檔主要分為兩個部分:
編寫指標并不難,記住四個步驟:讀取數(shù)據(jù)——計算數(shù)據(jù)——存儲數(shù)據(jù)——畫出數(shù)據(jù)。 * 紅色函數(shù)為必看函數(shù) * 強烈建議把文檔仔細地研讀一遍 Python基礎(chǔ)語法Python在編寫指標時用到的基礎(chǔ)語法主要有:
基礎(chǔ)函數(shù)函數(shù) 功能描述 for循環(huán)函數(shù) 使用for循環(huán)來獲得范圍性數(shù)據(jù)或在范圍內(nèi)進行重復計算 for i in range(a, b): 使用方法:
參數(shù):
注意事項/建議:一般來說, 使用rang(0, total)能應對絕大多數(shù)情況. 其中total是已經(jīng)定義的值, 表示全部K線的數(shù)量, 可直接使用. 返回:無 示例:#井號表示注釋. #下面的for循環(huán)表示取得所有K線上的最高價, 最低價以及計算每周期(日)的振幅, 并儲存. 最高價列表 = [ ] #初始化(新建)最高價列表, 詳見列表函數(shù). 最低價列表 = [ ] #初始化(新建)最低價列表. for i in range(0, total): 最高價=get("最高價", i) #獲取第i根K線(日)上的最高價的值, 并將它儲存在最高價這個變量里, 詳見取值函數(shù). 最低價=get("最低價", i) #獲取第i根K線(日)上的最低價的值. tips: 因為i會從0增加至total, 雖然代碼不變, 但是i一直在變化. 因此, 該代碼實際上是取了total次最低價的值. 最高價列表.append(最高價) #將獲取的每一次最高價添加到”最高價列表”中, 詳情見列表函數(shù). 最低價列表.append(最低價) #將獲取的每一次最低價添加到”最低價列表”中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 中文函數(shù)示例:#井號表示注釋. #下面的for循環(huán)表示取得所有K線上的最高價, 最低價以及計算每周期(日)的振幅, 并儲存. 最高價列表 = [ ] #初始化(新建)最高價列表, 詳見列表函數(shù). 最低價列表 = [ ] #初始化(新建)最低價列表. for i in range(0, total): 最高價=取值("最高價", i) #獲取第i根K線(日)上的最高價的值, 并將它儲存在最高價這個變量里, 詳見取值函數(shù). 最低價=取值("最低價", i) #獲取第i根K線(日)上的最低價的值. tips: 因為i會從0增加至total, 雖然代碼不變, 但是i一直在變化. 因此, 該代碼實際上是取了total次最低價的值. 最高價列表.append(最高價) #將獲取的每一次最高價添加到”最高價列表”中, 詳情見列表函數(shù). 最低價列表.append(最低價) #將獲取的每一次最低價添加到”最低價列表”中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. List列表函數(shù) 列表函數(shù)主要用于臨時存儲、讀取數(shù)據(jù), 將需要的數(shù)據(jù)暫時存起來以便之后讀取后進行計算 List 使用方法:1. 初始化列表: 列表名 = [ ] 2. 添加數(shù)值: 列表名.append(數(shù)值) 3. 引用數(shù)值: 數(shù)值 = 列表名[i] 參數(shù):
注意事項/建議:1. 列表函數(shù)與save()函數(shù)都能用于存儲, 其最大的區(qū)別在于save()是最終儲存函數(shù), 儲存完了能直接用于畫線函數(shù), 其與畫線函數(shù)的參數(shù)相對應, 但無法讀取修改其中的數(shù)據(jù). 而列表在編寫指標時是拿來臨時存儲、計算數(shù)據(jù)使用. 換句話說, 列表函數(shù)是在中間過程臨時使用的, 用于計算等操作. 但是無法用于畫線. 2. 其中, 列表名[-1]表示列表中的最后一個數(shù), 列表名[-2]表示倒數(shù)第二個數(shù), 以此類推. 返回:無 示例:#井號表示注釋. 振幅列表 = [ ] #初始化(新建)振幅列表. for i in range(0, total): 最高價=get("最高價", i) #獲取第i根K線上的最高價的值. 最低價=get("最低價", i) #獲取第i根K線上的最低價的值. 昨收價=get("昨收價", i) #獲取第i根K線上的昨收價的值. 振幅=(最高價 - 最低價)/昨收價 #計算每一根K線上的振幅. 振幅列表.append(振幅) #將計算的每一次振幅按順序添加到振幅列表中, 之所以使用列表而不是save是因為振幅并不用于畫振幅折線, 而是用于后續(xù)其他計算, 例如篩選出振幅大于5%的K線(日). #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 最后一日振幅 = 振幅列表[-1] #引用列表中的數(shù)據(jù). 列表中的i為-1表示最后一個數(shù), 詳見注意事項. 倒數(shù)第五日振幅 = 振幅列表[-5] text(10, total-10, str(最后一日振幅), "#FFFFFF") #在倒數(shù)第10根K線處寫出最后一日振幅的值. 詳見寫文字函數(shù). 中文函數(shù)示例:#井號表示注釋. 振幅列表 = [ ] #初始化(新建)振幅列表. for i in range(0, total): 最高價=取值("最高價", i) #獲取第i根K線上的最高價的值. 最低價=取值("最低價", i) #獲取第i根K線上的最低價的值. 昨收價=取值("昨收價", i) #獲取第i根K線上的昨收價的值. 振幅=(最高價 - 最低價)/昨收價 #計算每一根K線上的振幅. 振幅列表.append(振幅) #將計算的每一次振幅按順序添加到振幅列表中, 之所以使用列表而不是save是因為振幅并不用于畫振幅折線, 而是用于后續(xù)其他計算, 例如篩選出振幅大于5%的K線(日). #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 最后一日振幅 = 振幅列表[-1] #引用列表中的數(shù)據(jù). 列表中的i為-1表示最后一個數(shù), 詳見注意事項. 倒數(shù)第五日振幅 = 振幅列表[-5] 寫文字(10, total-10, str(最后一日振幅), "#FFFFFF") #在倒數(shù)第10根K線處寫出最后一日振幅的值. 詳見寫文字函數(shù). if條件判斷函數(shù) 判斷條件語句 if 條件語句1: (TAB)執(zhí)行語句1 elif 條件語句2: (TAB)執(zhí)行語句2 else: (TAB)執(zhí)行語句3 使用方法:if 表示: 如果"條件語句1"滿足條件, 那么系統(tǒng)將執(zhí)行"執(zhí)行語句1". 否則, 跳轉(zhuǎn)到elif. (elif是else if的縮寫) elif 的前提是if 后的 "條件語句1"不滿足條件. elif 表示: 如果"條件語句2"滿足條件, 那么系統(tǒng)將執(zhí)行"執(zhí)行語句2". 否則, 跳轉(zhuǎn)到else. else 的前提是前面的"條件語句們"都不滿足條件. else 表示: 不滿足條件語句1和2的其他情況, 執(zhí)行"執(zhí)行語句3", 也可以理解為"無"條件執(zhí)行"執(zhí)行語句3". 參數(shù):
注意事項/建議:1. 在條件語句結(jié)束后(if, elif, else后面)不要忘記加上":". 2. if條件判斷語句可以沒有elif, 也可以有多個elif. 3. elif的用法是在需要多于兩個判斷條件的情形下使用的, 用文字表達就是, 如果不是這樣(if), 不是那樣(elif), 最后就那樣(else). 4. if條件判斷語句中, 可以只有if而沒有else, 但是不能有elif而沒有else. else有且只能有一個. 5. 執(zhí)行語句中可以執(zhí)行的代碼不止一行代碼. 返回:無 示例:#井號表示注釋. #下面的for循環(huán)用來取所有的收盤價和昨收價, 再用if判斷語句進行數(shù)據(jù)計算. for i in range(0, total): 收盤價=get("收盤價", i) #獲取第i根K線(日)上的收盤價的值, 并將它儲存在收盤價這個變量里, 詳見取值函數(shù). 昨收價=get("昨收價", i) #獲取第i根K線(日)上的昨收價的值. if 收盤價/昨收價 >= 1.099: #條件語句:看 收盤價/昨收價的值 是否大于等于1.099, 來簡單判斷今天是否漲停. text(收盤價*0.9, i, "漲停", "#FFFFFF") #若漲停. 系統(tǒng)會在收盤價*0.9處寫上"漲停"這些字符, 詳見寫文字函數(shù). elif 收盤價/昨收價 <= 0.099: #elif來簡單判斷是否跌停. text(收盤價*0.9, i, "跌停", "#FFFFFF") #在收盤價*0.9處寫出"跌停"字樣. else: #else表示既不漲停又不跌停的情況. 本例為了解釋加上了else, 若用不需要可以不用加上else. text(收盤價*0.9, i, "0", "#FFFFFF") #在收盤價*0.9處寫上0. #將光標移至井號前表示if判斷語句結(jié)束. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #為了美觀畫出該股票的K線圖. 詳見畫K線函數(shù). for i in range(0, total): 最高價=get("最高價", i) #獲取最高價. 開盤價=get("開盤價", i) #獲取開盤價. 最低價=get("最低價", i) #獲取最低價. 收盤價=get("收盤價", i) #獲取收盤價. hevo.save("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.kline("K") #畫出K線. 中文函數(shù)示例:#井號表示注釋. #下面的for循環(huán)用來取所有的收盤價和昨收價, 再用if判斷語句進行數(shù)據(jù)計算. for i in range(0, total): 收盤價=取值("收盤價", i) #獲取第i根K線(日)上的收盤價的值, 并將它儲存在收盤價這個變量里, 詳見取值函數(shù). 昨收價=取值("昨收價", i) #獲取第i根K線(日)上的昨收價的值. if 收盤價/昨收價 >= 1.099: #條件語句:看 收盤價/昨收價的值 是否大于等于1.099, 來簡單判斷今天是否漲停. 寫文字(收盤價*0.9, i, "漲停", "#FFFFFF") #若漲停. 系統(tǒng)會在收盤價*0.9處寫上"漲停"這些字符, 詳見寫文字函數(shù). elif 收盤價/昨收價 <= 0.099: #elif來簡單判斷是否跌停. 寫文字(收盤價*0.9, i, "跌停", "#FFFFFF") #在收盤價*0.9處寫出"跌停"字樣. else: #else表示既不漲停又不跌停的情況. 本例為了解釋加上了else, 若用不需要可以不用加上else. 寫文字(收盤價*0.9, i, "0", "#FFFFFF") #在收盤價*0.9處寫上0. #將光標移至井號前表示if判斷語句結(jié)束. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #為了美觀畫出該股票的K線圖. 詳見畫K線函數(shù). for i in range(0, total): 最高價=取值("最高價", i) #獲取最高價. 開盤價=取值("開盤價", i) #獲取開盤價. 最低價=取值("最低價", i) #獲取最低價. 收盤價=取值("收盤價", i) #獲取收盤價. 多值.畫線存儲("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.K線("K") #畫出K線. 注意事項
指標API在編寫指標中,一些常用但邏輯復雜的函數(shù),例如EMA,ZIG等,我們會將其封裝好提供大家使用。 但是有一些邏輯較為簡單且靈活地函數(shù),例如CROSS,BARSLAST等,我們會使用示例的形式向大家演示。當然,也可直接復制代碼。 同時, 我們也提供了中英文兩種函數(shù)名, 可以按照各自口味自由取食. 系統(tǒng)函數(shù)函數(shù) 功能描述 取值函數(shù) 獲取股票相關(guān)的數(shù)據(jù) 使用方法:get("數(shù)據(jù)名", i) 取值("數(shù)據(jù)名", i) 參數(shù):
注意事項/建議:1. 編輯器允許使用中文變量名, 但是要注意標點符號一定要是英文標點符號, 例如, 小括號( ), 冒號 " ", 逗號 , 等. 否則系統(tǒng)將報錯, 無法運行. 2. 數(shù)據(jù)名的輸入應是字符串, i的輸入為整數(shù). 返回:該K線(日)上的值 示例:示例1: #井號表示注釋. 第100天最高價 = get("最高價", 100) #將獲取的第100根K線(日)上的最高價儲存在"第100天最高價"這個變量中 示例2: #井號表示注釋. #獲取該股票所有周期(日)的最高價 最高價列表 = [ ] #初始化(新建)最高價列表, 詳見列表函數(shù) for i in range(0, total): 最高價=get("最高價", i) #第二個參數(shù)的i, 代指上一行for i in...里的i. 也就是說當循環(huán)不停地進行, i的值不斷地變化, get("最高價", i)里的i值也不斷地變化. 最高價列表.append(最高價) #將獲取的每一次最高價添加到“最高價列表”中, 詳見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 中文函數(shù)示例:示例1: #井號表示注釋. 第100天最高價 = 取值("最高價", 100) #將獲取的第100根K線(日)上的最高價儲存在"第100天最高價"這個變量中 示例2: #井號表示注釋. #獲取該股票所有周期(日)的最高價 最高價列表 = [ ] #初始化(新建)最高價列表, 詳見列表函數(shù) for i in range(0, total): 最高價=取值("最高價", i) #第二個參數(shù)的i, 代指上一行for i in...里的i. 也就是說當循環(huán)不停地進行, i的值不斷地變化, get("最高價", i)里的i值也不斷地變化. 最高價列表.append(最高價) #將獲取的每一次最高價添加到“最高價列表”中, 詳見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 存儲函數(shù) 將數(shù)據(jù)存儲在對象中, 方便畫線時調(diào)用 save( ) 畫線儲存( ) 使用方法:save("對象名", 數(shù)值, i) hevo.save("對象名", 數(shù)值1, 數(shù)值2, i) hevo.save("對象名", 數(shù)值1, 數(shù)值2, 數(shù)值3, i) hevo.save("對象名", 數(shù)值1, 數(shù)值2, 數(shù)值3, 數(shù)值4, i) 畫線存儲("對象名", 數(shù)值, i) 多值.畫線存儲("對象名", 數(shù)值1, 數(shù)值2, i) 多值.畫線存儲("對象名", 數(shù)值1, 數(shù)值2, 數(shù)值3, i) 多值.畫線存儲("對象名", 數(shù)值1, 數(shù)值2, 數(shù)值3, 數(shù)值4, i) 參數(shù):
注意事項/建議:1. 編輯器允許使用中文變量名, 但是要注意標點符號一定要是英文標點符號, 例如, 小括號( ), 冒號 " ", 逗號 , 等. 否則系統(tǒng)將報錯, 無法運行. 2. 對象名的輸入應是字符串, 數(shù)值的輸入可以是整數(shù)也可以是小數(shù)點, i的輸入為整數(shù). 3. 對象名與數(shù)值名可以重復, 系統(tǒng)能自動區(qū)別. 但是兩者不需要完全相同. 詳見例子 4. 存儲函數(shù)還是一個調(diào)試用的函數(shù), 儲存的對象名的數(shù)據(jù)可以在"查看計算結(jié)果"中查看, 看是否有錯誤, 顯示的范圍為begin到end. 返回:無 示例:#井號表示注釋. #獲取該股票所有周期(日)的最高價, 儲存并用于畫最高價的折線. for i in range(0, total): 最高價=get("最高價", i) #獲取每條K線(日)上的最高價并儲存在“最高價”變量中. save("最高價", 最高價, i) #將獲取的每一次最高價的值儲存在"最高價"這個對象中. "最高價"在畫線后會直接展示出"最高價"這個名字. 之所以一定要將數(shù)據(jù)儲存在對象中是因為, "最高價"是臨時變量(每次i變化, "最高價"的值也跟著變化), 為了保證之后畫線的時候能讀取到所有數(shù)據(jù), 所以要將數(shù)據(jù)存在對象中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 中文函數(shù)示例:#井號表示注釋. #獲取該股票所有周期(日)的最高價, 儲存并用于畫最高價的折線. for i in range(0, total): 最高價=取值("最高價", i) #獲取每條K線(日)上的最高價并儲存在“最高價”變量中. 畫線存儲("最高價", 最高價, i) #將獲取的每一次最高價的值儲存在"最高價"這個對象中. "最高價"在畫線后會直接展示出"最高價"這個名字. 之所以一定要將數(shù)據(jù)儲存在對象中是因為, "最高價"是臨時變量(每次i變化, "最高價"的值也跟著變化), 為了保證之后畫線的時候能讀取到所有數(shù)據(jù), 所以要將數(shù)據(jù)存在對象中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 畫折線函數(shù) 將儲存的點畫成折線 draw.curve( ) 繪制.曲線( ) 配套存儲: save("對象名", 數(shù)值, i) 配套存儲: 畫線存儲("對象名", 數(shù)值, i) 使用方法:draw.curve("對象名") draw.curve("對象名", 顏色序號) draw.curve("對象名", "顏色代碼") draw.curve("對象名", "顏色代碼", 寬度) 繪制.曲線("對象名") 繪制.曲線("對象名", 顏色序號) 繪制.曲線("對象名", "顏色代碼") 繪制.曲線("對象名", "顏色代碼", 寬度) 參數(shù):
注意事項/建議:1. 畫折線四個函數(shù)任選其一就可以. 2. 前三個函數(shù)默認寬度為1. 返回:無 示例:#井號表示注釋. #獲取該股票所有周期(日)的最高價, 并畫最高價的折線. for i in range(0, total): 最高價=get("最高價", i) #獲取每條K線(日)上的最高價. save("最高價", 最高價, i) #將獲取的每一次最高價儲存在“最高價”中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.curve("最高價") #畫出最高價折線圖 中文函數(shù)示例:#井號表示注釋. #獲取該股票所有周期(日)的最高價, 并畫最高價的折線. for i in range(0, total): 最高價=取值("最高價", i) #獲取每條K線(日)上的最高價. 畫線存儲("最高價", 最高價, i) #將獲取的每一次最高價儲存在“最高價”中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.曲線("最高價") #畫出最高價折線圖 畫右坐標軸折線函數(shù) 以右坐標軸為基準畫折線圖 draw.curve_right( ) 繪制.右坐標軸曲線( ) 配套存儲: save("對象名", 數(shù)值, i) 配套存儲: 畫線存儲("對象名", 數(shù)值, i) 使用方法:draw.curve_right("對象名") draw.curve_right("對象名", 顏色序號) draw.curve_right("對象名", "顏色代碼") draw.curve_right("對象名", "顏色代碼", 寬度) 繪制.右坐標軸曲線("對象名") 繪制.右坐標軸曲線("對象名", 顏色序號) 繪制.右坐標軸曲線("對象名", "顏色代碼") 繪制.右坐標軸曲線("對象名", "顏色代碼", 寬度) 參數(shù):
注意事項/建議:1. 畫折線四個函數(shù)任選其一就可以. 2. 前三個函數(shù)默認寬度為1. 3. 該函數(shù)以右坐標軸為基準畫線, 與以左坐標軸為基準的畫線函數(shù)相互獨立, 不沖突. 返回:無 示例:#井號表示注釋. #以左坐標軸為刻度畫出以%為單位的振幅折線圖. for i in range(0, total): 最高價 = get("最高價", i) #獲取最高價 最低價 = get("最低價", i) #獲取最低價 昨收價 = get("昨收價", i) #獲取昨收價 振幅 = (最高價 - 最低價)/昨收價 #計算振幅 收盤價 = get("收盤價", i) #獲取收盤價 save("振幅", 振幅, i) #儲存振幅到"振幅"對象中 save("收盤價", 收盤價, i) #儲存收盤價到"收盤價"對象中 draw.curve("收盤價") #畫出收盤價折線圖 draw.curve_right("振幅") #畫出右坐標軸的振幅折線圖 set.coordinate_axis("振幅", "%") #將"振幅"對象設(shè)置為"%"單位, 詳見設(shè)置坐標軸單位函數(shù) 中文函數(shù)示例:#井號表示注釋. #以左坐標軸為刻度畫出以%為單位的振幅折線圖. for i in range(0, total): 最高價 = 取值("最高價", i) #獲取最高價 最低價 = 取值("最低價", i) #獲取最低價 昨收價 = 取值("昨收價", i) #獲取昨收價 振幅 = (最高價 - 最低價)/昨收價 #計算振幅 收盤價 = 取值("收盤價", i) #獲取收盤價 畫線存儲("振幅", 振幅, i) #儲存振幅到"振幅"對象中 畫線存儲("收盤價", 收盤價, i) #儲存收盤價到"收盤價"對象中 繪制.曲線("收盤價") #畫出收盤價折線圖 繪制.右坐標軸曲線("振幅") #畫出右坐標軸的振幅折線圖 設(shè)置.坐標軸("振幅", "%") #將"振幅"對象設(shè)置為"%"單位, 詳見設(shè)置坐標軸單位函數(shù) 畫K線函數(shù) 將儲存的點畫成K線圖 使用方法:draw.kline("對象名") draw.kline("對象名", 顏色序號) 繪制.K線("對象名") 繪制.K線("對象名", 顏色序號) draw.american_kline("對象名") 繪制.美國K線("對象名") 配套存儲: hevo.save("對象名", 數(shù)值1, 數(shù)值2, 數(shù)值3, 數(shù)值4, i) 配套存儲: 多值.畫線存儲("對象名", 數(shù)值1, 數(shù)值2, 數(shù)值3, 數(shù)值4, i) 參數(shù):
注意事項/建議:畫K線必須存儲"最高價", "開盤價", "最低價", "收盤價"四個數(shù)據(jù), 并且一定要按照最高、開盤、最低、收盤的順序儲存. 若不按照順序儲存數(shù)據(jù)將會出現(xiàn)奇怪的K線. 詳見例子. K線和美國K線兩者只能同時出現(xiàn)一個. 若是帶有顏色序號的K線, 則該K線函數(shù)會以該顏色為唯一色畫出K線實心柱狀圖. 若有多個K線對象, 每一個對象都會返回一個目前可視范圍內(nèi)最大值和最小值. 例如示例2, 有3個對象, 畫出了3組K線, 則屏幕上會分別顯示出3組對象里的最大值和最小值. 返回:無 示例:#井號表示注釋. #畫出該股票的K線圖. for i in range(0, total): 最高價=get("最高價", i) #獲取最高價. 開盤價=get("開盤價", i) #獲取開盤價. 最低價=get("最低價", i) #獲取最低價. 收盤價=get("收盤價", i) #獲取收盤價. hevo.save("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.kline("K") #畫出K線. draw.american_kline("K") #畫出美國K線. #井號表示注釋. #畫出該股票自定義顏色的K線圖. for i in range(0, total): 最高價=get("最高價", i) #獲取最高價. 開盤價=get("開盤價", i) #獲取開盤價. 最低價=get("最低價", i) #獲取最低價. 收盤價=get("收盤價", i) #獲取收盤價. 昨收價=get("昨收價", i) #獲取昨收價. if 收盤價>=昨收價*1.099: hevo.save("漲停", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"漲停"對象上. elif 收盤價>昨收價: hevo.save("漲", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"漲"對象上. else: hevo.save("跌", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"跌"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.kline("漲停", 7) #漲停的K線顏色為黃色. draw.kline("漲", 0) #上漲的K線顏色為紅色. draw.kline("跌", 5) #下跌的K線顏色為綠色. 中文函數(shù)示例:#井號表示注釋. #畫出該股票的K線圖. for i in range(0, total): 最高價=取值("最高價", i) #獲取最高價. 開盤價=取值("開盤價", i) #獲取開盤價. 最低價=取值("最低價", i) #獲取最低價. 收盤價=取值("收盤價", i) #獲取收盤價. 多值.畫線存儲("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.K線("K") #畫出K線. 繪制.美國K線("K") #畫出美國K線. 寫文字函數(shù) 在K線處寫文字 使用方法:text(數(shù)值, i, "文字", 顏色序號) 寫文字(數(shù)值, i, "文字", 顏色序號) 參數(shù):
注意事項/建議:1. 文字需要使用冒號"". 2. 寫文字函數(shù)與條件判斷語句一同使用更具實用性. 返回:無 示例:#井號表示注釋. #畫出該股票的K線圖. for i in range(0, total): 最高價=get("最高價", i) #獲取最高價. 開盤價=get("開盤價", i) #獲取開盤價. 最低價=get("最低價", i) #獲取最低價. 收盤價=get("收盤價", i) #獲取收盤價. 昨收價=get("昨收價", i) #獲取昨收價. hevo.save("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. if (收盤價 - 昨收價)/昨收價 >= 0.099: text(收盤價*0.9, i, "漲停", 0) #在漲停的K線(天)的收盤價*0.9處寫"漲停". #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.kline("K") #畫出K線. 中文函數(shù)示例:#井號表示注釋. #畫出該股票的K線圖. for i in range(0, total): 最高價=取值("最高價", i) #獲取最高價. 開盤價=取值("開盤價", i) #獲取開盤價. 最低價=取值("最低價", i) #獲取最低價. 收盤價=取值("收盤價", i) #獲取收盤價. 昨收價=取值("昨收價", i) #獲取昨收價. 多值.畫線存儲("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. if (收盤價 - 昨收價)/昨收價 >= 0.099: 寫文字(收盤價*0.9, i, "漲停", 0) #在漲停的K線(天)的收盤價*0.9處寫"漲停". #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.K線("K") #畫出K線. 畫直線函數(shù) 畫直線函數(shù) 使用方法:draw.line(數(shù)值1, i1, 數(shù)值2, i2, "顏色代碼") 繪制.直線(數(shù)值1, i1, 數(shù)值2, i2, "顏色代碼") 參數(shù):
注意事項/建議:1. 數(shù)值1和數(shù)值2可以相同, i1也可以等于i2. 2. 若不是由特定條件(if)觸發(fā)而畫的直線, 是一般通用的直線, 例如, 畫一條值為10的直線. 則可以在i1處填入begin, 在i2處填入end. begin與end詳見左側(cè)欄中的注意事項. 返回:無 示例:#井號表示注釋. #在K線圖中畫一條數(shù)值為40的直線 for i in range(0, total): 最高價=get("最高價", i) #獲取最高價. 開盤價=get("開盤價", i) #獲取開盤價. 最低價=get("最低價", i) #獲取最低價. 收盤價=get("收盤價", i) #獲取收盤價. hevo.save("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.kline("K") #畫出K線. draw.line(40, begin, 40, end, "#FFFFFF") #畫一條數(shù)值為40的白色直線 中文函數(shù)示例:#井號表示注釋. #在K線圖中畫一條數(shù)值為40的直線 for i in range(0, total): 最高價=取值("最高價", i) #獲取最高價. 開盤價=取值("開盤價", i) #獲取開盤價. 最低價=取值("最低價", i) #獲取最低價. 收盤價=取值("收盤價", i) #獲取收盤價. 多值.畫線存儲("K", 最高價, 開盤價, 最低價, 收盤價, i) #將四個價按順序儲存在"K"對象上. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.K線("K") #畫出K線. 繪制.直線(40, begin, 40, end, "#FFFFFF") #畫一條數(shù)值為40的白色直線 效果圖(非示例):畫柱狀圖 將數(shù)據(jù)以柱狀圖的形式畫出. 使用方法:draw.stick("對象名", 顏色序號/代碼代碼) 繪制.柱狀圖("對象名", 顏色序號/代碼代碼) draw.stick("對象名", 顏色序號/代碼代碼, 實心/空心參數(shù)) 繪制.柱狀圖("對象名", 顏色序號/代碼代碼, 實心/空心參數(shù)) 配套存儲: save("對象名", 數(shù)值, i) 配套存儲: 畫線存儲("對象名", 數(shù)值, i) 參數(shù):
注意事項/建議:實心/空心參數(shù)不填寫則默認為空心. 返回:無 示例:#井號表示注釋. #獲取該股票所有周期(日)的成交量, 并畫出成交量的柱狀圖. for i in range(0, total): 成交量=get("成交量", i) #獲取每個交易日的成交量. save("成交量", 成交量, i) #將獲取的每一次成交量儲存在“成交量”中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.stick("成交量", 4, 2) #畫出成交量橘色實心柱狀圖. 中文函數(shù)示例:#井號表示注釋. #獲取該股票所有周期(日)的成交量, 并畫出成交量的柱狀圖. for i in range(0, total): 成交量=取值("成交量", i) #獲取每個交易日的成交量. 畫線存儲("成交量", 成交量, i) #將獲取的每一次成交量儲存在“成交量”中. #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.柱狀圖("成交量", 4, 2) #畫出成交量橘色實心柱狀圖. 畫紅綠柱 當數(shù)值大于0的時候, 以y=0為坐標軸向上畫紅色的線條, 當小于0時,向下畫藍色的線條. 使用方法:draw.color_stick("對象名") 繪制.紅漲綠跌柱狀圖("對象名") 配套存儲: save("對象名", 數(shù)值, i) 配套存儲: 畫線存儲("對象名", 數(shù)值, i) 參數(shù):
返回:無 示例:#井號表示注釋. #獲取該股票漲跌情況, 并畫出紅漲綠跌柱狀圖. for i in range(total): 開盤價=get("開盤價", i) #獲取每條K線上的開盤價 收盤價=get("收盤價", i) #獲取每條K線上的收盤價 漲跌=收盤價-開盤價 #計算獲得每條K線上的漲跌值 save("漲跌", 漲跌, i) #將漲跌值儲存在"漲跌"對象中 #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.color_stick("漲跌") #將"漲跌"以紅漲綠跌的形式畫出來 中文函數(shù)示例:#井號表示注釋. #獲取該股票漲跌情況, 并畫出紅漲綠跌柱狀圖. for i in range(total): 開盤價=取值("開盤價", i) #獲取每條K線上的開盤價 收盤價=取值("收盤價", i) #獲取每條K線上的收盤價 漲跌=收盤價-開盤價 #計算獲得每條K線上的漲跌值 畫線存儲("漲跌", 漲跌, i) #將漲跌值儲存在"漲跌"對象中 #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.紅漲綠跌柱狀圖("漲跌") #將"漲跌"以紅漲綠跌的形式畫出來 填充背景色 填充背景色 使用方法:fill.polygon("對象名", 顏色序號) 填充.四邊形("對象名", 顏色序號) 配套存儲: hevo.save("對象名", 數(shù)值1, 數(shù)值2, i) 配套存儲: 多值.畫線存儲("對象名", 數(shù)值1, 數(shù)值2, i) 該函數(shù)會將相鄰K線上的四個點(每條K線上兩個點)相連并填充背景色. 參數(shù):
注意事項/建議:1. 填充背景色的原理是連接相鄰兩條K線上的數(shù)值(共四個點), 然后填充填充由四個點組成的矩陣. 2. 請注意一定要是相鄰兩條K線上的值, 再重復一遍, 畫且只畫相鄰兩條K線上的矩陣并填充. 3. 由于只畫相鄰兩條K線上的矩陣, 因此該函數(shù)允許填充不連續(xù)的多邊形, 換句話說, 一個對象名可以填充多個多邊形. 4. 若要畫不同顏色的背景色, 可以結(jié)合if判斷語句來使用. 6. 顏色序號處除了填顏色序號, 還可以填顏色代碼, 為了美觀, 建議增加透明度. 如"#FFFFFF"表示白色, 50的透明度則是"#50FFFFFF", 即在6位字符前添加0-99的數(shù)字. 返回:無 示例:#井號表示注釋. #畫出K線圖并填充"振幅帶"(最高價與最低價之間的區(qū)域) for i in range(0, total): 最高價=get("最高價", i) #獲取最高價 開盤價=get("開盤價", i) #獲取開盤價 最低價=get("最低價", i) #獲取最低價 收盤價=get("收盤價", i) #獲取收盤價 hevo.save("K", 最高價, 開盤價, 最低價, 收盤價, i) #儲存K線所需的高開低收四個數(shù)值 hevo.save("振幅帶", 最高價, 最低價, i) #儲存畫振幅帶所需的最高價和最低價兩個數(shù)值 #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. draw.kline("K") #畫出K線 fill.polygon("振幅帶", "#50FFFFFF") #畫出振幅帶. 其中顏色并沒有使用顏色序號, 而是自定義了50%透明度的白色. 具體見注意事項第6點. 中文函數(shù)示例:#井號表示注釋. #畫出K線圖并填充"振幅帶"(最高價與最低價之間的區(qū)域) for i in range(0, total): 最高價=取值("最高價", i) #獲取最高價 開盤價=取值("開盤價", i) #獲取開盤價 最低價=取值("最低價", i) #獲取最低價 收盤價=取值("收盤價", i) #獲取收盤價 多值.畫線存儲("K", 最高價, 開盤價, 最低價, 收盤價, i) #儲存K線所需的高開低收四個數(shù)值 多值.畫線存儲("振幅帶", 最高價, 最低價, i) #儲存畫振幅帶所需的最高價和最低價兩個數(shù)值 #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. 繪制.K線("K") #畫出K線 填充.四邊形("振幅帶", "#50FFFFFF") #畫出振幅帶. 其中顏色并沒有使用顏色序號, 而是自定義了50%透明度的白色. 具體見注意事項第6點. 效果圖(非示例):設(shè)置坐標軸單位函數(shù) 修改坐標軸的單位 使用方法:set.coordinate_axis("對象名", "單位") 設(shè)置.坐標軸("對象名", "單位") 參數(shù):
注意事項/建議:1. 對象名和單位都需要使用冒號"". 2. 該函數(shù)需要放在draw函數(shù)的后面. 3. 坐標軸函數(shù)只改變對象名的單位, 無關(guān)左坐標軸和右坐標軸. 換句話說, 若是改變單位的對象是左坐標軸 返回:無 示例:#井號表示注釋. #以左坐標軸為刻度畫出以%為單位的振幅折線圖. for i in range(0, total): 最高價 = get("最高價", i) #獲取最高價 最低價 = get("最低價", i) #獲取最低價 昨收價 = get("昨收價", i) #獲取昨收價 振幅 = (最高價 - 最低價)/昨收價 #計算振幅 save("振幅", 振幅, i) #儲存振幅到"振幅"對象中 draw.curve("振幅") #畫出振幅折線圖 set.coordinate_axis("振幅", "%") #將"振幅"對象設(shè)置為"%"單位 中文函數(shù)示例:#井號表示注釋. #以左坐標軸為刻度畫出以%為單位的振幅折線圖. for i in range(0, total): 最高價 = 取值("最高價", i) #獲取最高價 最低價 = 取值("最低價", i) #獲取最低價 昨收價 = 取值("昨收價", i) #獲取昨收價 振幅 = (最高價 - 最低價)/昨收價 #計算振幅 畫線存儲("振幅", 振幅, i) #儲存振幅到"振幅"對象中 繪制.曲線("振幅") #畫出振幅折線圖 設(shè)置.坐標軸("振幅", "%") #將"振幅"對象設(shè)置為"%"單位 API函數(shù)函數(shù) 功能描述 python系統(tǒng)運算符 python提供的常用運算符 加減乘除:最常用的加、減、乘、除對應的符號為+、-、*、/ 乘方:乘方使用"**"來表示. 例如, 2的平方為2**2, 結(jié)果為4. 整除:整除使用"//"來表示. 例如, 9整除2表示為9//2, 結(jié)果為4. 取余:取余使用"%"來表示. 例如, 取5除以2的余數(shù)表示為5%2, 結(jié)果為1. python系統(tǒng)運算函數(shù) python提供了豐富的運算函數(shù), 以下列舉部分常用的函數(shù). 最小值:min(數(shù)值1,...,數(shù)值n)返回數(shù)值1-n的最小值, 要求n>=2. min(列表)返回列表中的最小值 最大值:(bug已修復)max(數(shù)值1,...,數(shù)值n)返回數(shù)值1-n的最大值, 要求n>=2. max(列表)返回列表中的最大值. 絕對值:abs(數(shù)值)返回數(shù)值的絕對值大小 計數(shù):len(列表)返回列表內(nèi)元素的個數(shù), 即列表的長度. math庫:更多地運算函數(shù)可以使用import math來實現(xiàn). LLV 返回周期內(nèi)的最小值 使用方法:LLV(列表名, 周期, i) 最小值(列表名, 周期, i) 參數(shù):
注意事項/建議:1. LLV三個字母要大寫. 2. i要小于list的總長度(天數(shù)), 否則報錯. 3. i - period > 0, 否則報錯. 返回:周期內(nèi)最小值 示例:#井號表示注釋. #獲取該股票所有周期(日)的收盤價 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到“收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). 第5到10天收盤價的最小值 = LLV(收盤價列表, 5, 10) #返回第5-10天收盤價的最小值. 若要每5天就返回一個最小值, 應將其放入for循環(huán). 中文函數(shù)示例:#井號表示注釋. #獲取該股票所有周期(日)的收盤價 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到“收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). 第5到10天收盤價的最小值 = 最小值(收盤價列表, 5, 10) #返回第5-10天收盤價的最小值. 若要每5天就返回一個最小值, 應將其放入for循環(huán). HHV 返回周期內(nèi)的最大值 使用方法:HHV(列表名, 周期, i) 最大值(列表名, 周期, i) 參數(shù):
注意事項/建議:1. HHV三個字母要大寫. 2. i要小于list的總長度(天數(shù)), 否則報錯. 3. i - period > 0, 否則報錯. 返回:周期內(nèi)最大值 示例:#井號表示注釋. #獲取該股票所有周期(日)的收盤價 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到“收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). 第5到10天收盤價的最大值 = HHV(收盤價列表, 5, 10) #返回第5-10天的收盤價最大值. 若要每5天就返回一個最大值, 應將其放入for循環(huán). 中文函數(shù)示例:#井號表示注釋. #獲取該股票所有周期(日)的收盤價 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到“收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). 第5到10天收盤價的最大值 = 最大值(收盤價列表, 5, 10) #返回第5-10天的收盤價最大值. 若要每5天就返回一個最大值, 應將其放入for循環(huán). STD 計算標準差 使用方法:STD(列表名, 周期, i) 標準差(列表名, 周期, i) 參數(shù):
注意事項/建議:1. STD三個字母要大寫. 2. i要小于周期的總長度(天數(shù)), 否則無效. 3. i - 周期 > 0, 否則無效. 返回:周期內(nèi)的標準差值 示例:#井號表示注釋. #畫出該股票5日的收盤價標準差線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 五日收盤價的標準差值=STD(收盤價列表, 5, i) #計算5日收盤價的標準差值. 注: 不能用"5日收盤價的標準差值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. save("5日收盤價的標準差線", 五日收盤價的標準差值, i) #將5日收盤價的標準差值儲存在"5日收盤價的標準差線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. draw.curve("5日收盤價的標準差線") #畫出5日收盤價的標準差線. 中文函數(shù)示例:#井號表示注釋. #畫出該股票5日的收盤價標準差線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 五日收盤價的標準差值=標準差(收盤價列表, 5, i) #計算5日收盤價的標準差值. 注: 不能用"5日收盤價的標準差值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. 畫線存儲("5日收盤價的標準差線", 五日收盤價的標準差值, i) #將5日收盤價的標準差值儲存在"5日收盤價的標準差線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. 繪制.曲線("5日收盤價的標準差線") #畫出5日收盤價的標準差線. MA 移動平均線 使用方法:MA(列表名, 周期, i) 移動平均(列表名, 周期, i) 參數(shù):
注意事項/建議:1. MA兩個字母要大寫. 2. i要小于周期的總長度(天數(shù)), 否則無效. 3. i - 周期 > 0, 否則無效. 返回:周期的移動平均值 示例:#示例1 #井號表示注釋. #畫出該股票5日的移動平均線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 五日移動平均值=MA(收盤價列表, 5, i) #計算5日移動平均值. 注: 不能用"5日移動平均值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. save("5日移動平均線", 五日移動平均值, i) #將5日移動平均值儲存在"5日移動平均線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. draw.curve("5日移動平均線") #畫出5日移動平均線. #示例2(示例1的改進版, 即將兩個for循環(huán)合并, 用戶可以選擇自己喜歡的風格) #井號表示注釋. #畫出該股票5日的移動平均線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) 五日移動平均值=MA(收盤價列表, 5, i) #計算5日移動平均值. (這里的收盤價列表是動態(tài)的, 它會隨著i的增加而變大) save("5日移動平均線", 五日移動平均值, i) #將5日移動平均值儲存在"5日移動平均線"上. draw.curve("5日移動平均線") #畫出5日移動平均線. 中文函數(shù)示例:#示例1 #井號表示注釋. #畫出該股票5日的移動平均線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 五日移動平均值=移動平均(收盤價列表, 5, i) #計算5日移動平均值. 注: 不能用"5日移動平均值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. 畫線存儲("5日移動平均線", 五日移動平均值, i) #將5日移動平均值儲存在"5日移動平均線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. 繪制.曲線("5日移動平均線") #畫出5日移動平均線. EMA 指數(shù)移動平均值 使用方法:EMA(列表名, 周期, i) 指數(shù)移動平均(列表名, 周期, i) 公式:若Y=EMA(X, N), 則Y=[2*X+(N-1)*Y']/(N+1), 其中Y'表示上一周期的Y值. 參數(shù):
注意事項/建議:1. EMA三個字母要大寫. 2. i要小于周期的總長度(天數(shù)), 否則無效. 3. 周期 = 0, 函數(shù)無效. 4. 列表為空, 函數(shù)無效. 返回:周期的指數(shù)移動平均值 示例:#示例1 #井號表示注釋. #畫出該股票5日的指數(shù)移動平均線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 五日指數(shù)移動平均值=EMA(收盤價列表, 5, i) #計算5日移動平均值. 注: 不能用"5日指數(shù)移動平均值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. save("5日指數(shù)移動平均線", 五日指數(shù)移動平均值, i) #將5日指數(shù)移動平均值儲存在"5日指數(shù)移動平均線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. draw.curve("5日指數(shù)移動平均線") #畫出5日指數(shù)移動平均線. #示例2(示例1改進版, 即將兩個for循環(huán)合并成一個, 用戶可以選擇自己喜歡的風格) #井號表示注釋. #畫出該股票5日的指數(shù)移動平均線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) 五日指數(shù)移動平均值=EMA(收盤價列表, 5, i) #計算5日指數(shù)移動平均值. 此時收盤價列表是隨著i的變大而增加的, 它是動態(tài)的. save("5日指數(shù)移動平均線", 五日指數(shù)移動平均值, i) #將5日指數(shù)移動平均值儲存在"5日指數(shù)移動平均線"上. draw.curve("5日指數(shù)移動平均線") #畫出5日指數(shù)移動平均線. 中文函數(shù)示例:#示例1 #井號表示注釋. #畫出該股票5日的指數(shù)移動平均線 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 五日指數(shù)移動平均值=指數(shù)移動平均(收盤價列表, 5, i) #計算5日移動平均值. 注: 不能用"5日指數(shù)移動平均值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. 畫線存儲("5日指數(shù)移動平均線", 五日指數(shù)移動平均值, i) #將5日指數(shù)移動平均值儲存在"5日指數(shù)移動平均線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. 繪制.曲線("5日指數(shù)移動平均線") #畫出5日指數(shù)移動平均線. SMA 簡單移動平均 使用方法:SMA(列表名, 周期, 權(quán)重, i) 簡單移動平均(列表名, 周期, 權(quán)重, i) 公式:若Y=SMA(X,N,M) 則 Y=(M*X+(N-M)*Y')/N, 其中Y'表示上一周期Y值 參數(shù):
注意事項/建議:1. SMA三個字母要大寫. 2. i要小于周期的總長度(天數(shù)), 否則無效. 3. 周期或權(quán)重 = 0, 函數(shù)無效. 4. 列表為空, 函數(shù)無效. 5. N小于等于M是, 函數(shù)無效. 6. EMA(close_list, 5)等于SMA(close_list, 6, 2). 返回:周期的簡單移動平均值 示例:#示例1 #井號表示注釋. #畫出該股票權(quán)重為2的6日的簡單移動平均線, 其值與5日指數(shù)移動平均相同. 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 六日簡單移動平均值=SMA(收盤價列表, 6, 2, i) #計算權(quán)重為2的6日移動平均值. 注: 不能用"6日簡單移動平均值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. save("6日簡單移動平均線", 六日簡單移動平均值, i) #將6日簡單移動平均值儲存在"6日簡單移動平均線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. draw.curve("6日簡單移動平均線") #畫出6日簡單移動平均線. #示例2(示例1改進版, 即將兩個for循環(huán)合并成一個, 用戶可以選擇自己喜歡的風格) #井號表示注釋. #畫出該股票權(quán)重為2的6日的簡單移動平均線, 其值與5日指數(shù)移動平均相同. 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) 六日簡單移動平均值=SMA(收盤價列表, 6, 2, i) #計算6日簡單移動平均值. 此時收盤價列表是隨著i的變大而增加的, 它是動態(tài)的. save("6日簡單移動平均線", 六日簡單移動平均值, i) #將6日簡單移動平均值儲存在"6日簡單移動平均線"上. draw.curve("6日簡單移動平均線") #畫出6日簡單移動平均線. 中文函數(shù)示例:#示例1 #井號表示注釋. #畫出該股票權(quán)重為2的6日的簡單移動平均線, 其值與5日指數(shù)移動平均相同. 收盤價列表 = [ ] #初始化(新建)收盤價列表, 詳見列表函數(shù) for i in range(0, total): 收盤價=取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中, 詳情見列表函數(shù) #將光標移至井號前表示for循環(huán)的內(nèi)容結(jié)束. #新開一行表示新代碼的開始, 與上面for循環(huán)不相關(guān). for i in range(0, total): 六日簡單移動平均值=簡單移動平均(收盤價列表, 6, 2, i) #計算權(quán)重為2的6日移動平均值. 注: 不能用"6日簡單移動平均值"作為變量名, 因為以數(shù)字開頭的變量名, 系統(tǒng)會進行乘法運算. 畫線存儲("6日簡單移動平均線", 六日簡單移動平均值, i) #將6日簡單移動平均值儲存在"6日簡單移動平均線"上. 這里能用數(shù)字開頭作為對象名是因為有冒號, ""內(nèi)所有的值將以字符串的形式表示對象名. 繪制.曲線("6日簡單移動平均線") #畫出6日簡單移動平均線. ZIG 之字轉(zhuǎn)向, 屬于未來函數(shù) 使用方法:ZIG(列表名, 轉(zhuǎn)向變化量, 顏色序號) 之子轉(zhuǎn)向(列表名, 轉(zhuǎn)向變化量, 顏色序號) 參數(shù):
注意事項/建議:1. ZIG三個字母要大寫. 2. 轉(zhuǎn)向變化量正常情況下應為正數(shù). 3. 列表為空, 函數(shù)無效. 返回:無 示例:#示例1 #井號表示注釋. #畫出該股票當收盤價變化超過10%時的ZIG函數(shù) 收盤價列表 = [] #初始化(新建)收盤價列表 for i in range(0, total): 收盤價 = get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中 ZIG(收盤價列表, 0.1, 10) #畫出ZIG函數(shù) 中文函數(shù)示例:#示例1 #井號表示注釋. #畫出該股票當收盤價變化超過10%時的ZIG函數(shù) 收盤價列表 = [] #初始化(新建)收盤價列表 for i in range(0, total): 收盤價 = 取值("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將獲取的每一次收盤價添加到”收盤價列表”中 之子轉(zhuǎn)向(收盤價列表, 0.1, 10) #畫出ZIG函數(shù) 示例函數(shù)函數(shù) 功能描述 REF 用示例的形式解釋REF函數(shù) 原理/思路:REF函數(shù)的作用是取得前幾個周期的數(shù)據(jù), 這在遠航指標編輯器中可以用非常方便的形式實現(xiàn), 完全不需要用REF函數(shù). 完整代碼:#取3天前的收盤價 三天前的收盤價列表=[] for i in range(3, total): #注意: 這里將原先的"0"改成了"3", 這是因為只有第三天才有三天前的數(shù)據(jù). 三天前的收盤價=get("收盤價", i-3) #這里非常簡單地將"i"變成"i-3"即可. 三天前的收盤價列表.append(三天前的收盤價) #取3天前的自定義數(shù)據(jù)---方法1. #獲取數(shù)據(jù), 計算漲幅并存儲 漲幅列表=[] 三天前的漲幅列表=[] for i in range(0, total): 收盤價=get("收盤價", i) 昨收價=get("昨收價", i) 漲幅=收盤價-昨收價 漲幅列表.append(漲幅) #獲取漲幅3天前的數(shù)據(jù) for i in range(3, total): #將"0"改為"3". 其實將"total"改為"len(漲幅列表)"更為合理. 三天前的漲幅=漲幅列表[i-3] #"i"變成"i-3" 三天前的漲幅列表.append(三天前的漲幅) #取3天前的自定義數(shù)據(jù)---方法2. #方法2區(qū)別方法1主要在于方法2直接計算3天前的漲幅, 而不儲存原始的漲幅數(shù)據(jù). 三天前的漲幅列表=[] for i in range(3, total): #將"0"改為"3". 三天前的收盤價=get("收盤價", i-3) 三天前的昨收價=get("昨收價", i-3) 三天前的漲幅 = 三天前的收盤價 - 三天前的昨收價 三天前的漲幅列表.append(三天前的漲幅) CROSS 以MACD金叉為例解釋CROSS函數(shù) 原理/思路:以MACD金叉為例.
完整代碼:#初始化變量 收盤價列表 = [] #新建收盤價列表 diff列表 = [] #新建diff列表 dea列表 = [] #新建dea列表 短周期 = 12 #用于計算短期指數(shù)移動平均的周期 長周期 = 26 #用于計算長期指數(shù)移動平均的周期 dea周期 = 9 #用于計算dea指數(shù)移動平均的周期 #獲取數(shù)據(jù) for i in range(0, total): 收盤價 = get("收盤價", i) #獲取收盤價 收盤價列表.append(收盤價) #將收盤價儲存在"收盤價列表"中, 用于后續(xù)計算 #計算數(shù)據(jù)并儲存用于畫線的數(shù)據(jù) for i in range(0, total): 短期指數(shù)移動平均 = EMA(收盤價列表, 短周期, i) #計算短期指數(shù)移動平均 長期指數(shù)移動平均 = EMA(收盤價列表, 長周期, i) #計算長期指數(shù)移動平均 diff = 短期指數(shù)移動平均 - 長期指數(shù)移動平均 #計算diff值 diff列表.append(diff) #將diff值存在diff列表中 dea = EMA(diff列表, dea周期, i) #計算dea值 dea列表.append(dea) #將dea值保存到dea列表中 macd = 2 * (diff - dea) #計算macd值 save("DIFF", diff, i) #將diff值儲存在"DIFF"對象中并用于畫線 save("DEA", dea, i) #將dea值儲存在"DEA"對象中并用于畫線 save("MACD", macd, i) #將macd值儲存在"MACD"對象中并用于畫線 #判斷金叉 if ((diff - dea) > 0) and (diff列表[i-1] <= dea列表[i-1]): text(diff列表[i-1], i-1, "金叉", "#FFFFFF") #畫出儲存好數(shù)據(jù)的線 draw.curve("DIFF", 15) #畫出"DIFF"折線 draw.curve("DEA", 7) #畫出"DEA"折線 draw.color_stick("MACD") #畫出"MACD"紅漲綠跌圖 拓展:由于python的靈活性, 同理可以寫出"即將金叉"、"即將死叉"等自定義指標. BARSLAST 以示例的形式解釋BARSLAST函數(shù) 原理/思路:以"計算上一個漲停板到當前的周期數(shù)"為例.
完整代碼:#思路一 漲停列表=[] for i in range(0, total): 收盤價=get("收盤價", i) 昨收價=get("昨收價", i) if 收盤價/昨收價>=1.099: #簡單地將漲停定義為大于9.9% 漲停列表.append(i) 周期數(shù)=total-1-漲停列表[-1] text(收盤價, total-30, "上一個漲停板到當前的周期數(shù)為: "+str(周期數(shù)), "#FFFFFF") #思路二 最新漲停日期=0 for i in range(0, total): 收盤價=get("收盤價", i) 昨收價=get("昨收價", i) if 收盤價/昨收價>=1.099: #簡單地將漲停定義為大于9.9% 最新漲停日期=i 周期數(shù)=total-1-最新漲停日期 text(收盤價, total-30, "上一個漲停板到當前的周期數(shù)為: "+str(周期數(shù)), "#FFFFFF") 回測函數(shù)回測函數(shù)函數(shù) 功能描述 MACD金叉死叉回測 回測MACD指標的金叉死叉信號, 當出現(xiàn)金叉的時候買入, 出現(xiàn)死叉的時候賣出. 原理/思路:
注:目前想要查看指標在該股票從上市到今天的回測值, 需要縮小K線至主圖窗口包含所有的K線. 完整代碼:short = 12 long = 26 m = 9 close_list=[] diff_list=[] dea_list=[] jincha_list=[] sicha_list=[] success_amount=0 success_rate=0 amount_sum=0 first_sum_count=0 first_jincha=False for i in range(0, total): #畫出MACD close=get("CLOSE",i) close_list.append(close) s=EMA(close_list,short, i) l=EMA(close_list,long, i) diff=round(s - l, 3) diff_list.append(diff) dea=EMA(diff_list,m, i) dea_list.append(dea) macd=2*(diff - dea) save("MACD", macd,i) save("DIFF", diff,i) save("DEA", dea,i) #判斷金叉與死叉 if((diff - dea) > 0) and (diff_list[i-1] <= dea_list[i-1]) or ((diff - dea) < 0) and (diff_list[i-1] >= dea_list[i-1]): first_sum_count += 1 if ((diff - dea) > 0) and (diff_list[i-1] <= dea_list[i-1]): if (first_sum_count==1): first_jincha=True text(diff_list[i-1], i-1, "金叉", "#FFFFFF") jincha_list.append(close) if ((diff - dea) < 0) and (diff_list[i-1] >= dea_list[i-1]): text(diff_list[i-1], i-1, "死叉", "#FFFFFF") sicha_list.append(close) jincha_amount=len(jincha_list) sicha_amount=len(sicha_list) #金叉的情況 if first_jincha==True: #金死 if first_sum_count % 2 ==0: for i in range(0, jincha_amount): a=sicha_list[i] - jincha_list[i] if a >= 0: success_amount += 1 amount_sum += a success_rate = success_amount*1.0/jincha_amount #金金 else: for i in range(0, sicha_amount): amount=sicha_list[i] - jincha_list[i] if amount>0: success_amount += 1 amount_sum += amount success_rate = success_amount*1.0/sicha_amount #死叉的情況 else: for i in range(0, sicha_amount-1): amount=sicha_list[i+1] - jincha_list[i] if amount>0: success_amount += 1 amount_sum += amount success_rate = success_amount*1.0/(sicha_amount-1) #畫線 draw.color_stick("MACD") draw.curve("DIFF", 15) draw.curve("DEA", 7) text(0, total-25, "成功率:"+str(round(success_rate*100, 3))+"% "+"凈額:"+str(amount_sum), "#FF1493") 附錄顏色函數(shù) 功能描述 顏色序號 顏色序號代表的顏色 顏色序號代表的顏色如下圖所示: Python顏色代碼 Python顏色代碼的參照圖 以下是Python顏色代碼的參照圖:
|
|
來自: FaceBank > 《技術(shù)指標》