奇狐社區論壇 總頁數 (3): [1] 2 3 »
在這個頁面顯示本主題全部的 36 個文章

奇狐社區論壇 (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=12898)


由 hwyhon 在 2010-01-13 06:08 發表:

請教語法

金叉:=0;
金叉:金叉;//可以顯示底下的輸出值

d:ref(金叉,BARSLAST(金叉));但此行卻出現操作類型錯誤
//**我在不使用新語法打回圈的情況下有何方法於程式頂端取得底下的值並利用作為運算**
//例如 d

A:=ma(c,10);
b:=ma(c,30);
金叉:=CROSS(A,b);

//如何將金叉丟到程式頂端方便加以再次利用


由 cgjj 在 2010-01-13 09:21 發表:

回覆: 請教語法

引用:
最初由 hwyhon 發表
金叉:=0;
金叉:金叉;//可以顯示底下的輸出值

d:ref(金叉,BARSLAST(金叉));但此行卻出現操作類型錯誤
//**我在不使用新語法打回圈的情況下有何方法於程式頂端取得底下的值並利用作為運算**
//例如 d

A:=ma(c,10);
b:=ma(c,30);
金叉:=CROSS(A,b);

//如何將金叉丟到程式頂端方便加以再次利用



金叉:=0;
金叉:金叉;
d:ref(金叉,BARSLAST(金叉)); //此行會出現操作類型錯誤
會出現操作類型錯誤的原因
是因為此刻金叉為單值, 並非數列
單值是無法計算 BARSLAST 的

Re:有何方法於程式頂端取得底下的值並利用作為運算
程式是由上到下執行的
可否說明一下需求想法和目的, 不是很懂您意思


由 hwyhon 在 2010-01-13 14:43 發表:

//例如我得知金叉成立後才要開始尋找B反轉向上進場//以之前小於進場點的那個B反轉向上A<ref(A,1) and A<refx(A,1)之直為停損出場或A反轉向下或死叉出場
//若先得取得換算後的金叉才來開始尋找B反轉向上點一些程式碼可精簡許多
//則類似此情況若沒沒得知金叉已成立否則須一回接一回程式則會寫得很囉唆
//因此才有此一問
A:ma(c,10),COLORWHITE;
B:ma(c,30),COLORGREEN;
D:ma(c,60),COLORMAGENTA;
金叉:CROSS(B,D);
VERTLINE(金叉),COLORRED,LINEDOT;
死叉:CROSS(D,B);
VERTLINE(死叉),COLORWHITE,LINEDOT;

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



由 cgjj 在 2010-01-13 17:04 發表:

引用:
最初由 hwyhon 發表
//例如我得知金叉成立後才要開始尋找B反轉向上進場//以之前小於進場點的那個B反轉向上A<ref(A,1) and A<refx(A,1)之直為停損出場或A反轉向下或死叉出場
//若先得取得換算後的金叉才來開始尋找B反轉向上點一些程式碼可精簡許多
//則類似此情況若沒沒得知金叉已成立否則須一回接一回程式則會寫得很囉唆
//因此才有此一問
A:ma(c,10),COLORWHITE;
B:ma(c,30),COLORGREEN;
D:ma(c,60),COLORMAGENTA;
金叉:CROSS(B,D);
VERTLINE(金叉),COLORRED,LINEDOT;
死叉:CROSS(D,B);
VERTLINE(死叉),COLORWHITE,LINEDOT;



可否麻煩您以圖舉例說明呢?
這樣較易明瞭


由 hwyhon 在 2010-01-13 20:42 發表:

抱歉等會重帖


由 hwyhon 在 2010-01-13 21:01 發表:

,,,,,,,,,,,,,,,,,,,,,,,


由 hwyhon 在 2010-01-13 23:38 發表:

總算劃妥了

A:ma(c,10),COLORWHITE;
B:ma(c,30),COLORGREEN;
D:ma(c,60),COLORMAGENTA;
金叉:CROSS(B,D);
VERTLINE(金叉),COLORRED,LINEDOT;
死叉:CROSS(D,B);
VERTLINE(死叉),COLORWHITE,LINEDOT;

如貼圖

//例如我得知金叉成立後才要開始尋找B反轉向上進場及確定停損值
//以之前小於進場點的那個A均反轉向上A<ref(A,1) and A<refx(A,1)之直為停損L觸價出場
//或A反轉向下(未獲利20點不成立)出場
//或死叉出場

//若程式頂端先取得換算後的金叉才來開始尋找B反轉向上點程式碼可精簡許多
//若沒能得知金叉已成立則一些類似此情況的其它條件程式碼則會寫得很囉唆
//因此才有此一問


由 cgjj 在 2010-01-14 01:46 發表:

引用:
最初由 hwyhon 發表
總算劃妥了

