 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18091 |
回覆: 警示音效
引用: 最初由 qaq1689 發表
使用新版警示音效
1.短波.上下轉折.各音效
2.短波1..HZ2.金.死.交叉.各音效
如何寫
請問:那程式.和各組音效..放哪裡
我不懂.程式請幫忙
謝謝!
1 & 2 是在同一組公式中對吧?
那樣可能會有 8 種成立狀況的組合
基於聲響種類過多,在此簡化為:
若為1或2單獨成立,各自配1種聲音(不分正反)
若為1和2同時成立,則配另1種聲音
這樣僅有3組聲音(比較好記)
請將這段程式碼先放置於最後
條件A:=ref(短波,2)>ref(短波,1) and 短波>ref(短波,1); //短波上轉折
條件B:=ref(短波,2)<ref(短波,1) and 短波<ref(短波,1); //短波下轉折
條件C:=短波1>HZ2 and ref(短波1<HZ2,1); //短波1上穿HZ2
條件D:=短波1<HZ2 and ref(短波1>HZ2,1); //短波1下穿HZ2
條件1:=條件A or 條件B;
條件2:=條件C or 條件D;
再將 【程式模組】符合條件發出聲響警示 New [新版本] 的程式碼放置於最後
再把前面該段程式碼中的下面這一行:
BeepSel:=0; //請自行根據需要配置本行內容
更換為:
BeepSel:=0;
BeepSel:=IF(條件1,1,BeepSel); //僅1成立,用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2成立,用第2組音效
BeepSel:=IF(條件1 and 條件2,3,BeepSel); //1與2同時成立,用第3組音效
|
|
向版主報告此篇 |  |
|
2024-09-16 09:33 |
|
|
|  |
 |
qaq1689
資深會員

註冊日期: Oct 2006
來 自: 中部
文章數量: 278 |
請問
那些檔案.要存放在哪裡?
然後我的條件.放哪裡
//===== 以下程式碼請勿做任何更動!!! =====
RegPath:='HKEY_CURRENT_USER\Software\AeroFox R&D\_RecBeep'; //存放 Registry Path
AppPath:='['+GetAppMainDir+']'+FMLNAME;
for i=1 to strlen(AppPath) do begin
t:=strmid(AppPath,i,1);
if t='' then RegPath:=RegPath+'/' else RegPath:=RegPath+t;
end;
UseKEY:=RegPath+''+MarketLabel+'.'+StkLabel; //存放 KEY Name
UseType:=NumToStr(DATATYPE*1000+DATATYPEM,0); //組合[數據週期類型]與[數據週期設定值]
UseDate:=NumToStr(Tradedate,0);
GetBeep:=0;
<%
BeepSel=FFL.VarData("BeepSel")
UseKEY=FFL.VarData("UseKEY")
UseType=FFL.VarData("UseType")
UseDate=FFL.VarData("UseDate")
if IsArray(BeepSel) then
NowBeepSel=BeepSel(ubound(BeepSel))
else
NowBeepSel=BeepSel
end if
OldBeepSel=0
Set WshShell=CreateObject("WScript.Shell")
on error Resume Next
AllData=WshShell.RegRead(UseKEY)
if Err.Number=0 then
DataAry=Split(AllData, ";", -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)+";"
end if
end if
end if
next
end if
if NowBeepSel<>OldBeepSel then FFL.VarData("GetBeep")=NowBeepSel
AddData=UseDate+","+UseType+","+cstr(NowBeepSel)
AllData=AddData+";"+AllData
WshShell.RegWrite UseKEY,AllData, "REG_SZ"
%>
if GetBeep>0 then begin
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;
|
最後由 qaq1689 在 2024-09-16 14:00 編輯 |
向版主報告此篇 |  |
|
2024-09-16 13:54 |
|
|
|  |
 |
qaq1689
資深會員

