![]() |
在這個頁面顯示本主題全部的 2 個文章 |
奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- [程式範例] (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=44)
-- 【程式模組】符合條件發出聲響警示 Old [舊版本] (http://www.chiefox.com.tw/bbs/showthread.php?threadid=24054)
【程式模組】符合條件發出聲響警示 [舊版本]
※此為舊版本,使用TXT檔來做記憶保存,處理速度慢
★★★ 不建議再使用它,強烈建議改用新版本 ★★★
這是一個通用的程式模組,專為發出聲響警示而設計
您只需要將本程式模組,添加在您公式程式碼的最末端
並將 BeepSel:=0; 那行配置好,即可立即享用本模組之功能
原碼:
BeepSel:=0; //請自行根據需要配置本行內容 //========================= 程式模組:符合條件發出聲響警示 Start ========================= //主要功能: // 可避免條件連續成立時,不斷發出警示聲響的困擾。可按條件不同發出不同聲音 //響警時機: // 當前該交易日首次條件成立時,會響警。 // 同交易日同條件上次運算不成立,而這次運算成立時,會響警。 // 同交易日這次運算成立的條件與上次運算成立的條件不同時,會響警。 //注意事項: // 1.同一公式請勿套用在同一商品且同一周期中跑(將導致響警狀態寫存混亂) // ※在相同視窗中或不同視窗中,皆不可以,即使指標參數不同也不行! // 2.指標公式名稱請勿使用下面這些字符(會導致響警狀態無法記憶存檔): // < > : " / \ | ? * // 3.不同條件成立,請勿將 BeepSel 值配置為相等值,以免造成混淆。 //使用方法: // 請將本程式模組,添加在原公式程式碼的最末端。 // 並在本程式模組程式碼之前,添加 BeepSel 相關配置。 //使用範例: // [單組條件] 收盤價大於MA10,使用第3組音效,寫法如下: // BeepSel:=(CLOSE>MA(Close,10))*3; // [雙組條件] 當KD金叉使用第1組音效,KD死叉使用第2組音效,寫法如下: // BeepSel:=Cross(K,D)*1+Cross(D,K)*2; // [多組條件] A用第2組音效,B用第5組音效,C用第3組音效,寫法如下: // BeepSel:=條件A*2+條件B*5+條件C*3; //各條件間皆不會有同時成立之情況 //存檔路徑: // 最後響警狀態會被記憶住,寫存於奇狐主資料夾中的 RecBeep 子資料夾裡。 //設定各組音效對應的檔案(共支持7組,可自行變更為您想要的) Beep1:=GetAppMainDir+'\Effwav\eff01.wav'; //第1組音效 Beep2:=GetAppMainDir+'\Effwav\eff02.wav'; //第2組音效 Beep3:=GetAppMainDir+'\Effwav\eff03.wav'; //第3組音效 Beep4:=GetAppMainDir+'\Effwav\eff04.wav'; //第4組音效 Beep5:=GetAppMainDir+'\Effwav\eff05.wav'; //第5組音效 Beep6:=GetAppMainDir+'\Effwav\eff06.wav'; //第6組音效 Beep7:=GetAppMainDir+'\Effwav\eff07.wav'; //第7組音效 //===== 以下程式碼請勿做任何更動!!! ===== UseDate:=NumToStr(Tradedate,0); UsePath:=GetAppMainDir+'\RecBeep'; //存檔路徑 UseFile:=UsePath+''+MarketLabel+StkLabel+'_'+FMLNAME+'.txt'; //存檔路徑+檔案名稱{市場代碼+商品代碼+指標名稱} UseType:=NumToStr(DATATYPE*1000+DATATYPEM,0); //組合[數據週期類型]與[數據週期設定值] GetBeep:=0; <% BeepSel=FFL.VarData("BeepSel") UseFile=FFL.VarData("UseFile") UseType=FFL.VarData("UseType") UseDate=FFL.VarData("UseDate") UsePath=FFL.VarData("UsePath") if IsArray(BeepSel) then NowBeepSel=BeepSel(ubound(BeepSel)) else NowBeepSel=BeepSel end if Set fs=CreateObject("Scripting.FileSystemObject") If fs.FolderExists(UsePath)=False Then fs.CreateFolder UsePath AllData="": OldBeepSel=0 If fs.FileExists(UseFile) then Set RdFS=fs.OpenTextFile(UseFile, 1) if Not(RdFS.AtEndOfStream) then AllData=RdFS.ReadAll DataAry=Split(AllData, vbcrlf, -1, 1) AllData="" for i=0 to ubound(DataAry) if len(DataAry(i))>0 then ItemAry=Split(DataAry(i), ",", -1, 1) if UseDate=ItemAry(0) then if UseType=ItemAry(1) then OldBeepSel=cint(ItemAry(2)) else AllData=AllData+DataAry(i)+vbcrlf end if end if end if next end if end if if NowBeepSel<>OldBeepSel then FFL.VarData("GetBeep")=NowBeepSel AddData=UseDate+","+UseType+","+cstr(NowBeepSel) AllData=AddData+vbcrlf+AllData Set RdFS = fs.CreateTextFile(UseFile, true) RdFS.Write AllData RdFS.close %> PlayBeep:=c*0+GetBeep; PLAYSOUND(PlayBeep=1,0,Beep1); PLAYSOUND(PlayBeep=2,0,Beep2); PLAYSOUND(PlayBeep=3,0,Beep3); PLAYSOUND(PlayBeep=4,0,Beep4); PLAYSOUND(PlayBeep=5,0,Beep5); PLAYSOUND(PlayBeep=6,0,Beep6); PLAYSOUND(PlayBeep=7,0,Beep7); //========================== 程式模組:符合條件發出聲響警示 End ==========================
若各條件間,會有同時成立之情況!!!
例如:
BeepSel:=條件A*2+條件B*5+條件C*3;
其中 條件A 與 條件B 兩者會有同時成立之情形!
那麼就不能單純的以加法的方式,來配置 BeepSel
必須改用下面的方式,來配置 BeepSel :
BeepSel:=0;
BeepSel:=IF(條件A,2,BeepSel); //A用第2組音效
BeepSel:=IF(條件B,5,BeepSel); //B用第5組音效
BeepSel:=IF(條件C,3,BeepSel); //C用第3組音效
BeepSel:=IF(條件A and 條件B,1,BeepSel); //AB同時成立,用第1組音效
重點是要能夠清楚分辨,當前的狀況~~
全部時間均為台灣時間, 現在時間為21:32 | 在這個頁面顯示本主題全部的 2 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.