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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [求救]迴圈語法及DoBS變數 [交易範例] (http://www.chiefox.com.tw/bbs/showthread.php?threadid=19807)


由 lung 在 2016-03-12 22:13 發表:

[求救]迴圈語法及DoBS變數

版主你好:

有學習寫 兩口單交易,當沖策略 ,
研究多時在迴圈語法及DoBS變數上卡關,
懇請版主檢視賜教、協助完成,感恩。

先建立子公式515BS,指標BSLINE為進出線
M1:=(CROSS(MA(CLOSE,5), MA(CLOSE,15)));
M2:=(CROSS(MA(CLOSE,15), MA(CLOSE,5)));
M3:=M1-M2;
方向:=BARSLAST( M3 );
BS_CT:=barslast((方向=1 and ref(方向<>1,1))OR (方向=-1 and ref(方向<>-1,1)));
BSLINE:REF(O, BS_CT);

再引用子公式515BS指標的MIN1、MIN5、MIN30 不同周期

當沖策略:
無論多單或空單,滿倉最多為兩口單。
多單庫存兩口時,如因多減碼一口或多平一口,未滿倉時,
多進或多加 訊號再出現時會再進一口,但滿倉時不下單,空單同上。
多訊或空訊皆為次一根,停損或停利皆為當根。
進場超過盈利20點則回檔12點 停利
進場超過盈利60點則回檔30% 停利
停損點數:15

在C>BS30 只做多 不做空,
C>BS1多進一口 //+1,滿倉時不下單。
C>BS5多加碼一口 //+1,滿倉時不下單。
C<BS1多減碼一口 // -1,無多單庫存時不下單
C<BS5多減碼一口 // -1,無多單庫存時不下單

在C<BS30 只做空不做多,
C<BS1空單一口 // -1,滿倉時不下單。
C<BS5空加碼一口 // -1,滿倉時不下單。
C>BS1空減碼一口 // +1,無空單庫存時不下單
C>BS5空減碼一口 // +1,無空單庫存時不下單


以下是公式語法目前進度:( 後段應是錯誤一堆 > <” )

BS1:="515BS.BSLINE#MIN1";
BS5:=" 515BS.BSLINE#MIN5";
BS30:=" 515BS.BSLINE#MIN30";

多進:=C>BS30 and cross(C,BS1);// +1滿倉時不下單。
多加:=C>BS30 and cross(C,BS5);// +1滿倉時不下單。
多減:=C>BS30 and cross(BS1,C);// -1無多單庫存時不下單
多平:=C>BS30 and cross(BS5,C);// -1無多單庫存時不下單
空進:=C < BS30 and cross(BS1,C);// -1滿倉時不下單。
空加:=C < BS30 and cross(BS5,C);// -1滿倉時不下單。
空減:=C < BS30 and cross(C,BS1);// +1無空單庫存時不下單
空平:=C < BS30 and cross(C,BS5);// +1無空單庫存時不下單


StDoTime:=085000;
多進:= REF(多進,1) and time>=StDoTime or barpos=0;
多加:= REF(多加,1) and time>=StDoTime or barpos=0;
多減:= REF(多減,1) and time>=StDoTime or barpos=0;
多平:= REF(多平,1) and time>=StDoTime or barpos=0;
空進:= REF(空進,1) and time>=StDoTime or barpos=0;
空加:= REF(空加,1) and time>=StDoTime or barpos=0;
空減:= REF(空減,1) and time>=StDoTime or barpos=0;
空平:= REF(空平,1) and time>=StDoTime or barpos=0;
進場:= (多進+多加+空減+空平) - (空進+空加+多減+多平);

強出:=time>=133500;
限進:=time>=123500;
限停損次:=3; // 若為停損出場3次,當日不下單
滿倉:=2; //每日
停損點數:=15;

多進本:= ref(O,barslast(多進));
多加本:= ref(O,barslast(多加));
空進本:= ref(O,barslast(空進));
空加本:= ref(O,barslast(空加));

OO:=O; CC:=C; HH:=H; LL:=L;
StDE:=barpos=1 or time=StDoTime;
DoBS:C*0 NOAXIS; RecDO:C*0 linethick;

多空:=0; //1.多 -1.空 0.無

for i=1 to datacount do begin
if StDE[i] then begin
累停損次:=0; WaitBS:=0;
end;
if 多空=0 and 強出[i]=0 and 限進[i]=0 and 累停損次<限停損次then begin
if WaitBS=0 or WaitBS=進場[i] then begin
多空:=進場[i];
if 多空<>0 then begin
進價:=OO[i]; Max盈:=0; PreTN:=0; WaitBS:=-SGN(多空);
RecDO[i]:=SGN(多空);
end;
end;
end else if 多空<>0 then begin
NowDir:=SGN(多空);
if 強出[i] then begin
多空:=0; RecDO[i]:=NowDir*7;

end else if (C-多進本)*NowDir<= -停損點數
and多空:=2 then begin
多空:=1; 累停損次:=累停損次+1; //停損

end else if (C-多進本)*NowDir<= -停損點數
and多空:=1 then begin
多空:=0; 累停損次:=累停損次+1; //停損

end else if (C-多加本)*NowDir<= -停損點數
and多空:=2 then begin
多空:=1; 累停損次:=累停損次+1; //停損

end else if (C-多加本)*NowDir<= -停損點數
and多空:=1 then begin
多空:=0; 累停損次:=累停損次+1; //停損

end else if (C-空進本)*NowDir>= 停損點數
and多空:=-2 then begin
多空:=-1; 累停損次:=累停損次+1; //停損

end else if (C-空進本)*NowDir>= 停損點數
and多空:=-1 then begin
多空:=0; 累停損次:=累停損次+1; //停損

end else if (C-空加本)*NowDir>= 停損點數
and多空:=-2 then begin
多空:=-1; 累停損次:=累停損次+1; //停損

end else if (C-空加本)*NowDir>=停損點數
and多空:=-1 then begin
多空:=0; 累停損次:=累停損次+1; //停損


end else if
Max盈>=61 then begin

if 多進本+60 < Max盈*0.75 then 多空:=0;
end;
end else if
Max盈>=20 then begin

if 多進本+20 < Max盈*0.6 then 多空:=0;
end;


DoBS[i]:=多空;

end;

ENTERLONG: 多空=1; {多頭買入}
EXITLONG: 多空=-1 ; {多頭賣出}
ENTERSHORT: 多空=-1; {空頭買入}
EXITSHORT: 多空=1; {空頭賣出}

__________________
lung


由 cgjj 在 2016-03-14 09:57 發表:

回覆: [求救]迴圈語法及DoBS變數

引用:
最初由 lung 發表
版主你好:

有學習寫 兩口單交易,當沖策略 ,
研究多時在迴圈語法及DoBS變數上卡關,
懇請版主檢視賜教、協助完成,感恩。

先建立子公式515BS,指標BSLINE為進出線
M1:=(CROSS(MA(CLOSE,5), MA(CLOSE,15)));
M2:=(CROSS(MA(CLOSE,15), MA(CLOSE,5)));
M3:=M1-M2;
方向:=BARSLAST( M3 );
BS_CT:=barslast((方向=1 and ref(方向<>1,1))OR (方向=-1 and ref(方向<>-1,1)));
BSLINE:REF(O, BS_CT);

再引用子公式515BS指標的MIN1、MIN5、MIN30 不同周期

當沖策略:
無論多單或空單,滿倉最多為兩口單。
多單庫存兩口時,如因多減碼一口或多平一口,未滿倉時,
多進或多加 訊號再出現時會再進一口,但滿倉時不下單,空單同上。
多訊或空訊皆為次一根,停損或停利皆為當根。
進場超過盈利20點則回檔12點 停利
進場超過盈利60點則回檔30% 停利
停損點數:15

在C>BS30 只做多 不做空,
C>BS1多進一口 //+1,滿倉時不下單。
C>BS5多加碼一口 //+1,滿倉時不下單。
C<BS1多減碼一口 // -1,無多單庫存時不下單
C<BS5多減碼一口 // -1,無多單庫存時不下單

在C<BS30 只做空不做多,
C<BS1空單一口 // -1,滿倉時不下單。
C<BS5空加碼一口 // -1,滿倉時不下單。
C>BS1空減碼一口 // +1,無空單庫存時不下單
C>BS5空減碼一口 // +1,無空單庫存時不下單


以下是公式語法目前進度:( 後段應是錯誤一堆 > <” )

.......................



母公式是在哪個週期中跑呢?

先從子公式問題看起,下面這兩行怪怪的
方向:=BARSLAST( M3 );
BS_CT:=barslast((方向=1 and ref(方向<>1,1))OR (方向=-1 and ref(方向<>-1,1)));

BARSLAST( M3 ) 是取得M3成立至今的距離,故 "方向" 其值永遠 >=0,不會有負數
但 BS_CT 卻有 方向=-1 的判斷式在其中,非常奇怪
請確認規則無誤 ....

若規則無誤
此行
BS_CT:=barslast((方向=1 and ref(方向<>1,1))OR (方向=-1 and ref(方向<>-1,1)));
可簡化為
BS_CT:=barslast(方向=1);


由 lung 在 2016-03-14 11:46 發表:

版主你好:

1 母公式是在1分K 運行,因子公式有引用1分K ,較能快速反應盤勢。

2 子公式單獨運行正常,已簡化為
BS_CT:=barslast(方向=1);也正常。

謝謝

__________________
lung


由 cgjj 在 2016-03-14 15:35 發表:

引用:
最初由 lung 發表
版主你好:

1 母公式是在1分K 運行,因子公式有引用1分K ,較能快速反應盤勢。

2 子公式單獨運行正常,已簡化為
BS_CT:=barslast(方向=1);也正常。

謝謝



尚未[多進],遇到[多加],是否進場?

若[多進]和[多加]同時成立,是否一次進兩口?

以[多進]來說 (其餘亦有相同問題...)
前面描述的是 C>BS1 和程式中寫的 cross(C,BS1)
兩者是不相同的
[多進]判斷 是採 C>BS1 還是 cross(C,BS1) 呢?


由 lung 在 2016-03-14 16:28 發表:

版主你好:

尚未[多進],遇到[多加],是否進場?
是的,原先的想法C<BS5多減碼一口,多加訊號會再補一口。

若[多進]和[多加]同時成立,是否一次進兩口?
是的,但滿倉為2口單。

以[多進]來說 (其餘亦有相同問題...)
同上


前面描述的是 C>BS1 和程式中寫的 cross(C,BS1)
兩者是不相同的
[多進]判斷 是採 C>BS1 還是 cross(C,BS1) 呢?

原先用cross(C,BS1)是因擔心採 C>BS1進出,進場後會出現重複訊號,
如可過濾之後重複訊號,即採用 C>BS1進出,因在子公式已cross。


謝謝

__________________
lung


由 cgjj 在 2016-03-14 16:55 發表:

引用:
最初由 lung 發表
版主你好:

尚未[多進],遇到[多加],是否進場?
是的,原先的想法C<BS5多減碼一口,多加訊號會再補一口。

若[多進]和[多加]同時成立,是否一次進兩口?
是的,但滿倉為2口單。

以[多進]來說 (其餘亦有相同問題...)
同上


前面描述的是 C>BS1 和程式中寫的 cross(C,BS1)
兩者是不相同的
[多進]判斷 是採 C>BS1 還是 cross(C,BS1) 呢?

原先用cross(C,BS1)是因擔心採 C>BS1進出,進場後會出現重複訊號,
如可過濾之後重複訊號,即採用 C>BS1進出,因在子公式已cross。


謝謝



C>BS1 和 cross(C,BS1) 兩者運用上,操作特性是大不相同的!!

例如:
採 C>BS1 方式: 遇到停損或停利後,下根碰到 C>BS1 又會立即進場
採 cross(C,BS1) 方式: 遇到停損或停利後,則需等到 cross(C,BS1) 才會再進場

另外,相同的情況
多加碼採用 C>BS5 和多減碼採用 C<BS1,兩者同時成立的機會非常大
若改採 cross(C,BS5) 和 cross(BS1,C),兩者同時成立的機會很少


由 lung 在 2016-03-14 17:14 發表:

版主你好:

謝謝版主細心提示

都採 cross 方式

感恩

__________________
lung


由 cgjj 在 2016-03-15 09:36 發表:

引用:
最初由 lung 發表
版主你好:

謝謝版主細心提示

都採 cross 方式

感恩



C<BS5多減碼一口 // -1,無多單庫存時不下單
多平:=C>BS30 and cross(BS5,C);// -1無多單庫存時不下單

第一行按前面所說,改採 cross 方式
但改完後,這兩行描述的並不一致
一為減碼(減一口), 一為平倉(倉位全出)

又尚未[多進](無持倉),遇到[多加]仍會買入1口

再按程式來看,實際規則其實並無所謂的加碼減碼
而是有兩組買賣訊(單邊),例如:多進1、多進2、多出1、多出2

每個訊號操作一口,滿2口則不操作,以開盤價操作
8:50起才動作,13:35後強制出場,12:35後不再買入只賣出
多訊或空訊皆為次一根,停損或停利皆為當根
進場超過盈利20點則回檔12點停利
進場超過盈利60點則回檔30%停利
停損點數:15
當日停損滿3次,則當日不再下單

這樣對吧?


由 lung 在 2016-03-15 10:20 發表:

版主你好:


引用:

第一行按前面所說,改採 cross 方式
但改完後,這兩行描述的並不一致
一為減碼(減一口), 一為平倉(倉位全出)

又尚未[多進](無持倉),遇到[多加]仍會買入1口

再按程式來看,實際規則其實並無所謂的加碼減碼
而是有兩組買賣訊(單邊),例如:多進1、多進2、多出1、多出2

每個訊號操作一口,滿2口則不操作,以開盤價操作
8:50起才動作,13:35後強制出場,12:35後不再買入只賣出
多訊或空訊皆為次一根,停損或停利皆為當根
進場超過盈利20點則回檔12點停利
進場超過盈利60點則回檔30%停利
停損點數:15
當日停損滿3次,則當日不再下單

這樣對吧?



是的,原義是加碼減碼,規則來看有兩組買賣訊(單邊),例如:多進1、多進2、多出1、多出2。


描述不全,多次費心,不好意思。

感恩

__________________
lung


由 cgjj 在 2016-03-15 10:50 發表:

引用:
最初由 lung 發表
版主你好:





是的,原義是加碼減碼,規則來看有兩組買賣訊(單邊),例如:多進1、多進2、多出1、多出2。


描述不全,多次費心,不好意思。

感恩



這個問題比較複雜
程式撰寫和測試,需花費較多時間
近期較有空時,再做答覆,請等候


由 lung 在 2016-03-15 11:34 發表:

不急,有勞版主。 謝謝

__________________
lung


由 cgjj 在 2016-03-23 12:29 發表:

引用:
最初由 lung 發表
不急,有勞版主。 謝謝


規則簡介:

每個進出訊號操作1口,滿2口則不操作,以開盤價做操作。
8:50起才動作,13:35後強制出場,12:35後不再買入只賣出
[多進1] 多單+1,滿倉時不加
[多進2] 多單+1,滿倉時不加
[多出1] 多單-1,無持多單不減
[多出2] 多單-1,無持多單不減
[空進1] 空單+1,滿倉時不加
[空進2] 空單+1,滿倉時不加
[空出1] 空單-1,無持空單不減
[空出2] 空單-1,無持空單不減
若[多方]遇[空進]或[空方]遇[多進]則反手做。
同方[進1]和[進2]同時成立,則+2。
同方[出1]和[出2]同時成立,則-2。

停損或停利皆為當根,以收盤價做計算。
進場超過盈利20點則回檔12點停利
進場超過盈利60點則回檔30%停利
停損點數:15點
當日停損滿3次,則當日不再下單。

DoBS 和 DoXX 相對數值的意義請參考程式註解

關鍵字:交易範例

原碼:
//子公式 515BS 程式範例 MA05:=MA(CLOSE,5); MA15:=MA(CLOSE,15); M1:=CROSS(MA05,MA15); M2:=CROSS(MA15,MA05); 方向:=BARSLAST(M1-M2); BS_CT:=BARSLAST(方向=1); BSLINE:REF(O, BS_CT);


原碼:
//母公式 程式範例 MA05:=MA(CLOSE,5); MA15:=MA(CLOSE,15); M1:=CROSS(MA05,MA15); M2:=CROSS(MA15,MA05); 方向:=BARSLAST(M1-M2); BS_CT:=BARSLAST(方向=1); BS1:=REF(O, BS_CT); BS5:="515BS.BSLINE#MIN5"; BS30:="515BS.BSLINE#MIN30"; 始作Time:=085000; 限進Time:=123500; 強出:=time>=133500; 滿倉:=2; 控損點數:=15; 限停損次:=3; 控盈始1:=20; 控衰點數:=12; 控盈始2:=60; 控衰%數:=30; //篩選決定進出訊號,並處理為次根 DoCK:=Time>=始作Time and Time<限進Time; 多進1:=ref(C>BS30 and cross(C,BS1),1) and DoCK or barpos=0; 多進2:=ref(C>BS30 and cross(C,BS5),1) and DoCK or barpos=0; 多出1:=ref(C>BS30 and cross(BS1,C),1) or barpos=0; 多出2:=ref(C>BS30 and cross(BS5,C),1) or barpos=0; 空進1:=ref(C<BS30 and cross(BS1,C),1) and DoCK or barpos=0; 空進2:=ref(C<BS30 and cross(BS5,C),1) and DoCK or barpos=0; 空出1:=ref(C<BS30 and cross(C,BS1),1) or barpos=0; 空出2:=ref(C<BS30 and cross(C,BS5),1) or barpos=0; //彙整進出場訊號 進場:=(多進1+多進2)-(空進1+空進2) linethick coloryellow; 多出:=多出1+多出2 linethick colorred; 空出:=空出1+空出2 linethick colorgreen; DoBS:C*0 NOAXIS COLORMAGENTA; //用開盤價做 {訊號進出: 1.多進, 2.空轉多, 3.多出, 4.多強出} { -1.空進,-2.多轉空,-3.空出,-4.空強出} DoXX:DoBS NOAXIS COLOR0066FF; //用收盤價控 {控盈止損: 1.多控衰點, 2.多控衰%, 3.多停損} { -1.空控衰點,-2.空控衰%,-3.空停損} 持倉:DoBS linethick color777777; //該根最終持倉 多空:=0; //正:多, 負:空, 零:無 Max盈利:=0; OO:=O; CC:=C; StDE:=date<>ref(date,1) or barpos=1; for i=1 to datacount do begin if StDE[i] then 累停損次:=0; if 多空=0 then begin if 累停損次<限停損次 then 多空:=進場[i]; if 多空<>0 then begin 進本:=OO[i]*多空; NowDir:=SGN(多空); 盈控:=0; Max盈利:=0; DoBS[i]:=NowDir; end; end else begin Old多空:=多空; if 強出[i] then begin 多空:=0; DoBS[i]:=NowDir*4; end else if NowDir=SGN(進場[i]) and ABS(多空)<滿倉 then begin //同向 多空:=多空+進場[i]; if ABS(多空)>滿倉 then 多空:=滿倉*NowDir; 進本:=進本+OO[i]*(多空-Old多空); if Old多空<>多空 then DoBS[i]:=NowDir; end else if NowDir=-SGN(進場[i]) then begin //反手 多空:=進場[i]; 進本:=OO[i]*多空; NowDir:=SGN(多空); 盈控:=0; Max盈利:=0; DoBS[i]:=NowDir*2; end else if NowDir=1 and 多出[i]>0 then begin //多出 多空:=多空-多出[i]; DoBS[i]:=3; if 多空<0 then 多空:=0; 進本:=進本-(Old多空-多空)*OO[i]; Now盈虧:=CC[i]*多空-進本; end else if NowDir=-1 and 空出[i]>0 then begin //空出 多空:=多空+空出[i]; DoBS[i]:=-3; if 多空>0 then 多空:=0; 進本:=進本-(Old多空-多空)*OO[i]; Now盈虧:=CC[i]*多空-進本; end; end; if 多空<>0 then begin Now盈虧:=CC[i]*多空-進本; if Now盈虧<=-控損點數 then begin 多空:=0; 累停損次:=累停損次+1; DoXX[i]:=NowDir*3; end else begin if Now盈虧>Max盈利 then Max盈利:=Now盈虧; if 盈控=0 and Now盈虧>控盈始1 then 盈控:=1; if 盈控=1 and Now盈虧>控盈始2 then 盈控:=2; 盈衰:=Max盈利-Now盈虧; if 盈控=1 then begin if 盈衰>=控衰點數 then begin //停利1 多空:=0; DoXX[i]:=NowDir; end; end else if 盈控=2 then begin if 盈衰>=Max盈利*(控衰%數/100) then begin //停利2 多空:=0; DoXX[i]:=NowDir*2; end; end; end; end; 持倉[i]:=多空; end;


由 lung 在 2016-03-23 13:21 發表:

感謝版主費心協助,先來享用,如有不解之處再向版主請益。

祝: 平安喜樂

__________________
lung


由 cgjj 在 2016-03-23 13:33 發表:

引用:
最初由 lung 發表
感謝版主費心協助,先來享用,如有不解之處再向版主請益。

祝: 平安喜樂



不客氣 ^^

補充說明
因為母公式是在1分線中跑
故BS1本身可在母公式中算出
並不需要去依賴引用取得
範例中的程式,這部分已改在母公式中做計算
註:引用較耗費系統資源


由 lung 在 2016-03-23 14:22 發表:

版主好:

小弟愚昧,套用後 沒有出現訊號,引用錯誤,
故再請教:

DoBS:C*0 NOAXIS COLORMAGENTA; //用開盤價做
{訊號進出: 1.多進, 2.空轉多, 3.多出, 4.多強出}
{ -1.空進,-2.多轉空,-3.空出,-4.空強出}

DoXX:DoBS NOAXIS COLOR0066FF; //用收盤價控
{控盈止損: 1.多控衰點, 2.多控衰%, 3.多停損}
{ -1.空控衰點,-2.空控衰%,-3.空停損}

持倉:DoBS linethick color777777; //該根最終持倉
多空:=0; //正:多, 負:空, 零:無


上面 DoBS: DoXX: 持倉: 三項公式提示要加 =


DoBS: DoXX: 持倉: 三項加上 =
引用多空進出

ENTERLONG: 多空=1 ; {多頭買入}
EXITLONG: 多空=2 or 多空=3 or 多空=4 ;
ENTERSHORT: 多空=-1; {空頭買入}
EXITSHORT: 多空=-2 or 多空=-3 or 多空=-4;

請問正確用法

謝謝

__________________
lung


由 cgjj 在 2016-03-23 14:31 發表:

引用:
最初由 lung 發表
版主好:

小弟愚昧,套用後 沒有出現訊號,引用錯誤,
故再請教:

DoBS:C*0 NOAXIS COLORMAGENTA; //用開盤價做
{訊號進出: 1.多進, 2.空轉多, 3.多出, 4.多強出}
{ -1.空進,-2.多轉空,-3.空出,-4.空強出}

DoXX:DoBS NOAXIS COLOR0066FF; //用收盤價控
{控盈止損: 1.多控衰點, 2.多控衰%, 3.多停損}
{ -1.空控衰點,-2.空控衰%,-3.空停損}

持倉:DoBS linethick color777777; //該根最終持倉
多空:=0; //正:多, 負:空, 零:無


上面 DoBS: DoXX: 持倉: 三項公式提示要加 =


DoBS: DoXX: 持倉: 三項加上 =
引用多空進出

ENTERLONG: 多空=1 ; {多頭買入}
EXITLONG: 多空=2 or 多空=3 or 多空=4 ;
ENTERSHORT: 多空=-1; {空頭買入}
EXITSHORT: 多空=-2 or 多空=-3 or 多空=-4;

請問正確用法

謝謝



放在[技術指標]型態的公式中跑即可
不要放在[交易系統]型態的公式中

整合後
進出場是依據 DoBS 和 DoXX 變數
並非 "多空" 這個變數


由 lung 在 2016-03-24 22:28 發表:

版主你好:

經反覆測試、詳細比對,
兩組買賣訊,多進1、多進2、多出1、多出2 ,
進場依條件一口累計一口,滿倉二口。
DoBS 、持倉 都能對應正常無誤,

DoXX 也可執行出場,
有一情況是這樣,
二口單進場的時間不一樣,如BS1第二口剛進場後,
如因條件觸發,二口單會同時間出場,
而BS5的MIN5 趨勢還非常好,
卻只能空手,錯失行情,空方趨勢亦同,
兩口單原意只是加減碼,
未事先說明清楚,深表歉意。

請教 有可能依前後進場時間設定 DoXX 嗎?

__________________
lung


由 cgjj 在 2016-03-25 11:15 發表:

引用:
最初由 lung 發表
版主你好:

經反覆測試、詳細比對,
兩組買賣訊,多進1、多進2、多出1、多出2 ,
進場依條件一口累計一口,滿倉二口。
DoBS 、持倉 都能對應正常無誤,

DoXX 也可執行出場,
有一情況是這樣,
二口單進場的時間不一樣,如BS1第二口剛進場後,
如因條件觸發,二口單會同時間出場,
而BS5的MIN5 趨勢還非常好,
卻只能空手,錯失行情,空方趨勢亦同,
兩口單原意只是加減碼,
未事先說明清楚,深表歉意。

請教 有可能依前後進場時間設定 DoXX 嗎?



DoXX 和 是否為加減碼訊是無關係的...
它是盈衰達標或是停損達標時產生之動作

您可將
持倉:DoBS linethick color777777; //該根最終持倉

改為
持倉:DoBS linethick color777777; //該根最終持倉
盈虧:DoBS linethick color777777; //持有倉位盈虧

再將
持倉[i]:=多空;

改為
持倉[i]:=多空; 盈虧[i]:=Now盈虧; if 多空=0 then Now盈虧:=0;

就可以查閱當根持有倉位之盈虧,是否已達控制標準

兩口同時出場,只會發生在:
1.強制出場
2.盈衰達標或是停損達標
3.反手做


由 lung 在 2016-03-25 15:31 發表:

版主您好:


同上,
假設第二口盈衰達標或是停損達標時,
第一口獲利60點且盈衰尚未達標,
此時二口單會同時間出場,
DoXX 是盈衰達標或是停損達標時產生之動作。

所以
請教版主 :
有可能依前後進場時間或其他方式,設定盈衰達標 嗎?

謝謝

__________________
lung


由 cgjj 在 2016-03-25 16:59 發表:

引用:
最初由 lung 發表
版主您好:


同上,
假設第二口盈衰達標或是停損達標時,
第一口獲利60點且盈衰尚未達標,
此時二口單會同時間出場,
DoXX 是盈衰達標或是停損達標時產生之動作。

所以
請教版主 :
有可能依前後進場時間或其他方式,設定盈衰達標 嗎?

謝謝



這樣說您可能比較清楚一點

前面給的程式是綜合起來計算盈虧的,例如:
進1:成本 100*1
進2:成本 120*1
現價:115
盈虧 = 115*2-100*1-120*1;
以此盈虧值去做控盈損

不是各口各自去算盈虧各自控盈損

各口各自去算的話, 程式當然也可實現
但程式會比當前的要來的更為複雜...

但風險(控損)會是前面做法的兩倍


由 lung 在 2016-03-25 17:07 發表:

盈虧值已理解,風險(控損)也是很重要的,
感謝版主細心指導

祝: 平安喜樂

__________________
lung


由 cgjj 在 2016-03-28 16:13 發表:

引用:
最初由 lung 發表
盈虧值已理解,風險(控損)也是很重要的,
感謝版主細心指導

祝: 平安喜樂



謝謝,不客氣 ^^


由 lung 在 2016-03-29 13:31 發表:

版主您好:

請教:
公式放在[技術指標]型態的公式中,
事前在盤中觀察無誤,
這2日直接使用,
發現DoBS、DoXX
有時會在同根K棒重複進出,

後來測試只用多進1多出1空進1空出1一組訊號,
確認進出訊號有加REF(X,N)
情況亦同,
引用
ENTERLONG: DoBS=1 or DoBS=2 ; {多頭買入}
EXITLONG: DoBS=3 or DoBS=4 or DoXX=1 or DoXX=2 or DoXX=3 ; {多頭賣出}
ENTERSHORT: DoBS=-1 or DoBS=-2 ; {空頭買入}
EXITSHORT: DoBS=-3 or DoBS=-4 or DoXX=-1 or DoXX=-2 or DoXX=-3; {空頭賣出}
接口
NowPo:= 數字轉化為字符串(NowPoInt,0);
NowPO:= 條件函數(ENTERLONG,'1', NowPO);
NowPO:= 條件函數(ENTERSHORT,'-1', NowPO);
NowPO:= 條件函數(EXITSHORT,'1', NowPO);

也試過引用
持倉[i]:=多空;
接口
NowPo:= NUMTOSTR(NowPoInt,0); //空倉
NowPO:= IF(持倉=0,'0', NowPO);
NowPO:= IF(持倉=1,'1', NowPO);
NowPO:= IF(持倉=2,'2', NowPO);
NowPO:= IF(持倉=-1,'-1', NowPO);
NowPO:= IF(持倉=-2,'-2', NowPO);

請問在引用及接口有問題嗎?


謝謝

__________________
lung


由 cgjj 在 2016-03-29 14:25 發表:

引用:
最初由 lung 發表
版主您好:

請教:
公式放在[技術指標]型態的公式中,
事前在盤中觀察無誤,
這2日直接使用,
發現DoBS、DoXX
有時會在同根K棒重複進出,

後來測試只用多進1多出1空進1空出1一組訊號,
確認進出訊號有加REF(X,N)
情況亦同,
引用
ENTERLONG: DoBS=1 or DoBS=2 ; {多頭買入}
EXITLONG: DoBS=3 or DoBS=4 or DoXX=1 or DoXX=2 or DoXX=3 ; {多頭賣出}
ENTERSHORT: DoBS=-1 or DoBS=-2 ; {空頭買入}
EXITSHORT: DoBS=-3 or DoBS=-4 or DoXX=-1 or DoXX=-2 or DoXX=-3; {空頭賣出}
接口
NowPo:= 數字轉化為字符串(NowPoInt,0);
NowPO:= 條件函數(ENTERLONG,'1', NowPO);
NowPO:= 條件函數(ENTERSHORT,'-1', NowPO);
NowPO:= 條件函數(EXITSHORT,'1', NowPO);

也試過引用
持倉[i]:=多空;
接口
NowPo:= NUMTOSTR(NowPoInt,0); //空倉
NowPO:= IF(持倉=0,'0', NowPO);
NowPO:= IF(持倉=1,'1', NowPO);
NowPO:= IF(持倉=2,'2', NowPO);
NowPO:= IF(持倉=-1,'-1', NowPO);
NowPO:= IF(持倉=-2,'-2', NowPO);

請問在引用及接口有問題嗎?


謝謝



DOBS 和 DOXX 是不相同的

DOBS
是原買賣訊號,整合後的買賣訊號
帶入前,訊號就已處理為取前一根(訊號不會浮動)

DOXX
是控衰停損,是依據該根收盤價計算是否達到
達到就執行控衰停損

撰寫的出發點,是基於評測績效,而非下單

盤中該根K棒尚未完成前,收盤價是會浮動的
故 DOXX 可能會一下成立一下不成立
您把 DOXX 直接帶入給下單,就有可能發生您講的情況


由 lung 在 2016-03-29 15:11 發表:

版主您好:

請教:
一、
DOXX的起始條件是
if 多空<>0 then begin
Now盈虧:=CC[i]*多空-進本;
if Now盈虧<=-控損點數 then begin
多空:=0; 累停損次:=累停損次+1; DoXX[i]:=NowDir*3;
end else begin …………


盤中該根K棒尚未完成前,收盤價會浮動
故 DOXX 可能會一下成立
就會平倉
“ 多空:=0 “
一下不成立,再成立時
已不符合 if “多空 <>0 “ then begin….
理應同根K棒不會重複進出?

二、
就交易公式而言,非評測,
能實現多訊或空訊皆為次一根,停損或停利皆為當根嗎?
可以給予協助修改或公式範例嗎?

謝謝

__________________
lung


由 cgjj 在 2016-03-29 15:32 發表:

引用:
最初由 lung 發表
版主您好:

請教:
一、
DOXX的起始條件是
if 多空<>0 then begin
Now盈虧:=CC[i]*多空-進本;
if Now盈虧<=-控損點數 then begin
多空:=0; 累停損次:=累停損次+1; DoXX[i]:=NowDir*3;
end else begin …………


盤中該根K棒尚未完成前,收盤價會浮動
故 DOXX 可能會一下成立
就會平倉
“ 多空:=0 “
一下不成立,再成立時
已不符合 if “多空 <>0 “ then begin….
理應同根K棒不會重複進出?

二、
就交易公式而言,非評測,
能實現多訊或空訊皆為次一根,停損或停利皆為當根嗎?
可以給予協助修改或公式範例嗎?

謝謝



奇狐的運算方式:
當有新的行情進來時,公式會被觸發計算
不是只有算最新的那一根,而是整個重算

故狀況不會是您說的 "一" 那個樣子
你要當根用收盤價控衰停損,就必定會有此困擾

想想看K棒,盤中什麼是不變的...
Open是固定的。High只會越來越高。Low只會越來越低。
"二"解答就在其中


由 lung 在 2016-03-29 15:54 發表:

版主您好:

請教

開盤價是不會變動的
形同下一根是嗎?

謝謝

__________________
lung


由 cgjj 在 2016-03-29 16:08 發表:

引用:
最初由 lung 發表
版主您好:

請教

開盤價是不會變動的
形同下一根是嗎?

謝謝



yes
單就開盤價來看是如此
實際要看您還混了哪些東西
那些東西在該根會變還是不會變

H 和 L 只要掌握好特性,也是有可能用的

可以去想想
用 High 和 Low 價算盈損和用 Close 價算盈損,特性有何不同?


由 lung 在 2016-03-29 19:35 發表:

版主您好:

有參考主題“ 求助 二口單交易“

引用:

最初由 cgjj 發表
盤中當根之 L 只會越來越低或保持原位不動
盤中當根之 H 只會越來越高或保持原位不動

只要價達到停損條件, 即使該K棒尚未終了
停損這訊號狀態是不會再變動的了

該根K棒最終之HL, 並非 "停損之出場價"
在該根停損訊號剛成立的那一刻就出場了
而非等到該根K棒行情終了才出場
程式是決定停損訊號, 並未決定停損之出場價
停損之出場價: 您要用HL去算, 或是用進場價-18點算
那是您後面接的程式算績效時自行去決定的
對於停損訊號處理而言, 應該並無誤差

…………………………
依據前一根的進場訊號是否成立
決定這一根是否進場(開盤進場故用開盤價)

所以根本不需去求 "條件觸發時買進價位"
因為它是下根開盤進場
所以價位就是下根 "開盤價", 根本不需要另做計算
…………………………



請教:

DoBS是下一根 "開盤價"
進場價是ok的,

停損利可以以上述方式協助完成嗎
“ 只要價達到停損條件, 即使該K棒尚未終了 “
“ 停損這訊號狀態是不會再變動的了 “

如因2組訊號限制,改為1組訊號也可,
畢竟停損利在同根K棒重複進出,
那也只能純欣賞了。

望 版大幫助了

感恩

__________________
lung


由 cgjj 在 2016-03-30 11:26 發表:

引用:
最初由 lung 發表
版主您好:

有參考主題“ 求助 二口單交易“



請教:

DoBS是下一根 "開盤價"
進場價是ok的,

停損利可以以上述方式協助完成嗎
“ 只要價達到停損條件, 即使該K棒尚未終了 “
“ 停損這訊號狀態是不會再變動的了 “

如因2組訊號限制,改為1組訊號也可,
畢竟停損利在同根K棒重複進出,
那也只能純欣賞了。

望 版大幫助了

感恩



那樣規則會變成是以下這樣,與收盤價就無關係了...
做多時用 L價 算損(含盈衰)
做空時用 H價 算損(含盈衰)
做多時用 H價 算Max盈利
做空時用 L價 算Max盈利

處理範例如下:

原碼:
MA05:=MA(CLOSE,5); MA15:=MA(CLOSE,15); M1:=CROSS(MA05,MA15); M2:=CROSS(MA15,MA05); 方向:=BARSLAST(M1-M2); BS_CT:=BARSLAST(方向=1); BS1:=REF(O, BS_CT); BS5:="515BS.BSLINE#MIN5"; BS30:="515BS.BSLINE#MIN30"; 始作Time:=085000; 限進Time:=123500; 強出:=time>=133500; 滿倉:=2; 控損點數:=15; 限停損次:=3; 控盈始1:=20; 控衰點數:=12; 控盈始2:=60; 控衰%數:=30; //篩選決定進出訊號,並處理為次根 DoCK:=Time>=始作Time and Time<限進Time; 多進1:=ref(C>BS30 and cross(C,BS1),1) and DoCK or barpos=0; 多進2:=ref(C>BS30 and cross(C,BS5),1) and DoCK or barpos=0; 多出1:=ref(C>BS30 and cross(BS1,C),1) or barpos=0; 多出2:=ref(C>BS30 and cross(BS5,C),1) or barpos=0; 空進1:=ref(C<BS30 and cross(BS1,C),1) and DoCK or barpos=0; 空進2:=ref(C<BS30 and cross(BS5,C),1) and DoCK or barpos=0; 空出1:=ref(C<BS30 and cross(C,BS1),1) or barpos=0; 空出2:=ref(C<BS30 and cross(C,BS5),1) or barpos=0; //彙整進出場訊號 進場:=(多進1+多進2)-(空進1+空進2) linethick coloryellow; 多出:=多出1+多出2 linethick colorred; 空出:=空出1+空出2 linethick colorgreen; DoBS:C*0 NOAXIS COLORMAGENTA; //用開盤價做 {訊號進出: 1.多進, 2.空轉多, 3.多出, 4.多強出} { -1.空進,-2.多轉空,-3.空出,-4.空強出} DoXX:DoBS NOAXIS COLOR0066FF; //用收盤價控 {控盈止損: 1.多控衰點, 2.多控衰%, 3.多停損} { -1.空控衰點,-2.空控衰%,-3.空停損} 持倉:DoBS linethick color777777; //該根最終持倉 多空:=0; //正:多, 負:空, 零:無 Max盈利:=0; OO:=O; HH:=H; LL:=L; StDE:=date<>ref(date,1) or barpos=1; for i=1 to datacount do begin if StDE[i] then 累停損次:=0; if 多空=0 then begin if 累停損次<限停損次 then 多空:=進場[i]; if 多空<>0 then begin 進本:=OO[i]*多空; NowDir:=SGN(多空); 盈控:=0; Max盈利:=0; DoBS[i]:=NowDir; end; end else begin Old多空:=多空; if 強出[i] then begin 多空:=0; DoBS[i]:=NowDir*4; end else if NowDir=SGN(進場[i]) and ABS(多空)<滿倉 then begin //同向 多空:=多空+進場[i]; if ABS(多空)>滿倉 then 多空:=滿倉*NowDir; 進本:=進本+OO[i]*(多空-Old多空); if Old多空<>多空 then DoBS[i]:=NowDir; end else if NowDir=-SGN(進場[i]) then begin //反手 多空:=進場[i]; 進本:=OO[i]*多空; NowDir:=SGN(多空); 盈控:=0; Max盈利:=0; DoBS[i]:=NowDir*2; end else if NowDir=1 and 多出[i]>0 then begin //多出 多空:=多空-多出[i]; DoBS[i]:=3; if 多空<0 then 多空:=0; 進本:=進本-(Old多空-多空)*OO[i]; end else if NowDir=-1 and 空出[i]>0 then begin //空出 多空:=多空+空出[i]; DoBS[i]:=-3; if 多空>0 then 多空:=0; 進本:=進本-(Old多空-多空)*OO[i]; end; end; if 多空<>0 then begin 利HL:=HH[i]*(NowDir=1)+LL[i]*(NowDir=-1); 損HL:=LL[i]*(NowDir=1)+HH[i]*(NowDir=-1); 盈虧H:=利HL*多空-進本; 盈虧L:=損HL*多空-進本; if 盈虧L<=-控損點數 then begin 多空:=0; 累停損次:=累停損次+1; DoXX[i]:=NowDir*3; end else begin if 盈虧H>Max盈利 then Max盈利:=盈虧H; if 盈控=0 and 盈虧H>控盈始1 then 盈控:=1; if 盈控=1 and 盈虧H>控盈始2 then 盈控:=2; 盈衰:=Max盈利-盈虧L; if 盈控=1 then begin if 盈衰>=控衰點數 then begin //停利1 多空:=0; DoXX[i]:=NowDir; end; end else if 盈控=2 then begin if 盈衰>=Max盈利*(控衰%數/100) then begin //停利2 多空:=0; DoXX[i]:=NowDir*2; end; end; end; end; 持倉[i]:=多空; end;


由 lung 在 2016-03-30 14:08 發表:

版主您好:

感謝版主費心幫助
如獲至寶

讓後學有學習的範本


祝: 平安喜樂

__________________
lung


由 cgjj 在 2016-03-30 14:17 發表:

引用:
最初由 lung 發表
版主您好:

感謝版主費心幫助
如獲至寶

讓後學有學習的範本


祝: 平安喜樂



不客氣, 謝謝


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


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

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