註冊日期: Oct 2006
來 自: 中部
文章數量: 278 |
回覆: 回覆: 請問
引用: 最初由 cgjj 發表
只有程式碼,沒有檔案!
你的原始程式放最前面~~
後續的再陸續添加接上
放的步驟次序,前面已經講的很清楚了
請按步驟處理!
hz:=指數平滑移動平均(收盤價,13);
短波:指數平滑移動平均(HZ,1),COLORMAGENTA,LINETHICK2;
HZ2:指數平滑移動平均(HZ,8),LINEDOT,Color00FFFF,LINETHICK1;
//==========================================================
//===== 以下程式碼請勿做任何更動!!! =====
RegPath:='HKEY_CURRENT_USER\Software\AeroFox R&D\_RecBeep'; //存放 Registry Path
AppPath:='['+GetAppMainDir+']'+FMLNAME;
for i=1 to strlen(AppPath) do begin
t:=strmid(AppPath,i,1);
if t='' then RegPath:=RegPath+'/' else RegPath:=RegPath+t;
end;
UseKEY:=RegPath+''+MarketLabel+'.'+StkLabel; //存放 KEY Name
UseType:=NumToStr(DATATYPE*1000+DATATYPEM,0); //組合[數據週期類型]與[數據週期設定值]
UseDate:=NumToStr(Tradedate,0);
GetBeep:=0;
<%
BeepSel=FFL.VarData("BeepSel")
UseKEY=FFL.VarData("UseKEY")
UseType=FFL.VarData("UseType")
UseDate=FFL.VarData("UseDate")
if IsArray(BeepSel) then
NowBeepSel=BeepSel(ubound(BeepSel))
else
NowBeepSel=BeepSel
end if
OldBeepSel=0
Set WshShell=CreateObject("WScript.Shell")
on error Resume Next
AllData=WshShell.RegRead(UseKEY)
if Err.Number=0 then
DataAry=Split(AllData, ";", -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)+";"
end if
end if
end if
next
end if
if NowBeepSel<>OldBeepSel then FFL.VarData("GetBeep")=NowBeepSel
AddData=UseDate+","+UseType+","+cstr(NowBeepSel)
AllData=AddData+";"+AllData
WshShell.RegWrite UseKEY,AllData, "REG_SZ"
%>
if GetBeep>0 then begin
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;
條件A:=ref(短波,2)>ref(短波,1) and 短波>ref(短波,1); //短波上轉折
條件B:=ref(短波,2)<ref(短波,1) and 短波<ref(短波,1); //短波下轉折
條件C:=短波>HZ2 and ref(短波1<HZ2,1); //短波1上穿HZ2
條件D:=短波<HZ2 and ref(短波1>HZ2,1); //短波1下穿HZ2
條件1:=條件A or 條件B;
條件2:=條件C or 條件D;
//出現.行57未定義的標識符///哪裡錯了.請修改
//之前有個...短波1.那不用了.
//我主要的是
1.短波.上下轉折.各音效
2.短波.HZ2.金.死.交叉.各音效
|
|
向版主報告此篇 |  |
|
2024-09-16 17:08 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18091 |
回覆: 回覆: 回覆: 請問
引用: 最初由 qaq1689 發表
hz:=指數平滑移動平均(收盤價,13);
短波:指數平滑移動平均(HZ,1),COLORMAGENTA,LINETHICK2;
HZ2:指數平滑移動平均(HZ,8),LINEDOT,Color00FFFF,LINETHICK1;
//==========================================================
//===== 以下程式碼請勿做任何更動!!! =====
RegPath:='HKEY_CURRENT_USER\Software\AeroFox R&D\_RecBeep'; //存放 Registry Path
AppPath:='['+GetAppMainDir+']'+FMLNAME;
for i=1 to strlen(AppPath) do begin
t:=strmid(AppPath,i,1);
if t='' then RegPath:=RegPath+'/' else RegPath:=RegPath+t;
end;
UseKEY:=RegPath+''+MarketLabel+'.'+StkLabel; //存放 KEY Name
UseType:=NumToStr(DATATYPE*1000+DATATYPEM,0); //組合[數據週期類型]與[數據週期設定值]
UseDate:=NumToStr(Tradedate,0);
GetBeep:=0;
<%
BeepSel=FFL.VarData("BeepSel")
UseKEY=FFL.VarData("UseKEY")
UseType=FFL.VarData("UseType")
UseDate=FFL.VarData("UseDate")
if IsArray(BeepSel) then
NowBeepSel=BeepSel(ubound(BeepSel))
else
NowBeepSel=BeepSel
end if
OldBeepSel=0
Set WshShell=CreateObject("WScript.Shell")
on error Resume Next
AllData=WshShell.RegRead(UseKEY)
if Err.Number=0 then
DataAry=Split(AllData, ";", -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)+";"
end if
end if
end if
next
end if
if NowBeepSel<>OldBeepSel then FFL.VarData("GetBeep")=NowBeepSel
AddData=UseDate+","+UseType+","+cstr(NowBeepSel)
AllData=AddData+";"+AllData
WshShell.RegWrite UseKEY,AllData, "REG_SZ"
%>
if GetBeep>0 then begin
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;
條件A:=ref(短波,2)>ref(短波,1) and 短波>ref(短波,1); //短波上轉折
條件B:=ref(短波,2)<ref(短波,1) and 短波<ref(短波,1); //短波下轉折
條件C:=短波>HZ2 and ref(短波1<HZ2,1); //短波1上穿HZ2
條件D:=短波<HZ2 and ref(短波1>HZ2,1); //短波1下穿HZ2
條件1:=條件A or 條件B;
條件2:=條件C or 條件D;
//出現.行57未定義的標識符///哪裡錯了.請修改
//之前有個...短波1.那不用了.
//我主要的是
1.短波.上下轉折.各音效
2.短波.HZ2.金.死.交叉.各音效
添加程式碼的次序錯了,不該刪除的您也刪了!
整合完應該是像這樣
原碼: hz:=指數平滑移動平均(收盤價,13);
短波:指數平滑移動平均(HZ,1),COLORMAGENTA,LINETHICK2;
HZ2:指數平滑移動平均(HZ,8),LINEDOT,Color00FFFF,LINETHICK1;
條件A:=ref(短波,2)>ref(短波,1) and 短波>ref(短波,1); //短波上轉折
條件B:=ref(短波,2)<ref(短波,1) and 短波<ref(短波,1); //短波下轉折
條件C:=短波>HZ2 and ref(短波<HZ2,1); //短波上穿HZ2
條件D:=短波<HZ2 and ref(短波>HZ2,1); //短波下穿HZ2
條件1:=條件A or 條件B;
條件2:=條件C or 條件D;
BeepSel:=0;
BeepSel:=IF(條件1,1,BeepSel); //僅1成立,用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2成立,用第2組音效
BeepSel:=IF(條件1 and 條件2,3,BeepSel); //1與2同時成立,用第3組音效
//========================== 程式模組:符合條件發出聲響警示 Start ==========================
//※此為新版本,不再使用TXT檔來做記憶保存,改寫 Windows Registry 來做記憶,可大幅提升速度!
//主要功能:
// 可避免條件連續成立時,不斷發出警示聲響的困擾。可按條件不同發出不同聲音
//響警時機:
// 當前該交易日首次有條件成立時(BeepSel>0)
// 同交易日上次運算無條件成立(BeepSel=0),而這次運算有條件成立時(BeepSel>0)
// 同交易日這次運算成立的條件與上次運算成立的條件不同時(BeepSel>0 且 BeepSel新舊值不相等)
//注意事項:(係指有採用此程式模組的指標公式)
// 1.請勿在同一視窗中將同一個指標公式,套用在兩個圖面當中!(例如:一主圖一副圖,或兩副圖)
// 將會導致響警狀態記憶混亂(即使設定的指標參數不相等也不行)
// 2.若有兩個或兩個以上的視窗,觀看相同的商品且相等的週期(亦即[商品+週期]組合有重複)
// 不可以將同一指標公式,同時套用在這些視窗當中,將會導致響警狀態記憶混亂
// 簡單的說:就是 [商品+週期+指標名稱] 這樣的組合必須保持唯一(不可有第二組重複的存在)
// 即使指標參數不同也不行!(例如:開了兩個台積電5分線視窗,同時各自套用相同的指標公式)
// 3.不同條件成立,請勿將 BeepSel 值配置為相等值,將會造成混淆,搞不清是哪一組條件發音
// ※同台電腦同時執行兩套奇狐(同版本或不同版本),採用相同指標名稱,彼此間不會發生記憶混亂
//使用方法:
// 請將本程式模組,添加在原公式程式碼的最末端
// 並在本程式模組程式碼之前,添加 BeepSel 相關配置
//使用範例1:[單組條件]
// 收盤價大於MA10,使用第3組音效,寫法如下:
// BeepSel:=(CLOSE>MA(Close,10))*3;
//使用範例2:[兩組條件:不會同時成立,各自發出不同響警]
// 當KD金叉使用第1組音效,KD死叉使用第2組音效,寫法如下:
// BeepSel:=Cross(K,D)*1+Cross(D,K)*2; //兩組條件不會同時成立
//使用範例3:[多組條件:各條件間皆不會有同時成立之情況,各自發出不同響警]
// A用第2組音效,B用第5組音效,C用第3組音效,寫法如下:
// BeepSel:=條件A*2+條件B*5+條件C*3; //A,B,C 同時間最多僅會有一個成立
//使用範例4:[各組條件間,可能會有同時成立之情況,依組合各自發出不同響警]
// 例如: A,B,C 三組條件,除了單組條件成立外,亦可能會發生其中兩組甚至三組同時成立的情況
// 這種情況就不能單純的以前面的加法形式來配置 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); //A,B同時成立,用第1組音效
// BeepSel:=IF(條件B and 條件C,4,BeepSel); //B,C同時成立,用第4組音效
// BeepSel:=IF(條件A and 條件C,7,BeepSel); //A,C同時成立,用第7組音效
// BeepSel:=IF(條件A and 條件B and 條件C,6,BeepSel); //A,B,C同時成立,用第6組音效
//寫存路徑:(Windows Registry)
// 最後響警狀態會被記憶寫存於 [HKEY_CURRENT_USER\Software\AeroFox R&D\_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組音效
//===== 以下程式碼請勿做任何更動!!! =====
RegPath:='HKEY_CURRENT_USER\Software\AeroFox R&D\_RecBeep'; //存放 Registry Path
AppPath:='['+GetAppMainDir+']'+FMLNAME;
for i=1 to strlen(AppPath) do begin
t:=strmid(AppPath,i,1);
if t='' then RegPath:=RegPath+'/' else RegPath:=RegPath+t;
end;
UseKEY:=RegPath+''+MarketLabel+'.'+StkLabel; //存放 KEY Name
UseType:=NumToStr(DATATYPE*1000+DATATYPEM,0); //組合[數據週期類型]與[數據週期設定值]
UseDate:=NumToStr(Tradedate,0);
GetBeep:=0;
<%
BeepSel=FFL.VarData("BeepSel")
UseKEY=FFL.VarData("UseKEY")
UseType=FFL.VarData("UseType")
UseDate=FFL.VarData("UseDate")
if IsArray(BeepSel) then
NowBeepSel=BeepSel(ubound(BeepSel))
else
NowBeepSel=BeepSel
end if
OldBeepSel=0
Set WshShell=CreateObject("WScript.Shell")
on error Resume Next
AllData=WshShell.RegRead(UseKEY)
if Err.Number=0 then
DataAry=Split(AllData, ";", -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)+";"
end if
end if
end if
next
end if
if NowBeepSel<>OldBeepSel then FFL.VarData("GetBeep")=NowBeepSel
AddData=UseDate+","+UseType+","+cstr(NowBeepSel)
AllData=AddData+";"+AllData
WshShell.RegWrite UseKEY,AllData, "REG_SZ"
%>
if GetBeep>0 then begin
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;
//=========================== 程式模組:符合條件發出聲響警示 End ===========================
|
|
向版主報告此篇 |  |
|
2024-09-16 17:20 |
|
|
|  |
 |