A:ma(c,10),COLORWHITE;
B:ma(c,30),COLORGREEN;
D:ma(c,60),COLORMAGENTA;
金叉:CROSS(B,D);
VERTLINE(金叉),COLORRED,LINEDOT;
死叉:CROSS(D,B);
VERTLINE(死叉),COLORWHITE,LINEDOT;

如貼圖

//例如我得知金叉成立後才要開始尋找B反轉向上進場及確定停損值
//以之前小於進場點的那個A均反轉向上A<ref(A,1) and A<refx(A,1)之直為停損L觸價出場
//或A反轉向下(未獲利20點不成立)出場
//或死叉出場

//若程式頂端先取得換算後的金叉才來開始尋找B反轉向上點程式碼可精簡許多
//若沒能得知金叉已成立則一些類似此情況的其它條件程式碼則會寫得很囉唆
//因此才有此一問



處理示範如下:
原碼:

A
:ma(c,10),COLORWHITE;
B:ma(c,30),COLORGREEN;
D:ma(c,60),COLORMAGENTA;
金叉:CROSS(B,D) or barpos=0 linethick0 colorred;
VERTLINE(金叉),COLORRED,LINEDOT;
死叉:CROSS(D,B) or barpos=0 linethick0 COLORWHITE;
VERTLINE(死叉),COLORWHITE,LINEDOT;

//進訊和出訊處理
前叉:=金叉-死叉 linethick0;
前叉:=ref(前叉,barslast(前叉<>0));
B上揚:=B>ref(B,1) and ref(B<ref(B,1),1);
A上揚:=A>ref(A,1) and ref(A<ref(A,1),1);
A下彎:=A<ref(A,1) and ref(A>ref(A,1),1);
金叉SP:=barslast(金叉);
進訊:=B上揚 and 前叉=or barpos=0;
進訊SP:=barslast(進訊<>0);
進價:=ref(C,進訊SP);
出訊:=A下彎 and C-進價>20 and sum(進訊,金叉SP+1)>and 前叉=or 死叉 or barpos=0;

//過濾連續進和連續出
CK:=進訊-出訊;
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
進訊:=CK=1;
出訊:=CK=-1;

//停損處理
前訊:=進訊-出訊;
前訊SP:=barslast(前訊<>0);
前訊:=ref(前訊,前訊SP);
處SP:=ref(barslast(金叉 or 出訊 or 進訊),1)+1;
判價:=SETVAL(進訊,進價,-處SP,進價);
CKSP:=barslast(A上揚 and L<判價);
停損訊:=前訊=and 進訊=and CKSP<=處SP or barpos=0;

//濾除連續停損
停損訊:=前訊=and sum(停損訊,前訊SP+1)=or barpos=0;

