![]() |
在這個頁面顯示本主題全部的 33 個文章 |
奇狐社區論壇 (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=16808)
請問如果要限制交易次數條件該怎麼寫呢?
原碼:
強出:=TIME>=132000;
限進:=TIME>=130000;
多進:=B1 and 強出=0 and 限進=0 or barpos=0;
多出:=多補 or barpos=0;
空進:=S1 and 強出=0 and 限進=0 or barpos=0;
空出:=空補 or barpos=0;
進場:=多進-空進;
出場:=多出-空出;
控損:=30;
控利:=60;
進價:=0;
CC:=C;
多空:=0; //1.多 -1.空 0.無
進出:=C*0 NOAXIS;
盈虧:=C*0 linethick;
for i = 1 to datacount do begin
if 多空=0 then begin
多空:=進場[i]; 進出[i]:=多空;
if 多空<>0 then 進價:=CC[i];
end else if 多空<>0 then begin
盈虧[i]:=(CC[i]-進價)*多空;
if 強出[i] then begin
進出[i]:=多空*5; 多空:=0;
end else if 多空=出場[i] then begin
進出[i]:=多空*2; 多空:=0;
end else if 盈虧[i]>=控利 then begin
進出[i]:=多空*3; 多空:=0;
end else if 盈虧[i]<=-控損 then begin
進出[i]:=多空*4; 多空:=0;
end;
end;
end;
進L:=進出=1; //多進
進S:=進出=-1; //空進
出L:=進出=2 or 進出=3 or 進出=4 or 進出=5; //多出
出S:=進出=-2 or 進出=-3 or 進出=-4 or 進出=-5; //空出
ENTERLONG:進L; //多進
ENTERSHORT:進S; //空進
EXITLONG:出L; //多出
EXITSHORT:出S; //空出
//[進出] 這變數值代表意義如下:
//1.多單進場, 2.多單出場, 3.多控利出, 4.多控損出, 5.強制出場
//-1.空單進場,-2.空單出場,-3.空控利出, -4.空控損出, -5.強制出場
回覆: 請問如果要限制交易次數條件該怎麼寫呢?
引用:
最初由 sync 發表
原碼:
強出:=TIME>=132000;
限進:=TIME>=130000;
多進:=B1 and 強出=0 and 限進=0 or barpos=0;
多出:=多補 or barpos=0;
空進:=S1 and 強出=0 and 限進=0 or barpos=0;
空出:=空補 or barpos=0;
進場:=多進-空進;
出場:=多出-空出;
控損:=30;
控利:=60;
進價:=0;
CC:=C;
多空:=0; //1.多 -1.空 0.無
進出:=C*0 NOAXIS;
盈虧:=C*0 linethick;
for i = 1 to datacount do begin
if 多空=0 then begin
多空:=進場[i]; 進出[i]:=多空;
if 多空<>0 then 進價:=CC[i];
end else if 多空<>0 then begin
盈虧[i]:=(CC[i]-進價)*多空;
if 強出[i] then begin
進出[i]:=多空*5; 多空:=0;
end else if 多空=出場[i] then begin
進出[i]:=多空*2; 多空:=0;
end else if 盈虧[i]>=控利 then begin
進出[i]:=多空*3; 多空:=0;
end else if 盈虧[i]<=-控損 then begin
進出[i]:=多空*4; 多空:=0;
end;
end;
end;
進L:=進出=1; //多進
進S:=進出=-1; //空進
出L:=進出=2 or 進出=3 or 進出=4 or 進出=5; //多出
出S:=進出=-2 or 進出=-3 or 進出=-4 or 進出=-5; //空出
ENTERLONG:進L; //多進
ENTERSHORT:進S; //空進
EXITLONG:出L; //多出
EXITSHORT:出S; //空出
//[進出] 這變數值代表意義如下:
//1.多單進場, 2.多單出場, 3.多控利出, 4.多控損出, 5.強制出場
//-1.空單進場,-2.空單出場,-3.空控利出, -4.空控損出, -5.強制出場
原碼:
.........請見後續修正過的範例........
Re:另外,測試結果停損停利訊號要收盤價達到才會出現訊號,而非觸價就出現???
該段程式是用收盤價來算盈虧, 收盤價盤中是會浮動的
對於評測來說沒有對錯
也有人用最嚴格的 H 和 L 來算盈虧 (最壞)
看您自己想要如何算?如何用?
不同方式撰寫公式的考量不同
引用:
最初由 cgjj 發表
Re:另外,測試結果停損停利訊號要收盤價達到才會出現訊號,而非觸價就出現???
該段程式是用收盤價來算盈虧, 收盤價盤中是會浮動的
對於評測來說沒有對錯
也有人用最嚴格的 H 和 L 來算盈虧 (最壞)
看您自己想要如何算?如何用?
不同方式撰寫公式的考量不同
引用:
最初由 sync 發表
謝謝版大的指導!
請問所謂最嚴格的 H 和 L 來算盈虧 (最壞),指的是作多時停損停利用L來判斷,而作空時停損停利用H來判斷,是這意思嗎?
如此一來是否就可以達到觸價停損停利的功能?即當根K棒H、L觸及停損停利條件訊號就不會消失了?
可以請版大依此範例改寫程式碼給小弟參考嗎?
謝謝。
回覆: 回覆: 請問如果要限制交易次數條件該怎麼寫呢?
引用:
最初由 cgjj 發表
加個計數器判斷就可, 範例如下:
原碼:
強出:=TIME>=132000;
限進:=TIME>=130000;
多進:=B1 and 強出=0 and 限進=0 or barpos=0;
多出:=多補 or barpos=0;
空進:=S1 and 強出=0 and 限進=0 or barpos=0;
空出:=空補 or barpos=0;
進場:=多進-空進;
出場:=多出-空出;
控損:=30;
控利:=60;
進價:=0;
CC:=C;
多空:=0; //1.多 -1.空 0.無
進出:=C*0 NOAXIS;
盈虧:=C*0 linethick;
DECK:=date<>ref(date,1) or barpos=1;
for i = 1 to datacount do begin
if DECK then CountN:=0;
if 多空=0 then begin
...............略...............
回覆: 回覆: 回覆: 請問如果要限制交易次數條件該怎麼寫呢?
引用:
最初由 sync 發表
版大您好:
編譯時出現語法錯誤:
if DECK then CountN:=0;
請您再檢查一下,謝謝!!!
引用:
最初由 cgjj 發表
只要控價不會浮動
那麼 H>控價 或 L<控價 , 一但成立就不會消失
因為 H值只會越來越高, L值只會越來越低
把這個弄清楚後, 您的問題自然就不再是個問題了
想想盤中一根K棒
High價和Low價如何變化
Open價和Close價如何變化
重點是
您指標的運算規則和訊號計算, 本身要能符合這特性
引用:
最初由 sync 發表
依此例控價就是固定的值,不會浮動:
控損:=30;
控利:=60;
依實際交易情形來看:
作多觸價停利應該是H>=進場價+60
作多觸價停損應該是L<=進場價-30
作空觸價停利應該是L<=進場價-60
作空觸價停損應該是H>=進場價+30
可以麻煩版大寫出程式語法給大家參考嗎?
小弟抓破頭實在也想不出來???
如果可以的話,請用第一篇原來po的原碼改寫即可{不用再限制交易次數},謝謝,感恩!!!
原碼:
.........請見後續修正過的範例........
想法可以化為程式指標,但是有想法不一定有能力寫出來!!!
基本語法相信可以很快學會,較困難的版大會提供協助的,版大謝謝您!!!
奇狐擁有強大的功能,相信有cgjj版大的協助可以幫助更多有想法卻不太會寫程式的人加入奇狐的行列!!!
cgjj版大您好:
經實際測試發現計數器好像有問題,
3次交易之後還是會出現訊號。
3次之後出現的訊號然後下一根K棒平倉,有時候又像沒有計數器一樣正常出訊與平倉.......
不知問題在哪兒?
或許是我程式本身的問題?
可以先請版大檢查測試一下計數器的語法有問題嗎?
謝謝!
引用:
最初由 sync 發表
cgjj版大您好:
經實際測試發現計數器好像有問題,
3次交易之後還是會出現訊號。
3次之後出現的訊號然後下一根K棒平倉,有時候又像沒有計數器一樣正常出訊與平倉.......
不知問題在哪兒?
或許是我程式本身的問題?
可以先請版大檢查測試一下計數器的語法有問題嗎?
謝謝!
原碼:
強出:=TIME>=132000;
限進:=TIME>=130000;
多進:=B1 and 強出=0 and 限進=0 or barpos=0;
多出:=多補 or barpos=0;
空進:=S1 and 強出=0 and 限進=0 or barpos=0;
空出:=空補 or barpos=0;
進場:=多進-空進;
出場:=多出-空出;
控損:=30;
控利:=60;
進價:=0;
CC:=C; HH:=H; LL:=L;
多空:=0; //1.多 -1.空 0.無
進出:=C*0 NOAXIS;
DECK:=date<>ref(date,1) or barpos=1;
for i = 1 to datacount do begin
if DECK[i] then CountN:=0;
if 多空=0 then begin
if 進場[i]<>0 and CountN<3 then begin
多空:=進場[i]; 進出[i]:=多空;
進價:=CC[i]; CountN:=CountN+1;
end;
end else if 多空<>0 then begin
損HL:=LL[i]*(多空=1)+HH[i]*(多空=-1);
盈HL:=HH[i]*(多空=1)+LL[i]*(多空=-1);
損T:=(損HL-進價)*多空;
盈T:=(盈HL-進價)*多空;
if 強出[i] then begin
進出[i]:=多空*5; 多空:=0;
end else if 多空=出場[i] then begin
進出[i]:=多空*2; 多空:=0;
end else if 損T<=-控損 then begin
進出[i]:=多空*4; 多空:=0;
end else if 盈T>=控利 then begin
進出[i]:=多空*3; 多空:=0;
end;
end;
end;
//[進出] 這變數值代表意義如下:
//1.多單進場, 2.多單出場, 3.多控利出, 4.多控損出, 5.強制出場
//-1.空單進場,-2.空單出場,-3.空控利出, -4.空控損出, -5.強制出場
增加多轉空、空轉多條件?
cgjj 版主您好:
1、損盈計算我想用開盤價當進價,是否只要將CC:=C;改成CC:=O;就可以了?
2、小弟想增加多轉空、空轉多條件?
增加:
6.空出轉多
-6.多出轉空
//[進出] 這變數值代表意義如下:
//1.多單進場, 2.多單出場, 3.多控利出, 4.多控損出, 5.強制出場
//-1.空單進場,-2.空單出場,-3.空控利出, -4.空控損出, -5.強制出場
小弟自行嘗試將以下程式加入到程式最後:
end else if 多空=空進[i] or 多空=-多進[i] then begin
進出[i]:=-多空*6; 多空:=-多空;
發現多轉空、空轉多訊號應該沒問題,可是不會計算此次交易次數,
而且損盈計算會出現錯誤,造成不到停損點數卻出現停損出場訊號,
再次麻煩總版主幫忙,謝謝。
回覆: 增加多轉空、空轉多條件?
引用:
最初由 sync 發表
cgjj 版主您好:
1、損盈計算我想用開盤價當進價,是否只要將CC:=C;改成CC:=O;就可以了?
2、小弟想增加多轉空、空轉多條件?
增加:
6.空出轉多
-6.多出轉空
//[進出] 這變數值代表意義如下:
//1.多單進場, 2.多單出場, 3.多控利出, 4.多控損出, 5.強制出場
//-1.空單進場,-2.空單出場,-3.空控利出, -4.空控損出, -5.強制出場
小弟自行嘗試將以下程式加入到程式最後:
end else if 多空=空進[i] or 多空=-多進[i] then begin
進出[i]:=-多空*6; 多空:=-多空;
發現多轉空、空轉多訊號應該沒問題,可是不會計算此次交易次數,
而且損盈計算會出現錯誤,造成不到停損點數卻出現停損出場訊號,
再次麻煩總版主幫忙,謝謝。
原碼:
強出:=TIME>=132000;
限進:=TIME>=130000;
多進:=B1 and 強出=0 and 限進=0 or barpos=0;
多出:=多補 or barpos=0;
空進:=S1 and 強出=0 and 限進=0 or barpos=0;
空出:=空補 or barpos=0;
進場:=多進-空進;
出場:=多出-空出;
控損:=30;
控利:=60;
進價:=0;
OO:=O; CC:=C; HH:=H; LL:=L;
多空:=0; //1.多 -1.空 0.無
進出:=C*0 NOAXIS;
DECK:=date<>ref(date,1) or barpos=1;
for i = 1 to datacount do begin
if DECK[i] then CountN:=0;
if 多空=0 then begin
if 進場[i]<>0 and CountN<3 then begin
多空:=進場[i]; 進出[i]:=多空;
進價:=OO[i]; CountN:=CountN+1;
end;
end else if 多空<>0 then begin
損HL:=LL[i]*(多空=1)+HH[i]*(多空=-1);
盈HL:=HH[i]*(多空=1)+LL[i]*(多空=-1);
損T:=(損HL-進價)*多空;
盈T:=(盈HL-進價)*多空;
if 強出[i] then begin
進出[i]:=多空*5; 多空:=0;
end else if 多空=出場[i] then begin
進出[i]:=多空*2; 多空:=0;
end else if 損T<=-控損 then begin
進出[i]:=多空*4; 多空:=0;
end else if 盈T>=控利 then begin
進出[i]:=多空*3; 多空:=0;
end else if 多空=空進[i] or 多空=-多進[i] then begin
進出[i]:=-多空*6; 多空:=-多空;
進價:=OO[i]; CountN:=CountN+1;
end;
end;
end;
回覆: 回覆: 增加多轉空、空轉多條件?
引用:
最初由 cgjj 發表
其中的此段程式
end else if 多空=空進[i] or 多空=-多進[i] then begin
...............
end;
其位置是否要往前調整, 視您自行想法來決擇拿捏了
回覆: 回覆: 回覆: 增加多轉空、空轉多條件?
引用:
最初由 sync 發表
感謝版大的幫忙。
請問調整位置是甚麼意思?
往前調整位置不同有甚麼影響嗎?
抱歉大大,小弟不懂?
回覆:
版大您好:
我想增加一個出場條件,
進場後最大獲利若曾達到30點以上,折返50%則停利出場該如何寫呢?
ex:做多最大獲利曾來到40點,則從最高價折返40*0.5=20點平倉。
最大獲利是用進場後曾經達到的最高H價來算多方之盈,最低L價來算空方之盈。
站上我有查到類似範例,但因某些條件語法不同,所以我不會改寫插入,
再次麻煩您的幫忙,謝謝。
回覆: 回覆:
引用:
最初由 sync 發表
版大您好:
我想增加一個出場條件,
進場後最大獲利若曾達到30點以上,折返50%則停利出場該如何寫呢?
ex:做多最大獲利曾來到40點,則從最高價折返40*0.5=20點平倉。
最大獲利是用進場後曾經達到的最高H價來算多方之盈,最低L價來算空方之盈。
站上我有查到類似範例,但因某些條件語法不同,所以我不會改寫插入,
再次麻煩您的幫忙,謝謝。
原碼:
強出:=TIME>=132000;
限進:=TIME>=130000;
多進:=B1 and 強出=0 and 限進=0 or barpos=0;
多出:=多補 or barpos=0;
空進:=S1 and 強出=0 and 限進=0 or barpos=0;
空出:=空補 or barpos=0;
進場:=多進-空進;
出場:=多出-空出;
控損:=30;
控利:=60;
進價:=0;
OO:=O; CC:=C; HH:=H; LL:=L;
多空:=0; //1.多 -1.空 0.無
進出:=C*0 NOAXIS;
DECK:=date<>ref(date,1) or barpos=1;
for i = 1 to datacount do begin
if DECK[i] then CountN:=0;
if 多空=0 then begin
if 進場[i]<>0 and CountN<3 then begin
多空:=進場[i]; 進出[i]:=多空; Max利:=0;
進價:=OO[i]; CountN:=CountN+1;
end;
end else if 多空<>0 then begin
損HL:=LL[i]*(多空=1)+HH[i]*(多空=-1);
盈HL:=HH[i]*(多空=1)+LL[i]*(多空=-1);
損T:=(損HL-進價)*多空;
盈T:=(盈HL-進價)*多空;
if 盈T>Max利 then Max利:=盈T;
if 強出[i] then begin
進出[i]:=多空*6; 多空:=0;
end else if 多空=出場[i] then begin
進出[i]:=多空*2; 多空:=0;
end else if 損T<=-控損 then begin
進出[i]:=多空*5; 多空:=0;
end else if 盈T>=控利 then begin
進出[i]:=多空*3; 多空:=0;
end else if Max利>30 and 盈T<Max利*0.5 then begin
進出[i]:=多空*4; 多空:=0;
end else if 多空=空進[i] or 多空=-多進[i] then begin
進出[i]:=-多空*7; 多空:=-多空;
進價:=OO[i]; CountN:=CountN+1;
end;
end;
end;
回覆:
感謝總版主的指導,非常感恩謝謝!
版大您好:
折返出場條件訊號會有消失問題,請問該如何改進?
引用:
最初由 sync 發表
版大您好:
折返出場條件訊號會有消失問題,請問該如何改進?
引用:
最初由 sync 發表
版大您好:
折返出場條件訊號會有消失問題,請問該如何改進?
引用:
最初由 sync 發表
我的想法是增加如下2計算式,請問這樣可以嗎?
折返盈HL:=LL[i]*(多空=1)+HH[i]*(多空=-1);
折返盈T:=(折返盈HL-進價)*多空;
end else if Max利>30 and 折返盈T<Max利*0.5 then begin
進出[i]:=多空*4; 多空:=0;
引用:
最初由 cgjj 發表
這樣算與原來程式中的 "損T" 是相等的
損HL:=LL[i]*(多空=1)+HH[i]*(多空=-1);
損T:=(損HL-進價)*多空;
將
end else if Max利>30 and 盈T<Max利*0.5 then begin
改為
end else if Max利>30 and 損T<Max利*0.5 then begin
就是您要的
引用:
最初由 cgjj 發表
您說的狀況應該是規則交互影響的關係(非程式問題)
這要看是那個規則先到囉
現相關次序是: (您可自行視需要調整)
1. 損T<=-控損
2. 盈T>=控利
3. Max利>30 and 盈T<Max利*0.5
引用:
最初由 sync 發表
版大您好:
我之前的想法錯了,訊號還是會有消失的問題,而且出場點位前面幾根K棒就到了訊號卻顯示在之後的K棒。
相關次序應該沒問題:
1. 損T<=-控損
2. 盈T>=控利
3. Max利>30 and 盈T<Max利*0.5
1條件到了停損沒有2、3的問題
2條件到了停利沒有1、3的問題
3條件介於1、2之間屬停利訊號
此三條件不致於互相衝突才對。
可以請版大幫我檢查看看程式有沒有問題嗎?謝謝。
引用:
最初由 cgjj 發表
請以實例抓圖標示有問題的地方, 這樣比較利於溝通了解
原碼若有異動添加, 請貼出來, 以利測試幫您找問題
引用:
最初由 sync 發表
版大您好:
問題在於盈T是取當根K棒最高、最低點計算∼(這樣對於固定點數停利沒問題)。
但盈T用於折返停利訊號會發生消失情形:
原因例如以做多為例∼
如果買進後從最高點Max利折返到7400要出場,若出場當根K棒開盤價為7395所以條件成立折返出場訊號就出現了(此時開盤價<=最高價<7400,訊號成立)。
可是如果折返出場當根K棒高點稍後上漲高於7400則條件又會變成不成立所以訊號會消失,訊號消失原因在於計算盈T的H從原本的小於折返點位<7400變成大於折返點位>7400。
不知道小弟這樣解釋清楚嗎?
有什麼辦法讓折返出場跟固定點數出場一樣點到就成立呢?
麻煩版大了,感恩!
引用:
最初由 sync 發表
版大您好:
我本來的想法是用損T取代盈T,可是這樣做又會發生另一種情況,例如做多買進之後若拉一根長紅棒,因為損T是用此時長紅棒的L價計算的,所以長紅棒有可能直接滿足Max利>30 and 損T<Max利*0.5的情形發生而直接出現訊號,雖然訊號不會消失了,可是這樣就不符合想要折返某比率才出場的用意了。
再次麻煩您了,謝謝。
引用:
最初由 sync 發表
版大您好:
我想了三天二夜終於想出解決辦法了。
看似困難的問題竟然是如此簡單。
長久以來麻煩您了,感恩。
引用:
最初由 cgjj 發表
不客氣 ^^
引用:
最初由 sync 發表
版大您好:
請問一下此程式語法可以用於分筆成交嗎?
因為我發現用於分筆成交,沒有達成任何訊號條件的情況下在最新成交的分筆常常會一直出現訊號後又消失,而且是多、空、平倉訊號亂跳。
麻煩了,謝謝。
^^
全部時間均為台灣時間, 現在時間為20:28 | 在這個頁面顯示本主題全部的 33 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.