qaq1689
資深會員

註冊日期: Oct 2006
來 自: 中部
文章數量: 278 |
回覆: 回覆: 請問
引用: 最初由 cgjj 發表
我前面有說唷~~
基於聲響種類過多,在此簡化為:
若為1或2單獨成立,各自配1種聲音(不分正反)
若為1和2同時成立,則配另1種聲音
這樣僅有3組聲音(比較好記)
目前應該會有3組聲音,不會僅有1組
當
1.短波上轉折 或 短波下轉折 用第1組音效
2.短波上穿HZ2 或 短波下穿HZ2 用第2組音效
若1與2同時成立,用第3組音效
只條件1 .有音效
其他無反應???
BeepSel:=0;
BeepSel:=IF(條件1,1,BeepSel); //僅1成立,用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2成立,用第2組音效
BeepSel:=IF(條件1 or 條件2,3,BeepSel); //1與2同時成立,用第3組音效
當我要從新復制.發現第一排.不一樣
蜂鳴選擇:=0;
BeepSel:=IF(條件1,1,BeepSel); //只成立1個,使用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2人成立,使用第2組音效
BeepSel:=IF(條件1或條件2,3,BeepSel); //1與2同時成立,用第3組音效
若套上.就不能使用了
|
|
向版主報告此篇 |  |
|
2024-09-19 11:58 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18091 |
回覆: 回覆: 回覆: 請問
引用: 最初由 qaq1689 發表
只條件1 .有音效
其他無反應???
BeepSel:=0;
BeepSel:=IF(條件1,1,BeepSel); //僅1成立,用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2成立,用第2組音效
BeepSel:=IF(條件1 or 條件2,3,BeepSel); //1與2同時成立,用第3組音效
當我要從新復制.發現第一排.不一樣
蜂鳴選擇:=0;
BeepSel:=IF(條件1,1,BeepSel); //只成立1個,使用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2人成立,使用第2組音效
BeepSel:=IF(條件1或條件2,3,BeepSel); //1與2同時成立,用第3組音效
若套上.就不能使用了
當然不能用!
蜂鳴選擇:=0; <=== 程式不可以這樣去改
抱歉! 前面有個地方沒寫正確,現已修正!
請修正為以下內容:
BeepSel:=0;
BeepSel:=IF(條件1,1,BeepSel); //僅1成立,用第1組音效
BeepSel:=IF(條件2,2,BeepSel); //僅2成立,用第2組音效
BeepSel:=IF(條件1 and 條件2,3,BeepSel); //1與2同時成立,用第3組音效
|
|
向版主報告此篇 |  |
|
2024-09-19 12:20 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|