//輸出訊號
DRAWICON(進訊,L,4pxdn20;
DRAWICON(出訊,H,5pxup45;
DRAWICON(停損訊,H,12pxup45;


//關鍵字:多空交易範例


由 hwyhon 在 2010-01-14 09:58 發表:

訊號的完成每人的處理方式都不一
但程式判斷的精簡是關係速度的快與慢
版主的信號處理方式真是佩服
若能將新語法再做個範例
更是狐友之福阿

此題感謝版主詳細的陳述作法

感恩


由 hwyhon 在 2010-01-15 12:09 發表:

樓上經思索後發覺似乎與我真正想要的狀況有點不達意
我想這樣表達較貼切
金叉成立開始尋多
見紅棒進場停損設此紅棒的低
見黑棒若賺20點以上則出場否則等觸停損出或死叉出
出場後若見紅棒則再進場出場條件則相同一值反複至死叉止

老是麻煩版主真不好意思


A:ma(c,30),COLORGREEN;
B:ma(c,60),COLORMAGENTA;
金叉:=CROSS(A,B) or barpos=0 linethick0 colorred;
VERTLINE(金叉),COLORRED;
死叉:=CROSS(B,A) or barpos=0 linethick0 COLORWHITE;
VERTLINE(死叉),COLORWHITE;


由 cgjj 在 2010-01-15 17:35 發表:

引用:
最初由 hwyhon 發表
樓上經思索後發覺似乎與我真正想要的狀況有點不達意
我想這樣表達較貼切
金叉成立開始尋多
見紅棒進場停損設此紅棒的低
見黑棒若賺20點以上則出場否則等觸停損出或死叉出
出場後若見紅棒則再進場出場條件則相同一值反複至死叉止

老是麻煩版主真不好意思


A:ma(c,30),COLORGREEN;
B:ma(c,60),COLORMAGENTA;
金叉:=CROSS(A,B) or barpos=0 linethick0 colorred;
VERTLINE(金叉),COLORRED;
死叉:=CROSS(B,A) or barpos=0 linethick0 COLORWHITE;
VERTLINE(死叉),COLORWHITE;



原碼:

A
:ma(c,30),COLORGREEN;
B:ma(c,60),COLORMAGENTA;
金叉:=CROSS(A,B) or barpos=0 linethick0 colorred;
VERTLINE(金叉),COLORRED;
死叉:=CROSS(B,A) or barpos=0 linethick0 COLORWHITE;
VERTLINE(死叉),COLORWHITE;

//進出處理
前叉:=金叉-死叉;
前叉:=ref(前叉,barslast(前叉<>0));
進訊:=前叉*0出訊:=進訊停損訊:=進訊;
紅K:=C>O黑K:=C<O;
持倉:=0進場價:=0停損價:=0CC:=CLL:=L;
for 
i=lbound(前叉to datacount do begin  
  
if 紅K[i] and 前叉[i]=and 持倉=0 then begin
    持倉
:=1;  進訊[i]:=1進場價:=CC[i]; 停損價:=LL[i];
  
end else if 持倉=1 then begin
    
if 黑K[i] and CC[i]-進場價>20 or 前叉[i]=-1 then begin
      持倉
:=0出訊[i]:=1;
    
end else if CC[i]<停損價 then begin
      持倉
:=0停損訊[i]:=1;
    
end;
  
end;
end;

//輸出訊號
DRAWICON(進訊,L,4pxdn20;
DRAWICON(出訊,H,5pxup45;
DRAWICON(停損訊,H,12pxup45;


由 hwyhon 在 2010-01-15 18:44 發表:

請問版主

我的意思就是想表達出此情形
若類似此狀況的情行
如不用打回圈的方式
單靠舊函數有何投機的辦法做到嗎


由 cgjj 在 2010-01-15 19:21 發表:

引用:
最初由 hwyhon 發表
請問版主

我的意思就是想表達出此情形
若類似此狀況的情行
如不用打回圈的方式
單靠舊函數有何投機的辦法做到嗎



這狀況恐怕僅適合以迴圈處理
原因在於有累算問題

拿 EMA 來解說一下

EMA 算法:
若Y=EMA(X,N)
則Y=[2*X+(N-1)*Y']/(N+1), 其中Y'表示上一週期Y值。

Y' 就是我說的累算狀況
以 YY:EMA(C,N); 為例
自寫公式另算的方法如下:
原碼:

XX
:=C;
StNo:=lbound(XX);
YY:C*0;
YY[StNo]:=XX[StNo];
for 
I=StNo+1 to datacount do begin
  YY
[I]:=(2*XX[i]+(N-1)*YY[I-1])/(N+1);
end;

以您後面此例而言
必須確立前面已經 (停損 or 停利 or 出場) 了
才能決定後面進場要不要被成立
與 EMA 之 Y' 的累算狀況是同樣的


由 cgjj 在 2010-01-15 19:52 發表:

簡單來說

基本的進場訊號和出場訊號被定義出來後(非控損控盈出)
濾除連續相同重複訊號, 整合為一進一出後
以這一進一出為波段主軸, 做每一波的操作
再依據該波的績效做控損和控盈
若這波達控損或控盈就提前出場, 等下一波段來了再做(一波段只做一次)
這類指標可用您首例的方法來處理
這類指標訊號較少, 最明顯的例子
就是採均線黃金交叉和死亡交叉做進出

另一類
進場條件被定義出來後
控損控盈或碰出場訊號後, 就出場
若再碰進場條件, 則立即又進場
重複訊號是依據當前有無持倉來決定去留
這類並沒有定義出波段主軸, 每個進訊都可能成為新的一波
這類指標通常訊號較前類來的多(一波段戰鬥很多回)
您的第二例就是如此
這類必需採迴圈處理(因為要知道前面最後的倉位狀態)

不同指標特質不同, 處理手法會有差異
過濾訊號的先後次序與方法, 也是會帶來重大改變
兩類指標各有喜好者, 全看設計者自己想法


由 hwyhon 在 2010-01-16 09:03 發表:

感謝板主對這要兩個完全不一樣的進出法以程式做作詳解
解除我以往必須以舊函數一回接續一回才能完成的窘境與疑惑
再次謝謝您

__________________

就是發蓊梨(ㄛㄥˇ ㄌㄞˊ) 程式交易網站
[教學]指標公式及程式交易系統撰寫 [代工]

學會指標策略程式化的撰寫,將可讓你不再盲目投下辛苦賺來的血汗錢
要知道交易的策略或交易的模式長期執行下確實可獲利
交易才有意義的.否則寧可不交易



全部時間均為台灣時間, 現在時間為20:26 總頁數 (3): [1] 2 3 »
在這個頁面顯示本主題全部的 36 個文章


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

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