奇狐社區論壇
在這個頁面顯示本主題全部的 63 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 關於買賣訊號的問題[交易範例] (http://www.chiefox.com.tw/bbs/showthread.php?threadid=14682)


由 yisong 在 2010-11-25 21:44 發表:

關於買賣訊號的問題

想要請教一下,奇狐有辦法讓買賣訊號出現不同的圖示嗎或是文字嗎?例如說,我有兩個多單進我場的訊號分別為條件1和條件2,但這兩個條件成立時都可進場作多,且在圖示上希望能分別秀出不一樣的圖示或文字已是區別,該怎麼作呢?
第二個問題是: ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT這四個條件我都有設定ok了,但一般希望系統能夠區別手上的部位,例如說,手上明明只有多單部位,沒有空單部位,但他卻出現空單平倉的訊號(雖然有符合空單平倉,但此時手上沒有空單就不需理會這個訊號,但也不希望出現訊號,以免錯判),要怎麼寫呢?
謝謝


由 cgjj 在 2010-11-26 09:14 發表:

回覆: 關於買賣訊號的問題

引用:
最初由 yisong 發表
想要請教一下,奇狐有辦法讓買賣訊號出現不同的圖示嗎或是文字嗎?例如說,我有兩個多單進我場的訊號分別為條件1和條件2,但這兩個條件成立時都可進場作多,且在圖示上希望能分別秀出不一樣的圖示或文字已是區別,該怎麼作呢?
第二個問題是: ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT這四個條件我都有設定ok了,但一般希望系統能夠區別手上的部位,例如說,手上明明只有多單部位,沒有空單部位,但他卻出現空單平倉的訊號(雖然有符合空單平倉,但此時手上沒有空單就不需理會這個訊號,但也不希望出現訊號,以免錯判),要怎麼寫呢?
謝謝



第二個問題
[交易系統]類型套用於K線圖時
它會忠實的呈現每根相對應的訊號, 不會主動過濾整合
(這是為了讓寫公式的人, 好核對除錯)

若您想要讓訊號變為交易Run時的樣子
可加入自行程式進行訊號過濾整合

實際評測時
若前面還沒有[空頭建倉], 那麼當前的[空頭平倉]會自動被忽略掉
不會有交易動作產生


第一個問題
您可將指標自[交易系統]類型改為[技術指標]類型
[技術指標]類型的公式
可以繪製線圖, 也可以依據條件變換圖示


由 yisong 在 2010-11-26 11:46 發表:

回覆: 回覆: 關於買賣訊號的問題

引用:
最初由 cgjj 發表
第二個問題
若您想要讓訊號變為交易Run時的樣子
可加入自行程式進行訊號過濾整合


請問這邊說的"自行程式進行訊號過濾整合"要從哪邊設定呢?


由 cgjj 在 2010-11-26 12:43 發表:

回覆: 回覆: 回覆: 關於買賣訊號的問題

引用:
最初由 yisong 發表
請問這邊說的"自行程式進行訊號過濾整合"要從哪邊設定呢?


不同需求整併方式不同, 例如:

一種是, 多進後尚未碰到多出, 接觸到空進就不做空(仍維持多)
一種是, 多進後尚未碰到多出, 接觸到空進就反手做空

兩種整併處理方式不同, 您要以何種方式處理呢?


由 yisong 在 2010-11-26 13:09 發表:

回覆: 回覆: 回覆: 回覆: 關於買賣訊號的問題

引用:
最初由 cgjj 發表
不同需求整併方式不同, 例如:

一種是, 多進後尚未碰到多出, 接觸到空進就不做空(仍維持多)
一種是, 多進後尚未碰到多出, 接觸到空進就反手做空

兩種整併處理方式不同, 您要以何種方式處理呢?


要用: 多進後尚未碰到多出, 接觸到空進就反手做空 這種


由 yisong 在 2010-11-26 13:53 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 關於買賣訊號的問題

引用:
最初由 yisong 發表
要用: 多進後尚未碰到多出, 接觸到空進就反手做空 這種

另外,如果還要增加一個條件,如果手上有多單,就不再出現多單進場的訊號()必須空手才出現進場訊號,相同的如果手上有空單,要等空手在能再出現空單訊號 那要怎麼加呢?


由 cgjj 在 2010-11-26 15:44 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 關於買賣訊號的問題

引用:
最初由 yisong 發表
要用: 多進後尚未碰到多出, 接觸到空進就反手做空 這種
另外,如果還要增加一個條件,如果手上有多單,就不再出現多單進場的訊號()必須空手才出現進場訊號,相同的如果手上有空單,要等空手在能再出現空單訊號 那要怎麼加呢?



多進, 多出, 空進, 空出 <== 為您原始的訊號
進L, 出L, 進S, 出S <== 為整併後的訊號

原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DOLS:=C*0
Do進:=進L-進SDo出:=出L-出S;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DOLS[i]:=NowLS;
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DOLS[i]:=NowLS*3;
    
end else if NowLS=Do出[ithen begin
      NowLS
:=0DOLS[i]:=Do出[i]*2;
    
end;
  
end;
end;

//整併後的結果
進L:=DOLS=or DOLS=3;   //多進
出L:=DOLS=or DOLS=-3;  //多出
進S:=DOLS=-or DOLS=-3//空進
出S:=DOLS=-or DOLS=3;  //空出


由 yisong 在 2010-12-01 13:22 發表:

回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 關於買賣訊號的問題

引用:
最初由 cgjj 發表
多進, 多出, 空進, 空出 <== 為您原始的訊號
進L, 出L, 進S, 出S <== 為整併後的訊號

原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DOLS:=C*0
Do進:=進L-進SDo出:=出L-出S;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DOLS[i]:=NowLS;
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DOLS[i]:=NowLS*3;
    
end else if NowLS=Do出[ithen begin
      NowLS
:=0DOLS[i]:=Do出[i]*2;
    
end;
  
end;
end;

//整併後的結果
進L:=DOLS=or DOLS=3;   //多進
出L:=DOLS=or DOLS=-3;  //多出
進S:=DOLS=-or DOLS=-3//空進
出S:=DOLS=-or DOLS=3;  //空出




請問這樣對嗎?因為把總版主給的語法加入到我的進場條件以後,還是出現一樣的問題"如果手上有多單,就不再出現多單進場的訊號()必須空手才出現進場訊號,相同的如果手上有空單,要等空手在能再出現空單訊號 那要怎麼加呢?",請問是哪裡寫錯了呢?
XA:=MA(CLOSE,20);
XB:=MA(CLOSE,60);
多單條件:=CROSS(XA,XB);
多單出場:=CROSS(XB,XA);
空單條件:CROSS(XB,XA);
空單出場:=CROSS(XA,XB);
ENTERLONG:多單條件;{多單進場}
EXITLONG:多單出場;{多單出場}
ENTERSHORT:空單條件;{空單進場}
EXITSHORT:空單出場;{空單出場}
進L:=多單條件 or barpos=0;
出L:=多單出場 or barpos=0;
進S:=空單條件 or barpos=0;
出S:=空單出場 or barpos=0;
NowLS:=0; //1.多, -1.空, 0.無
DOLS:=C*0;
Do進:=進L-進S; Do出:=出L-出S;
for i=1 to datacount do begin
if NowLS=0 then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS;
end else begin
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS*3;
end else if NowLS=Do出[i] then begin
NowLS:=0; DOLS[i]:=Do出[i]*2;
end;
end;
end;

//整併後的結果
進L:=DOLS=1 or DOLS=3; //多進
出L:=DOLS=2 or DOLS=-3; //多出
進S:=DOLS=-1 or DOLS=-3; //空進
出S:=DOLS=-2 or DOLS=3; //空出


由 cgjj 在 2010-12-01 14:25 發表:

併後的結果您未帶入, 把底下四行接於尾端
應該就可看到變化

ENTERLONG:=進L;
EXITLONG:=出L;
ENTERSHORT:=進S;
EXITSHORT:=出S;


由 yisong 在 2010-12-06 13:49 發表:

引用:
最初由 cgjj 發表
併後的結果您未帶入, 把底下四行接於尾端
應該就可看到變化

ENTERLONG:=進L;
EXITLONG:=出L;
ENTERSHORT:=進S;
EXITSHORT:=出S;


請教一下,如果要把這個訊號產生後,輸出到外部的TXT檔,讓下單機(下單大師)去讀取這個TXT檔來判斷下單,請教語法哪裡有問題呢?(標示紅色的那段)
多單條件1:=CROSS(MA10,MA20);
多單條件2:=CROSS(MA20,MA60);
多單出場1:=CROSS(MA20,MA10);
多單出場2:=CROSS(MA60,MA20);
空單條件1:=CROSS(MA20,MA10);
空單條件2:=CROSS(MA60,MA20);
空單出場1:=CROSS(MA10,MA20);
空單出場2:=CROSS(MA20,MA60);
進L:=多單條件1 OR 多單條件2 or barpos=0;
出L:=多單出場1 OR 多單出場2 or barpos=0;
進S:=空單條件1 OR 空單條件2 or barpos=0;
出S:=空單出場1 OR 空單出場2 or barpos=0;
NowLS:=0; //1.多, -1.空, 0.無
DOLS:=C*0;
Do進:=進L-進S; Do出:=出L-出S;
for i=1 to datacount do begin
if NowLS=0 then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS;
end else begin
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS*3;
end else if NowLS=Do出[i] then begin
NowLS:=0; DOLS[i]:=Do出[i]*2;
end;
end;
end;
//整併後的結果
進L:=DOLS=1 or DOLS=3; //多進
出L:=DOLS=2 or DOLS=-3; //多出
進S:=DOLS=-1 or DOLS=-3; //空進
出S:=DOLS=-2 or DOLS=3; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;
//下面這一段請幫忙看一下,要把訊號輸出到外部檔案
CurrentPos := 0;{條件成立後,目前總倉位}
orderStr:= numtostr(year,0) + '/' +numtostr(month,0)+ '/'+numtostr(day,0) + ' '+numtostr(hour,0)+':'+numtostr(minute,0)+':0,'+ numtostr(CurrentPos,0) + ',' +numtostr(close,0);
<%
Dim fso, MyFile
orderStr = FFL.VarData("orderStr")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile= fso.CreateTextFile("C:\Current.txt", True)
MyFile.WriteLine(orderStr)
MyFile.Close
%>


由 yisong 在 2010-12-06 15:13 發表:

引用:
最初由 yisong 發表
請教一下,如果要把這個訊號產生後,輸出到外部的TXT檔,讓下單機(下單大師)去讀取這個TXT檔來判斷下單,請教語法哪裡有問題呢?(標示紅色的那段)
多單條件1:=CROSS(MA10,MA20);
多單條件2:=CROSS(MA20,MA60);
多單出場1:=CROSS(MA20,MA10);
多單出場2:=CROSS(MA60,MA20);
空單條件1:=CROSS(MA20,MA10);
空單條件2:=CROSS(MA60,MA20);
空單出場1:=CROSS(MA10,MA20);
空單出場2:=CROSS(MA20,MA60);
進L:=多單條件1 OR 多單條件2 or barpos=0;
出L:=多單出場1 OR 多單出場2 or barpos=0;
進S:=空單條件1 OR 空單條件2 or barpos=0;
出S:=空單出場1 OR 空單出場2 or barpos=0;
NowLS:=0; //1.多, -1.空, 0.無
DOLS:=C*0;
Do進:=進L-進S; Do出:=出L-出S;
for i=1 to datacount do begin
if NowLS=0 then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS;
end else begin
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS*3;
end else if NowLS=Do出[i] then begin
NowLS:=0; DOLS[i]:=Do出[i]*2;
end;
end;
end;
//整併後的結果
進L:=DOLS=1 or DOLS=3; //多進
出L:=DOLS=2 or DOLS=-3; //多出
進S:=DOLS=-1 or DOLS=-3; //空進
出S:=DOLS=-2 or DOLS=3; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;
//下面這一段請幫忙看一下,要把訊號輸出到外部檔案
CurrentPos := 0;{條件成立後,目前總倉位}
orderStr:= numtostr(year,0) + '/' +numtostr(month,0)+ '/'+numtostr(day,0) + ' '+numtostr(hour,0)+':'+numtostr(minute,0)+':0,'+ numtostr(CurrentPos,0) + ',' +numtostr(close,0);
<%
Dim fso, MyFile
orderStr = FFL.VarData("orderStr")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile= fso.CreateTextFile("C:\Current.txt", True)
MyFile.WriteLine(orderStr)
MyFile.Close
%>


順便請教一下,如果要加入兩個條件
1.30點停損
ex.多單進場在8395, 若股價跌破8365則立刻停損出場(不等該根K棒收盤)
2.進場後獲利達50點以上,折返33%則停利該如何寫呢?
ex.多單進場在8395,若股價超過8445以上折返33%則獲利出場,例如8395買進後漲到8495,則此時停利點會在8495-0.33*(8495-8395)=8462, 若股價不再創高點,當股價跌破8462時會停利出場
謝謝


由 cgjj 在 2010-12-06 15:16 發表:

引用:
最初由 yisong 發表
請教一下,如果要把這個訊號產生後,輸出到外部的TXT檔,讓下單機(下單大師)去讀取這個TXT檔來判斷下單,請教語法哪裡有問題呢?(標示紅色的那段)
多單條件1:=CROSS(MA10,MA20);
多單條件2:=CROSS(MA20,MA60);
多單出場1:=CROSS(MA20,MA10);
多單出場2:=CROSS(MA60,MA20);
空單條件1:=CROSS(MA20,MA10);
空單條件2:=CROSS(MA60,MA20);
空單出場1:=CROSS(MA10,MA20);
空單出場2:=CROSS(MA20,MA60);
進L:=多單條件1 OR 多單條件2 or barpos=0;
出L:=多單出場1 OR 多單出場2 or barpos=0;
進S:=空單條件1 OR 空單條件2 or barpos=0;
出S:=空單出場1 OR 空單出場2 or barpos=0;
NowLS:=0; //1.多, -1.空, 0.無
DOLS:=C*0;
Do進:=進L-進S; Do出:=出L-出S;
for i=1 to datacount do begin
if NowLS=0 then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS;
end else begin
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DOLS[i]:=NowLS*3;
end else if NowLS=Do出[i] then begin
NowLS:=0; DOLS[i]:=Do出[i]*2;
end;
end;
end;
//整併後的結果
進L:=DOLS=1 or DOLS=3; //多進
出L:=DOLS=2 or DOLS=-3; //多出
進S:=DOLS=-1 or DOLS=-3; //空進
出S:=DOLS=-2 or DOLS=3; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;
//下面這一段請幫忙看一下,要把訊號輸出到外部檔案
CurrentPos := 0;{條件成立後,目前總倉位}
orderStr:= numtostr(year,0) + '/' +numtostr(month,0)+ '/'+numtostr(day,0) + ' '+numtostr(hour,0)+':'+numtostr(minute,0)+':0,'+ numtostr(CurrentPos,0) + ',' +numtostr(close,0);
<%
Dim fso, MyFile
orderStr = FFL.VarData("orderStr")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile= fso.CreateTextFile("C:\Current.txt", True)
MyFile.WriteLine(orderStr)
MyFile.Close
%>



奇狐本身到目前為止並無提供自動下單的功能, 詳見這說明(要了解風險)
http://www.chiefox.com.tw/bbs/showt...&threadid=11107

抱歉, 有關自動下單處理之程式部份
為避免爭議, 恕不協助, 請自行處理, 或洽提供的廠商
我們僅就公式語法使用上技術支援


由 freecloud 在 2010-12-06 15:25 發表:

引用:
最初由 cgjj 發表
奇狐本身到目前為止並無提供自動下單的功能, 詳見這說明(要了解風險)
http://www.chiefox.com.tw/bbs/showt...&threadid=11107

抱歉, 有關自動下單處理之程式部份
為避免爭議, 恕不協助, 請自行處理, 或洽提供的廠商
我們僅就公式語法使用上技術支援




目前市場上的下單機在使用奇狐寫指標時,
都是寫出文字檔的方式進行,
不過...這種做法問題會比較多
建議您去海龜網站看一下策略精靈
不須寫文字檔,直接讀取奇狐的訊號變化就可下單
可以免去許多問題
網址...www.239505.com.tw 海龜網站>>策略精靈


由 yisong 在 2010-12-06 16:30 發表:

引用:
最初由 yisong 發表
順便請教一下,如果要加入兩個條件
1.30點停損
ex.多單進場在8395, 若股價跌破8365則立刻停損出場(不等該根K棒收盤)
2.進場後獲利達50點以上,折返33%則停利該如何寫呢?
ex.多單進場在8395,若股價超過8445以上折返33%則獲利出場,例如8395買進後漲到8495,則此時停利點會在8495-0.33*(8495-8395)=8462, 若股價不再創高點,當股價跌破8462時會停利出場
謝謝


這兩個問題呢?還請總版主幫忙,謝謝


由 cgjj 在 2010-12-07 10:12 發表:

引用:
最初由 yisong 發表
順便請教一下,如果要加入兩個條件
1.30點停損
ex.多單進場在8395, 若股價跌破8365則立刻停損出場(不等該根K棒收盤)
2.進場後獲利達50點以上,折返33%則停利該如何寫呢?
ex.多單進場在8395,若股價超過8445以上折返33%則獲利出場,例如8395買進後漲到8495,則此時停利點會在8495-0.33*(8495-8395)=8462, 若股價不再創高點,當股價跌破8462時會停利出場
謝謝



***** 有修正原碼, 請見後續討論 *****


由 yisong 在 2010-12-07 11:06 發表:

引用:
最初由 cgjj 發表
原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;

..........
省略.........
..........
省略.........

//DoLS意義:
// 1.多進, 2.多出,  3.空翻多,  4.多盈衰出,  5.多損出
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出



請教一下,這個源碼似乎少了上次您指導過的幾行
//整併後的結果
進L:=DOLS=1 or DOLS=3; //多進
出L:=DOLS=2 or DOLS=-3; //多出
進S:=DOLS=-1 or DOLS=-3; //空進
出S:=DOLS=-2 or DOLS=3; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;
請問這幾行需要加入嗎?(ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT這幾個一定要加,但前面那四行需要加嗎?)


由 cgjj 在 2010-12-07 11:28 發表:

引用:
最初由 yisong 發表
請教一下,這個源碼似乎少了上次您指導過的幾行
//整併後的結果
進L:=DOLS=1 or DOLS=3; //多進
出L:=DOLS=2 or DOLS=-3; //多出
進S:=DOLS=-1 or DOLS=-3; //空進
出S:=DOLS=-2 or DOLS=3; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;
請問這幾行需要加入嗎?(ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT這幾個一定要加,但前面那四行需要加嗎?)



//方法是一樣的, 如下:
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;


若您把公式改建立為[技術指標]類型的公式
就不一定非要這四個變數
ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT
這四個變數是[交易系統]類型的公式內定專屬的


由 yisong 在 2010-12-07 14:40 發表:

引用:
最初由 cgjj 發表
//方法是一樣的, 如下:
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;


若您把公式改建立為[技術指標]類型的公式
就不一定非要這四個變數
ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT
這四個變數是[交易系統]類型的公式內定專屬的


請問要如何修改成技術指標,方便在即時盤中可以知道該交易訊號是根據哪個條件出場的,要改哪些內容呢?


由 cgjj 在 2010-12-07 14:56 發表:

引用:
最初由 yisong 發表
請問要如何修改成技術指標,方便在即時盤中可以知道該交易訊號是根據哪個條件出場的,要改哪些內容呢?


依據 DOLS 值, 顯示不同的文字或訊號即可
DRAWICON 可顯示符號
DRAWTEXT 可顯示文字
更多的相關函數, 請查閱繪圖函數


由 yisong 在 2010-12-07 15:48 發表:

引用:
最初由 cgjj 發表
依據 DOLS 值, 顯示不同的文字或訊號即可
DRAWICON 可顯示符號
DRAWTEXT 可顯示文字
更多的相關函數, 請查閱繪圖函數


可以了,謝謝


由 yisong 在 2010-12-07 22:08 發表:

請教一下,加入您所提供的程式碼後,如圖所示,未到30點停損價卻出現多損出的出場條件,請教是哪裡出問題呢?


由 cgjj 在 2010-12-08 09:03 發表:

引用:
最初由 yisong 發表
請教一下,加入您所提供的程式碼後,如圖所示,未到30點停損價卻出現多損出的出場條件,請教是哪裡出問題呢?


該段程式進場是用收盤價
計算控損: 多是採最低價計算, 空是採最高價計算
您再核對一次看看

PS: 請標註您核對K棒之日期和時間, 這樣比較容易協助您唷


由 yisong 在 2010-12-08 12:25 發表:

引用:
最初由 cgjj 發表
該段程式進場是用收盤價
計算控損: 多是採最低價計算, 空是採最高價計算
您再核對一次看看

PS: 請標註您核對K棒之日期和時間, 這樣比較容易協助您唷


那個空翻多的時間點是12/2 10:37, 後面多損出的時間點為12/2 10:53
計算控損: 多是採最低價計算, 空是採最高價計算
這邊指的最高最低是當天最高最低還是當跟k棒的高跟低呢?


由 cgjj 在 2010-12-08 12:33 發表:

引用:
最初由 yisong 發表
那個空翻多的時間點是12/2 10:37, 後面多損出的時間點為12/2 10:53
計算控損: 多是採最低價計算, 空是採最高價計算
這邊指的最高最低是當天最高最低還是當跟k棒的高跟低呢?



是當根的高跟低

問題應該是在此, 將
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; //反手

改為
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; //反手


由 cgjj 在 2010-12-08 12:38 發表:

//修正後的完整原碼:
//關鍵字:交易範例

原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;
Do進:=進L-進SDo出:=出L-出S;
損控:=30控盈基:=50控盈衰率:=33/100;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DoLS[i]:=NowLSMax盈:=0;
    if 
NowLS<>0 then 進價:=CC[i];
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DoLS[i]:=NowLS*3進價:=CC[i]; Max盈:=0//反手
    
end else begin
      損HL
:=LL[i]*(NowLS=1)+HH[i]*(NowLS=-1);
      
盈利:=(CC[i]-進價)*NowLS;
      if (
損HL-進價)*NowLS<=-損控 then begin
        DoLS
[i]:=NowLS*5NowLS:=0//停損出
      
end else begin
        盈衰
:=Max盈-盈利;
        if 
盈衰>Max盈*控盈衰率 and Max盈>控盈基 then begin
          DoLS
[i]:=NowLS*4NowLS:=0//盈衰出
        
end else if NowLS=Do出[ithen begin
          DoLS
[i]:=Do出[i]*2NowLS:=0//訊號出
        
end;
      
end;
      if 
盈利>Max盈 then Max盈:=盈利;
    
end;
  
end;
end;
//DoLS意義:
// 1.多進, 2.多出,  3.空翻多,  4.多盈衰出,  5.多損出
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出


由 yisong 在 2010-12-08 12:44 發表:

引用:
最初由 cgjj 發表
是當根的高跟低

問題應該是在此, 將
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; //反手

改為
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; //反手


好像可以了,我在多看幾天驗證一下,謝謝


由 cgjj 在 2010-12-08 13:34 發表:

引用:
最初由 yisong 發表
好像可以了,我在多看幾天驗證一下,謝謝


還要再補上一部份, 才正確
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; //反手

改為
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; Max盈:=0; //反手


由 yisong 在 2010-12-09 13:14 發表:

引用:
最初由 cgjj 發表
還要再補上一部份, 才正確
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; //反手

改為
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; Max盈:=0; //反手



想請教一下,今天我新增了一個條件到"進S"內,原本指標都可以跑,但加入了LLV(指標A,0)<0 條件後,卻出現"指標數組下標越界或超出有效數據區間"的錯誤訊息,條件如下
進S:=空單條件1 OR 空單條件2 or barpos=0 and LLV(指標A,0)<0;

想請教可能是甚麼原因呢?


由 cgjj 在 2010-12-09 13:36 發表:

引用:
最初由 yisong 發表
想請教一下,今天我新增了一個條件到"進S"內,原本指標都可以跑,但加入了LLV(指標A,0)<0 條件後,卻出現"指標數組下標越界或超出有效數據區間"的錯誤訊息,條件如下
進S:=空單條件1 OR 空單條件2 or barpos=0 and LLV(指標A,0)<0;

想請教可能是甚麼原因呢?



您用 and 的用意為何?
是 LLV(指標A,0)<0 這組條件一定要成立 [進S] 才成立嗎?

若答 "是" 請這樣改
進S:=(空單條件1 OR 空單條件2) and LLV(指標A,0)<0 or barpos=0;


由 yisong 在 2010-12-09 14:02 發表:

引用:
最初由 cgjj 發表
您用 and 的用意為何?
是 LLV(指標A,0)<0 這組條件一定要成立 [進S] 才成立嗎?

若答 "是" 請這樣改
進S:=(空單條件1 OR 空單條件2) and LLV(指標A,0)<0 or barpos=0;


是的,我是要LLV(指標A,0)<0一定要成立才可以,這樣可以了
另外請教一下,如果我要讓訊號再指定時間出現出場訊號該怎麼寫呢?
舉例來說13:30時不論賺賠,只有手上有部位一律平倉出場。

謝謝


由 cgjj 在 2010-12-09 14:05 發表:

引用:
最初由 yisong 發表
是的,我是要LLV(指標A,0)<0一定要成立才可以,這樣可以了
另外請教一下,如果我要讓訊號再指定時間出現出場訊號該怎麼寫呢?
舉例來說13:30時不論賺賠,只有手上有部位一律平倉出場。

謝謝



將 time=133000 列為出場條件之一即可
Time 為K棒的時間
或許 time>133000 比較合乎你的需求


由 yisong 在 2010-12-09 15:42 發表:

引用:
最初由 cgjj 發表
將 time=133000 列為出場條件之一即可
Time 為K棒的時間
或許 time>133000 比較合乎你的需求


我將time>133000加入訊號終結果並沒有產生出場訊號,請幫忙看一下是哪裡寫錯了呢?
另外想要請教一下 or barpos=0這個附帶的條件一定要加嗎?因為不知道為何要加這個條件,"BARPOS=數據位置,函數返回當前是第幾根K線",所以加入 or BARPOS=0會回傳0的數值(表示不是第0根K線)但用意為何呢?謝謝
進L:=(多單條件1 OR 多單條件2) and 指標A>0 or barpos=0;
出L:=多單出場1 OR 多單出場2 or time>133000 or barpos=0;
進S:=(空單條件1 OR 空單條件2) and 指標B<0 or barpos=0;
出S:=空單出場1 OR 空單出場2 or time>133000 or barpos=0;


由 cgjj 在 2010-12-09 15:59 發表:

引用:
最初由 yisong 發表
我將time>133000加入訊號終結果並沒有產生出場訊號,請幫忙看一下是哪裡寫錯了呢?
另外想要請教一下 or barpos=0這個附帶的條件一定要加嗎?因為不知道為何要加這個條件,"BARPOS=數據位置,函數返回當前是第幾根K線",所以加入 or BARPOS=0會回傳0的數值(表示不是第0根K線)但用意為何呢?謝謝
進L:=(多單條件1 OR 多單條件2) and 指標A>0 or barpos=0;
出L:=多單出場1 OR 多單出場2 or time>133000 or barpos=0;
進S:=(空單條件1 OR 空單條件2) and 指標B<0 or barpos=0;
出S:=空單出場1 OR 空單出場2 or time>133000 or barpos=0;



or BARPOS=0 是一種取巧的寫法, 詳見這邊的解說:
http://www.chiefox.com.tw/bbs/showt...60805#post60805

出S:=空單出場1 OR 空單出場2 or time>133000 or barpos=0;
在分線鐘跑嗎? 這個部份程式沒錯唷
可能是您後面銜接的程式, 過濾所導致的問題


由 yisong 在 2010-12-09 16:26 發表:

引用:
最初由 cgjj 發表
or BARPOS=0 是一種取巧的寫法, 詳見這邊的解說:
http://www.chiefox.com.tw/bbs/showt...60805#post60805

出S:=空單出場1 OR 空單出場2 or time>133000 or barpos=0;
在分線鐘跑嗎? 這個部份程式沒錯唷?
可能是您後面銜接的程式, 過濾所導致的問題


我是在1min線下面跑,我把這個條件加入到整併後的結果後面就可以產生訊號了,只不過遇到一個問題是,加入time>133000這個條件後,每天的133000後面每根K棒都產生訊號,要怎麼改才能變成13:30以後手上有部位時平倉,平倉後不再進場呢?
//整併後的結果
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5 or time>133000; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5 or time>133000; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;


由 cgjj 在 2010-12-09 16:45 發表:

引用:
最初由 yisong 發表
我是在1min線下面跑,我把這個條件加入到整併後的結果後面就可以產生訊號了,只不過遇到一個問題是,加入time>133000這個條件後,每天的133000後面每根K棒都產生訊號,要怎麼改才能變成13:30以後手上有部位時平倉,平倉後不再進場呢?
//整併後的結果
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5 or time>133000; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5 or time>133000; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;



自進場之條件下手解決就可
例如:
進L:=(DoLS=1 or DoLS=3) and time<=133000;

提醒您
一般來說時間控制會在訊號整併前就決定了
不會於整併後才加入
兩者結果會不一樣的


由 yisong 在 2010-12-09 18:02 發表:

引用:
最初由 cgjj 發表
自進場之條件下手解決就可
例如:
進L:=(DoLS=1 or DoLS=3) and time<=133000;

提醒您
一般來說時間控制會在訊號整併前就決定了
不會於整併後才加入
兩者結果會不一樣的


奇怪,改成版主建議的方式後還是一樣,在133000後會一直出現訊號,是哪裡還有問題呢?
我有把這個time<=133000分別加到整併前和整併後都試過,但是結果都一樣。


由 cgjj 在 2010-12-09 18:14 發表:

引用:
最初由 yisong 發表
奇怪,改成版主建議的方式後還是一樣,在133000後會一直出現訊號,是哪裡還有問題呢?
我有把這個time<=133000分別加到整併前和整併後都試過,但是結果都一樣。



把處理此段的程式和其後續銜接的程式貼出來
否則難以協助您 Check


由 yisong 在 2010-12-09 18:28 發表:

引用:
最初由 cgjj 發表
把處理此段的程式和其後續銜接的程式貼出來
否則難以協助您 Check


程式如下,麻煩您了
進L:=(多單條件1 OR 多單條件2) and time<=133000 or barpos=0;
出L:=多單出場1 OR 多單出場2 or barpos=0;
進S:=(空單條件1 OR 空單條件2) and time<=133000 or barpos=0;
出S:=空單出場1 OR 空單出場2 or barpos=0;
NowLS:=0; //1.多, -1.空, 0.無
DoLS:=C*0; CC:=C; HH:=H; LL:=L;
Do進:=進L-進S; Do出:=出L-出S;
損控:=30; 控盈基:=50; 控盈衰率:=33/100;
for i=1 to datacount do begin
if NowLS=0 then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS; Max盈:=0;
if NowLS<>0 then 進價:=CC[i];
end else begin
if NowLS=-Do進[i] then begin
NowLS:=Do進[i]; DoLS[i]:=NowLS*3; 進價:=CC[i]; Max盈:=0; //反手
end else begin
損HL:=LL[i]*(NowLS=1)+HH[i]*(NowLS=-1);
盈利:=(CC[i]-進價)*NowLS;
if (損HL-進價)*NowLS<=-損控 then begin
DoLS[i]:=NowLS*5; NowLS:=0; //停損出
end else begin
盈衰:=Max盈-盈利;
if 盈衰>Max盈*控盈衰率 and Max盈>控盈基 then begin
DoLS[i]:=NowLS*4; NowLS:=0; //盈衰出
end else if NowLS=Do出[i] then begin
DoLS[i]:=Do出[i]*2; NowLS:=0; //訊號出
end;
end;
if 盈利>Max盈 then Max盈:=盈利;
end;
end;
end;
//DoLS意義:
// 1.多進, 2.多出, 3.空翻多, 4.多盈衰出, 5.多損出
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出
//整併後的結果
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5 or time>133000; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5 or time>133000; //空出
ENTERLONG:進L;
EXITLONG:出L;
ENTERSHORT:進S;
EXITSHORT:出S;


由 cgjj 在 2010-12-09 18:34 發表:

引用:
最初由 yisong 發表
[B]程式如下,麻煩您了
.....................


改這樣試試(都要在前)

進L:=(多單條件1 OR 多單條件2) and time<=133000 or barpos=0;
出L:=多單出場1 OR 多單出場2 or barpos=0 or time>133000;
進S:=(空單條件1 OR 空單條件2) and time<=133000 or barpos=0;
出S:=空單出場1 OR 空單出場2 or barpos=0 or time>133000;
//..............省略.............
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5; //空出


由 yisong 在 2010-12-09 18:46 發表:

引用:
最初由 cgjj 發表
改這樣試試(都要在前)

進L:=(多單條件1 OR 多單條件2) and time<=133000 or barpos=0;
出L:=多單出場1 OR 多單出場2 or barpos=0 or time>133000;
進S:=(空單條件1 OR 空單條件2) and time<=133000 or barpos=0;
出S:=空單出場1 OR 空單出場2 or barpos=0 or time>133000;
//..............省略.............
進L:=DoLS=1 or DoLS=3; //多進
出L:=DoLS=2 or DoLS=-3 or DoLS=4 or DoLS=5; //多出
進S:=DoLS=-1 or DoLS=-3; //空進
出S:=DoLS=-2 or DoLS=3 or DoLS<=-4 or DoLS=-5; //空出


將時間都改放在前面以後,變成133000不會出場了


由 cgjj 在 2010-12-09 19:21 發表:

引用:
最初由 yisong 發表
將時間都改放在前面以後,變成133000不會出場了


因為多和空之強制出場在同時間, 故需改為這樣
原碼:

強出
:=time>133000;
進L:=多進 and 強出=or barpos=0
出L:=多出 or barpos=0;
進S:=空進 and 強出=or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;
Do進:=進L-進SDo出:=出L-出S;
損控:=30控盈基:=50控盈衰率:=33/100;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DoLS[i]:=NowLSMax盈:=0;
    if 
NowLS<>0 then 進價:=CC[i];
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DoLS[i]:=NowLS*3進價:=CC[i]; Max盈:=0//反手
    
end else begin
      
if 強出[ithen begin
        DoLS
[i]:=NowLS*6NowLS:=0//強制出場
      
end else begin
        損HL
:=LL[i]*(NowLS=1)+HH[i]*(NowLS=-1);
        
盈利:=(CC[i]-進價)*NowLS;
        if (
損HL-進價)*NowLS<=-損控 then begin
          DoLS
[i]:=NowLS*5NowLS:=0//停損出
        
end else begin
          盈衰
:=Max盈-盈利;
          if 
盈衰>Max盈*控盈衰率 and Max盈>控盈基 then begin
            DoLS
[i]:=NowLS*4NowLS:=0//盈衰出
          
end else if NowLS=Do出[ithen begin
            DoLS
[i]:=Do出[i]*2NowLS:=0//訊號出
          
end;
        
end;
        if 
盈利>Max盈 then Max盈:=盈利;
      
end;
    
end;
  
end;
end;
//DoLS意義:
// 1.多進, 2.多出,  3.空翻多,  4.多盈衰出,  5.多損出,  6.強制出場
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出, -6.強制出場 
進L:=DoLS=or DoLS=3//多進
出L:=DoLS=or DoLS=-or DoLS=or DoLS=or DoLS=6//多出
進S:=DoLS=-or DoLS=-3//空進
出S:=DoLS=-or DoLS=or DoLS<=-or DoLS=-or DoLS=-6//空出


由 yisong 在 2010-12-09 20:11 發表:

引用:
最初由 cgjj 發表
因為多和空之強制出場在同時間, 故需改為這樣
原碼:

強出
:=time>133000;
進L:=多進 and 強出=or barpos=0
出L:=多出 or barpos=0;
進S:=空進 and 強出=or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;
----
以下省略---



可以了,謝謝。
下面這行要修改
DoLS:C*0; CC:=C; HH:=H; LL:=L;改成
DoLS:=C*0; CC:=C; HH:=H; LL:=L;
因為非交易訊號變量只能用":="賦值


由 cgjj 在 2010-12-10 08:57 發表:

引用:
最初由 yisong 發表
可以了,謝謝。
下面這行要修改
DoLS:C*0; CC:=C; HH:=H; LL:=L;改成
DoLS:=C*0; CC:=C; HH:=H; LL:=L;
因為非交易訊號變量只能用":="賦值



這個是可以忽略的
需改是因為您把此段公式應用於[交易系統]類型的公式
您自己處理知道即可, 不需提出

以一般開發公式的程序來說
通常都是先寫為[技術指標]類型的公式
在其中檢驗過都無誤後
才改為[交易系統]類型的公式
因為在[技術指標]中比較容易偵錯(可標記繪圖和顯示變數值)
會留DoLS顯示, 是為了讓您好核對其數值做檢驗


由 yisong 在 2010-12-10 09:12 發表:

引用:
最初由 cgjj 發表
這個是可以忽略的
需改是因為您把此段公式應用於[交易系統]類型的公式
您自己處理知道即可, 不需提出

以一般開發公式的程序來說
通常都是先寫為[技術指標]類型的公式
在其中檢驗過都無誤後
才改為[交易系統]類型的公式
因為在[技術指標]中比較容易偵錯(可標記繪圖和顯示變數值)
會留DoLS顯示, 是為了讓您好核對其數值做檢驗


原來是這樣,多學了一課,謝謝


由 yisong 在 2011-05-22 21:42 發表:

引用:
最初由 cgjj 發表
因為多和空之強制出場在同時間, 故需改為這樣
原碼:

強出
:=time>133000;
進L:=多進 and 強出=or barpos=0
出L:=多出 or barpos=0;
進S:=空進 and 強出=or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;
Do進:=進L-進SDo出:=出L-出S;
損控:=30控盈基:=50控盈衰率:=33/100;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DoLS[i]:=NowLSMax盈:=0;
    if 
NowLS<>0 then 進價:=CC[i];
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DoLS[i]:=NowLS*3進價:=CC[i]; Max盈:=0//反手



請教一下,如果需要符合進L條件後過進L條件那根K棒高點才買進的話要怎麼修改呢?
試了很多方式都不行,只好請版主幫忙一下了,謝謝


由 abcd15678 在 2011-05-23 04:55 發表:

引用:
最初由 yisong 發表
請教一下,如果需要符合進L條件後過進L條件那根K棒高點才買進的話要怎麼修改呢?
試了很多方式都不行,只好請版主幫忙一下了,謝謝





.....
.....
多進:=多單條件=0 and c>ref(h,BARSLAST(多單條件));//加上去應該就行了
強出:=time>133000;
進L:=多進 and 強出=0 or barpos=0;
.....
.....


由 yisong 在 2011-05-25 23:05 發表:

引用:
最初由 abcd15678 發表
.....
.....
多進:=多單條件=0 and c>ref(h,BARSLAST(多單條件));//加上去應該就行了
強出:=time>133000;
進L:=多進 and 強出=0 or barpos=0;
.....
.....


不好意思,試過了還是不行,說是與法有誤,再找時間再試看看是哪裡出問題,不過還是先感謝您。


由 84380487 在 2012-05-25 10:25 發表:

引用:
最初由 cgjj 發表
//修正後的完整原碼:
//關鍵字:交易範例

原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;
Do進:=進L-進SDo出:=出L-出S;
損控:=30控盈基:=50控盈衰率:=33/100;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DoLS[i]:=NowLSMax盈:=0;
    if 
NowLS<>0 then 進價:=CC[i];
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DoLS[i]:=NowLS*3進價:=CC[i]; Max盈:=0//反手
    
end else begin
      損HL
:=LL[i]*(NowLS=1)+HH[i]*(NowLS=-1);
      
盈利:=(CC[i]-進價)*NowLS;
      if (
損HL-進價)*NowLS<=-損控 then begin
        DoLS
[i]:=NowLS*5NowLS:=0//停損出
      
end else begin
        盈衰
:=Max盈-盈利;
        if 
盈衰>Max盈*控盈衰率 and Max盈>控盈基 then begin
          DoLS
[i]:=NowLS*4NowLS:=0//盈衰出
        
end else if NowLS=Do出[ithen begin
          DoLS
[i]:=Do出[i]*2NowLS:=0//訊號出
        
end;
      
end;
      if 
盈利>Max盈 then Max盈:=盈利;
    
end;
  
end;
end;
//DoLS意義:
// 1.多進, 2.多出,  3.空翻多,  4.多盈衰出,  5.多損出
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出




您好!
在這篇文章中找到正好有我的需求,就把程式拿來套用確實可行!感謝您!
但目前的程式套上之後,在觸發點會出現訊號沒錯,但在主圖上訊號與訊號之間沒有劃出線,請問可以加上什麼條件使他會劃出線呢?


由 cgjj 在 2012-05-25 13:59 發表:

引用:
最初由 84380487 發表
您好!
在這篇文章中找到正好有我的需求,就把程式拿來套用確實可行!感謝您!
但目前的程式套上之後,在觸發點會出現訊號沒錯,但在主圖上訊號與訊號之間沒有劃出線,請問可以加上什麼條件使他會劃出線呢?



//參考範例:(接續前段程式之後)
MMSS:=ref(DoLS,barslast(DoLS<>0));
MMCC:=ref(C,barslast(DoLS<>0));
RR:=MMSS=1 or MMSS=3;
PARTLINE(RR and ref(RR,1),MMCC) colorred;
GG:=MMSS=-1 or MMSS=-3;
PARTLINE(GG and ref(GG,1),MMCC) colorgreen;


由 84380487 在 2012-05-28 09:13 發表:

引用:
最初由 cgjj 發表
//參考範例:(接續前段程式之後)
MMSS:=ref(DoLS,barslast(DoLS<>0));
MMCC:=ref(C,barslast(DoLS<>0));
RR:=MMSS=1 or MMSS=3;
PARTLINE(RR and ref(RR,1),MMCC) colorred;
GG:=MMSS=-1 or MMSS=-3;
PARTLINE(GG and ref(GG,1),MMCC) colorgreen;



您好!
套用之後很成功,非常感謝您的協助!謝謝


由 海參威 在 2012-05-30 09:04 發表:

引用:
最初由 cgjj 發表
//修正後的完整原碼:
//關鍵字:交易範例

原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0CC:=CHH:=HLL:=L;
Do進:=進L-進SDo出:=出L-出S;
損控:=30控盈基:=50控盈衰率:=33/100;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DoLS[i]:=NowLSMax盈:=0;
    if 
NowLS<>0 then 進價:=CC[i];
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DoLS[i]:=NowLS*3進價:=CC[i]; Max盈:=0//反手
    
end else begin
      損HL
:=LL[i]*(NowLS=1)+HH[i]*(NowLS=-1);
      
盈利:=(CC[i]-進價)*NowLS;
      if (
損HL-進價)*NowLS<=-損控 then begin
        DoLS
[i]:=NowLS*5NowLS:=0//停損出
      
end else begin
        盈衰
:=Max盈-盈利;
        if 
盈衰>Max盈*控盈衰率 and Max盈>控盈基 then begin
          DoLS
[i]:=NowLS*4NowLS:=0//盈衰出
        
end else if NowLS=Do出[ithen begin
          DoLS
[i]:=Do出[i]*2NowLS:=0//訊號出
        
end;
      
end;
      if 
盈利>Max盈 then Max盈:=盈利;
    
end;
  
end;
end;
//DoLS意義:
// 1.多進, 2.多出,  3.空翻多,  4.多盈衰出,  5.多損出
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出




非常謝謝你提供的程式碼
因不懂程式,勞煩您再幫我解決

現我實測時碰上另一問題
以作多為例
一:我的認知及需求"停損"是立刻出場也就是當根K棒的"L"(當根K棒進行中)
符合"停損"條件(不等該根K棒收盤)
現遇上的是
1:當根K棒"進行中"碰到同時有"多翻空"的條件時(雖未完成K棒),"停損"無法即時成立
2:當根K棒"完成時"符合"停損"也符合"多翻空"時,"多翻空"的條件無法成立

我的需求是"停損"是當根K棒進行中,或不管有無"多翻空"的條件時(雖未完成K棒)
就"成立"直到此K棒完成,
或完成K棒時未有"多翻空(作多條件)"條件,時"成立",
"多翻空"當K棒完成時"多翻空(作多條件)成立","停損"就不同時成立.

二:"多出"及"盈出"同"一"狀況

作空與作多,同問題

勞煩您,辛苦了...感謝....

__________________
.....大道至簡.....
真言一句話....
不傳千編文.....
http://hcw8845.blogspot.com


由 84380487 在 2012-05-30 10:13 發表:

引用:
最初由 海參威 發表
非常謝謝你提供的程式碼
因不懂程式,勞煩您再幫我解決

現我實測時碰上另一問題
以作多為例
一:我的認知及需求"停損"是立刻出場也就是當根K棒的"L"(當根K棒進行中)
符合"停損"條件(不等該根K棒收盤)
現遇上的是
1:當根K棒"進行中"碰到同時有"多翻空"的條件時(雖未完成K棒),"停損"無法即時成立
2:當根K棒"完成時"符合"停損"也符合"多翻空"時,"多翻空"的條件無法成立

我的需求是"停損"是當根K棒進行中,或不管有無"多翻空"的條件時(雖未完成K棒)
就"成立"直到此K棒完成,
或完成K棒時未有"多翻空(作多條件)"條件,時"成立",
"多翻空"當K棒完成時"多翻空(作多條件)成立","停損"就不同時成立.

二:"多出"及"盈出"同"一"狀況

作空與作多,同問題

勞煩您,辛苦了...感謝....



您好!
我也遇到同樣的問題!
我希望的方式是,假如本來是「多」,當行情往下走觸碰停損之後停損條件成立就空手出場,當停損條件成立後即強制出場,不會因為當根k棒尚未走完造成其他訊號產生時而又重新成立!假如當根k棒走完並沒有「多翻空」,也就是回到原來多的走勢,那空手就持續空手,等到下一個「多條件成立」時,就「多單進場」。假如當根k棒走完之後出現「多翻空」,這時條件成立所以「空單進場」。反之亦如此!謝謝!


由 cgjj 在 2012-05-30 11:54 發表:

引用:
最初由 海參威 發表
非常謝謝你提供的程式碼
因不懂程式,勞煩您再幫我解決

現我實測時碰上另一問題
以作多為例
一:我的認知及需求"停損"是立刻出場也就是當根K棒的"L"(當根K棒進行中)
符合"停損"條件(不等該根K棒收盤)
現遇上的是
1:當根K棒"進行中"碰到同時有"多翻空"的條件時(雖未完成K棒),"停損"無法即時成立
2:當根K棒"完成時"符合"停損"也符合"多翻空"時,"多翻空"的條件無法成立

我的需求是"停損"是當根K棒進行中,或不管有無"多翻空"的條件時(雖未完成K棒)
就"成立"直到此K棒完成,
或完成K棒時未有"多翻空(作多條件)"條件,時"成立",
"多翻空"當K棒完成時"多翻空(作多條件)成立","停損"就不同時成立.

二:"多出"及"盈出"同"一"狀況

作空與作多,同問題

勞煩您,辛苦了...感謝....


引用:
最初由 84380487 發表
您好!
我也遇到同樣的問題!
我希望的方式是,假如本來是「多」,當行情往下走觸碰停損之後停損條件成立就空手出場,當停損條件成立後即強制出場,不會因為當根k棒尚未走完造成其他訊號產生時而又重新成立!假如當根k棒走完並沒有「多翻空」,也就是回到原來多的走勢,那空手就持續空手,等到下一個「多條件成立」時,就「多單進場」。假如當根k棒走完之後出現「多翻空」,這時條件成立所以「空單進場」。反之亦如此!謝謝!



評測和實做, 處理上有時是需不一樣的

評測歷史K棒 >>

當 K根 同時有停損訊和反手訊的狀況, 方式選擇:
1.以停損處理, 反手訊號將其忽略
(也就是停損訊號需判斷在前)
2.直接反手做(也就是反手訊號需判斷在前)
3,先做停損再做反進(若停損價和反手進價一樣,則與2相同)

那一種方式洽當, 要看您指標訊號本身的特性(規則)

若這根之反手訊, 未用這根的值計算, 或僅用到這根之開盤價
那麼可能方式2較適合(因為K棒一開始就決定)


若反手訊是依賴當根 C,H,L,V 其中一個值來決定, 那麼問題就很複雜
倘若停損價當根又會浮動, 那麼更複雜...
停損和反手誰先誰後評測上可能都有爭議, 見仁見智去決擇了
(處理先後與採用方法見仁見智,方法不同評測結果就不同)

一般來說
反手訊和停損價, 都未用這根的值計算(或僅用到這根之開盤價)
碰到同時有停損訊和反手訊在同根的狀況, 會直接採用反手動作
(因為反手訊是該根一開始就成立, 停損則不一定)
如此, 評測上和實做不會有前面說的困擾(因為K棒一開始就決定)
註:必須指標本身設計的特性能符合

若非如此
盤中則可能是停損先成立, 但亦也有可能是反手先成立
甚至當K棒未完成時, 反手訊成不成立可能尚未確立(會變)
這樣...在評測上的考量就隨人變異很大, 實做上必須多所因應

前段的程式碼
反手是可以改在停損之後(也就是先以停損處理, 反手訊號將其忽略)
但相對來說, 等於是不承認之前定義的反手規則了

是改訊號規則比較好, 還是改判斷次序比較好, 還是改...
可能要自行多思量評估決擇囉 ...


由 84380487 在 2012-05-30 13:06 發表:

引用:
最初由 cgjj 發表
評測和實做, 處理上有時是需不一樣的

評測歷史K棒 >>

當 K根 同時有停損訊和反手訊的狀況, 方式選擇:
1.以停損處理, 反手訊號將其忽略
(也就是停損訊號需判斷在前)
2.直接反手做(也就是反手訊號需判斷在前)
3,先做停損再做反進(若停損價和反手進價一樣,則與2相同)



您好!
感謝您播冗花這麼多時間來回答我的問題!萬分感謝!
以您提供的123條件中,在我實作裡遇到的問題中,我想應該是第1和第3個的綜合是我的需求!
目前我的進場方式為,當根k棒產生訊號之後,下一根k棒的開盤價進場!也就是說,我希望的停損與反手的方式是,倘若本來是「多」,而走勢往下行進,無論是當根k棒或是之後的k棒組合,只要達到停損條件則強制停損出場,比如我設定30點停損,當進場之後損失30點則停損直接成立!出場空手之後,直到出現下一個多或空的訊號再行進場!也就是說,假設本來是「多」,突然出現走勢急往下,當根k棒觸及停損則停損直接成立,而此根k棒走完之後,若是有出現訊號,則會在下一根的開盤價進場!謝謝!
流程如下:
1.進場-->觸及停損價或停利價則強制出場-->空手-->之後再出現訊號則再進場
2.進場-->「當根k棒」觸及停損價或停利價則強制出場-->空手-->「當根k棒」出現訊號則於下一根開盤價進場,若無訊號則繼續空手直到下個訊號出現
謝謝!


由 海參威 在 2012-05-30 15:19 發表:

引用:
最初由 cgjj 發表
評測和實做, 處理上有時是需不一樣的

評測歷史K棒 >>

當 K根 同時有停損訊和反手訊的狀況, 方式選擇:
1.以停損處理, 反手訊號將其忽略
(也就是停損訊號需判斷在前)
2.直接反手做(也就是反手訊號需判斷在前)
3,先做停損再做反進(若停損價和反手進價一樣,則與2相同)

那一種方式洽當, 要看您指標訊號本身的特性(規則)

若這根之反手訊, 未用這根的值計算, 或僅用到這根之開盤價
那麼可能方式2較適合(因為K棒一開始就決定)


若反手訊是依賴當根 C,H,L,V 其中一個值來決定, 那麼問題就很複雜
倘若停損價當根又會浮動, 那麼更複雜...
停損和反手誰先誰後評測上可能都有爭議, 見仁見智去決擇了
(處理先後與採用方法見仁見智,方法不同評測結果就不同)

一般來說
反手訊和停損價, 都未用這根的值計算(或僅用到這根之開盤價)
碰到同時有停損訊和反手訊在同根的狀況, 會直接採用反手動作
(因為反手訊是該根一開始就成立, 停損則不一定)
如此, 評測上和實做不會有前面說的困擾(因為K棒一開始就決定)
註:必須指標本身設計的特性能符合

若非如此
盤中則可能是停損先成立, 但亦也有可能是反手先成立
甚至當K棒未完成時, 反手訊成不成立可能尚未確立(會變)
這樣...在評測上的考量就隨人變異很大, 實做上必須多所因應

前段的程式碼
反手是可以改在停損之後(也就是先以停損處理, 反手訊號將其忽略)
但相對來說, 等於是不承認之前定義的反手規則了

是改訊號規則比較好, 還是改判斷次序比較好, 還是改...
可能要自行多思量評估決擇囉 ...








非常感謝您的回覆


====引用=====
評測和實做, 處理上有時是需不一樣的

評測歷史K棒 >>

當 K根 同時有停損訊和反手訊的狀況, 方式選擇:
1.以停損處理, 反手訊號將其忽略
(也就是停損訊號需判斷在前)
2.直接反手做(也就是反手訊號需判斷在前)
3,先做停損再做反進(若停損價和反手進價一樣,則與2相同)


我的需求:

2.直接反手做
若這根之反手訊, 未用這根的值計算, 或僅用到這根之開盤價
那麼可能方式2較適合(因為K棒一開始就決定)

停損訊只會發生於當根K(此根K進行中)..也就是停損條件成立時(如停損條件=30,當盤中
觸及時),只標記DoLS=-5,就不會再標記別的訊號直到收盤前一筆


而進場訊只用在這根之開盤價,也就是前根的收盤成立"進場訊".
如前根的收盤,停損及進場訊同時並存,則不標停損訊

請教我如何更改及標示..謝謝您了

__________________
.....大道至簡.....
真言一句話....
不傳千編文.....
http://hcw8845.blogspot.com


由 cgjj 在 2012-05-30 16:27 發表:

引用:
最初由 海參威 發表
非常感謝您的回覆


====引用=====
評測和實做, 處理上有時是需不一樣的

評測歷史K棒 >>

當 K根 同時有停損訊和反手訊的狀況, 方式選擇:
1.以停損處理, 反手訊號將其忽略
(也就是停損訊號需判斷在前)
2.直接反手做(也就是反手訊號需判斷在前)
3,先做停損再做反進(若停損價和反手進價一樣,則與2相同)


我的需求:

2.直接反手做
若這根之反手訊, 未用這根的值計算, 或僅用到這根之開盤價
那麼可能方式2較適合(因為K棒一開始就決定)

停損訊只會發生於當根K(此根K進行中)..也就是停損條件成立時(如停損條件=30,當盤中
觸及時),只標記DoLS=-5,就不會再標記別的訊號直到收盤前一筆


而進場訊只用在這根之開盤價,也就是前根的收盤成立"進場訊".
如前根的收盤,停損及進場訊同時並存,則不標停損訊

請教我如何更改及標示..謝謝您了




以那段原碼來說, 它就是直接反手做了

若這根之反手訊, 未用這根的值計算, 或僅用到這根之開盤價
反手訊號是K棒被產生的當下, 就立即被執行了
換言之
在有反手訊號的那根K棒, 根本沒機會跑到停損的部份

那段原碼的特性是
1.進場當根不控損不盈衰 (包含反向進場)
2.進場之後 a.先檢查控損 b.再檢查控盈衰 c.再檢查出場訊
========================================================

例如:
以 均線黃金交叉 當多方進場條件來說
BB:=CROSS(MA(CLOSE,10),MA(CLOSE,20)); //BB值當根會浮動
多進:=ref(BB,1); //取前根算之BB值, "多進" 值當根不會浮動
再將 "多進" 帶入前段程式碼中

BB:=CROSS(MA(CLOSE,10),MA(CLOSE,20));
多進:=ref(BB,1);
進L:=多進

重點在於
多進 不可以直接帶入前面會浮動的 BB
同樣的多轉空, 觸發反手訊號之 "空進", 其也是不能帶入會浮動的

我想您的問題, 是在於把會浮動的 BB 帶入 "多進" 了


由 cgjj 在 2012-05-30 16:30 發表:

引用:
最初由 84380487 發表
您好!
感謝您播冗花這麼多時間來回答我的問題!萬分感謝!
以您提供的123條件中,在我實作裡遇到的問題中,我想應該是第1和第3個的綜合是我的需求!
目前我的進場方式為,當根k棒產生訊號之後,下一根k棒的開盤價進場!也就是說,我希望的停損與反手的方式是,倘若本來是「多」,而走勢往下行進,無論是當根k棒或是之後的k棒組合,只要達到停損條件則強制停損出場,比如我設定30點停損,當進場之後損失30點則停損直接成立!出場空手之後,直到出現下一個多或空的訊號再行進場!也就是說,假設本來是「多」,突然出現走勢急往下,當根k棒觸及停損則停損直接成立,而此根k棒走完之後,若是有出現訊號,則會在下一根的開盤價進場!謝謝!
流程如下:
1.進場-->觸及停損價或停利價則強制出場-->空手-->之後再出現訊號則再進場
2.進場-->「當根k棒」觸及停損價或停利價則強制出場-->空手-->「當根k棒」出現訊號則於下一根開盤價進場,若無訊號則繼續空手直到下個訊號出現
謝謝!



請參考前篇(上一層)的答覆
我想您的問題, 應該也是訊號引入的問題


由 海參威 在 2012-05-31 04:58 發表:

[QUOTE]最初由 cgjj 發表
[B]以那段原碼來說, 它就是直接反手做了

若這根之反手訊, 未用這根的值計算, 或僅用到這根之開盤價
反手訊號是K棒被產生的當下, 就立即被執行了
換言之
在有反手訊號的那根K棒, 根本沒機會跑到停損的部份

那段原碼的特性是
1.進場當根不控損不盈衰 (包含反向進場)
2.進場之後 a.先檢查控損 b.再檢查控盈衰 c.再檢查出場訊
========================================================

謝謝您了...真辛苦您了...

原來我的問題是出在
當根k收盤時 如有控損或盈哀時,同方向又符合進場條件,無法成立
希望能成立進場條件而忽略控損或盈哀訊號
應如何修改..

先謝了...感恩

__________________
.....大道至簡.....
真言一句話....
不傳千編文.....
http://hcw8845.blogspot.com


由 84380487 在 2012-05-31 09:07 發表:

引用:
最初由 海參威 發表
謝謝您了...真辛苦您了...

原來我的問題是出在
當根k收盤時 如有控損或盈哀時,同方向又符合進場條件,無法成立
希望能成立進場條件而忽略控損或盈哀訊號
應如何修改..

先謝了...感恩 [/B]


您好!我也發現我是相同的問題,就是假設停損和訊號觸發條件成立在同根k棒發生的話,停損會成功沒有問題,但訊號觸發條件卻無法成立!謝謝


由 cgjj 在 2012-05-31 14:30 發表:

引用:
最初由 海參威 發表
..............................
原來我的問題是出在
當根k收盤時 如有控損或盈哀時,同方向又符合進場條件,無法成立
希望能成立進場條件而忽略控損或盈哀訊號
應如何修改..



那段原碼, 並不會有如此結果唷

[多進]之後, 現仍處於多方(未出場)
當再次碰到[多進]條件成立時 <== 以 [多進R] 來稱呼
[多進R] 會被忽略掉, 因為是同方向
但是 [多進R] 那根的盈損控制仍會被跑到

故不會因為 "再次碰到同方向進場訊號" , 導致控損或盈哀不動作


問題的重點, 可能是我前面舉的例子:

若是這樣引入訊號, 就會有困擾
多進:=CROSS(MA(CLOSE,10),MA(CLOSE,20));
進L:=多進; //若K棒未完成, 訊號成立狀態會變(當根進L值會變)

若是改為這樣引入訊號, 就 Ok
多進:=CROSS(MA(CLOSE,10),MA(CLOSE,20)); //計算條件
進L:=ref(多進,1); //取前根計算條件來動作(當根進L值不變)

導入進場訊號, 入那段原碼時...
請先確認導入的進場訊號, 在K棒未完成時, 其是不會變動的


由 海參威 在 2012-06-01 07:12 發表:

您好,真辛苦您了

根據您的指導,我已將原先的
進L:=多進 or barpos=0;
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;

改為向左移一根
進L:=ref(多進,1) or barpos=0;
出L:=ref(多出,1) or barpos=0;
進S:=ref(空進,1) or barpos=0;
出S:=ref(空出,1) or barpos=0;

己解決了原先的問題,真是太好了,
然而又產生了另一問題,
因向左移一根,它進場價是捉進場當根的收盤價,
而不是真正的進場的開盤價,故("損出",盈出",及出場)的計算
都受影嚮而產生錯誤

故我將原碼中的
CC=C 改為 OO=O
進價:=CC[i] 改為 進價:=OO[i]

如此是否有誤...

,希望您再次指導

另"盈出"的部份也勞煩您了...

太感謝您了..辛苦了

__________________
.....大道至簡.....
真言一句話....
不傳千編文.....
http://hcw8845.blogspot.com


由 cgjj 在 2012-06-04 15:33 發表:

引用:
最初由 海參威 發表
您好,真辛苦您了

根據您的指導,我已將原先的
進L:=多進 or barpos=0;
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;

改為向左移一根
進L:=ref(多進,1) or barpos=0;
出L:=ref(多出,1) or barpos=0;
進S:=ref(空進,1) or barpos=0;
出S:=ref(空出,1) or barpos=0;

己解決了原先的問題,真是太好了,
然而又產生了另一問題,
因向左移一根,它進場價是捉進場當根的收盤價,
而不是真正的進場的開盤價,故("損出",盈出",及出場)的計算
都受影嚮而產生錯誤

故我將原碼中的
CC=C 改為 OO=O
進價:=CC[i] 改為 進價:=OO[i]

如此是否有誤...

,希望您再次指導

另"盈出"的部份也勞煩您了...

太感謝您了..辛苦了



改後特性與原本設計的不同:
 1.改為以開盤價當進場價(原用收盤價進)
 2.控盈衰改用 H價來算多方之盈,L價來算空方之盈 (原用收盤價算)

原碼:

進L
:=多進 or barpos=0
出L:=多出 or barpos=0;
進S:=空進 or barpos=0;
出S:=空出 or barpos=0;
NowLS:=0//1.多, -1.空, 0.無
DoLS:C*0OO:=OCC:=CHH:=HLL:=L;
Do進:=進L-進SDo出:=出L-出S;
損控:=30控盈基:=50控盈衰率:=33/100;
for 
i=1 to datacount do begin
  
if NowLS=0 then begin
    NowLS
:=Do進[i]; DoLS[i]:=NowLSMax盈:=0;
    if 
NowLS<>0 then 進價:=OO[i];
  
end else begin
    
if NowLS=-Do進[ithen begin
      NowLS
:=Do進[i]; DoLS[i]:=NowLS*3進價:=OO[i]; Max盈:=0//反手
    
end else begin
      損HL
:=LL[i]*(NowLS=1)+HH[i]*(NowLS=-1);
      
盈利:=(HH[i]-進價)*(NowLS=1)+(進價-LL[i])*(NowLS=-1);
      if (
損HL-進價)*NowLS<=-損控 then begin
        DoLS
[i]:=NowLS*5NowLS:=0//停損出
      
end else begin
        盈衰
:=Max盈-盈利;
        if 
盈衰>Max盈*控盈衰率 and Max盈>控盈基 then begin
          DoLS
[i]:=NowLS*4NowLS:=0//盈衰出
        
end else if NowLS=Do出[ithen begin
          DoLS
[i]:=Do出[i]*2NowLS:=0//訊號出
        
end;
      
end;
      if 
盈利>Max盈 then Max盈:=盈利;
    
end;
  
end;
end;
//DoLS意義:
// 1.多進, 2.多出,  3.空翻多,  4.多盈衰出,  5.多損出
//-1.空進,-2.空出, -3.多翻空, -4.空盈衰出, -5.空損出


由 海參威 在 2012-06-05 07:33 發表:

非常..非常的感謝您了..
我進行測試如有不明白,再行請教
感恩.......

__________________
.....大道至簡.....
真言一句話....
不傳千編文.....
http://hcw8845.blogspot.com


全部時間均為台灣時間, 現在時間為21:39
在這個頁面顯示本主題全部的 63 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.