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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- macd向下交叉時,dea值的大小比較 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=21508)


由 picabu 在 2018-08-03 07:51 發表:

macd向下交叉時,dea值的大小比較

您好,我想找出macd向下交叉時,dea值的大小比較
.....
dn:=cross(diff,dea);
dns1:=sumbars(dn,1);
dns2:=sumbars(dn,2);

如果dns2的dea值比dns1的dea值小,
繼續找下一個sumbars(dn,3)的dea值,
直到找到比dns1的dea值大時,
把其累加的周期數再定義回dns2,

請問該如何寫呢?想了好久,還是不會寫.麻煩大大,謝謝您.


由 cgjj 在 2018-08-03 09:03 發表:

回覆: macd向下交叉時,dea值的大小比較

引用:
最初由 picabu 發表
您好,我想找出macd向下交叉時,dea值的大小比較
.....
dn:=cross(diff,dea);
dns1:=sumbars(dn,1);
dns2:=sumbars(dn,2);

如果dns2的dea值比dns1的dea值小,
繼續找下一個sumbars(dn,3)的dea值,
直到找到比dns1的dea值大時,
把其累加的周期數再定義回dns2,

請問該如何寫呢?想了好久,還是不會寫.麻煩大大,謝謝您.



如果往前沒有找到比dns1的dea值大時,取何值?


由 picabu 在 2018-08-03 09:21 發表:

如果沒有更大值就取sumbars(dn,2),最大值的前一個.


由 cgjj 在 2018-08-03 12:42 發表:

引用:
最初由 picabu 發表
如果沒有更大值就取sumbars(dn,2),最大值的前一個.

原碼:
....原來的程式碼有誤,請用後面給的....


由 picabu 在 2018-08-03 14:06 發表:

這個對我有點難,需要一點時間消化吸收.謝謝大大的幫忙.


由 cgjj 在 2018-08-03 14:21 發表:

引用:
最初由 picabu 發表
這個對我有點難,需要一點時間消化吸收.謝謝大大的幫忙.


不客氣^^


由 picabu 在 2018-08-05 15:49 發表:

不好意思,大大能不能再幫我把你寫的程式每一行最後說明一下,好讓我去理解消化,拜託拜託.


由 cgjj 在 2018-08-05 20:52 發表:

引用:
最初由 picabu 發表
不好意思,大大能不能再幫我把你寫的程式每一行最後說明一下,好讓我去理解消化,拜託拜託.


前面的程式有個錯誤存在,需修正如下:
原碼:
dn:=cross(diff,dea); dns1:sumbars(dn,1) linethick0; dns2:dn*0 linethick; for i=lbound(dn) to datacount do begin if dn[i] then begin SS:=0; for j= i-1 downto lbound(dn) do begin if dn[j] then begin if SS=0 then dns2[i]:=i-j; if dea[j]>=dea[i] then begin dns2[i]:=i-j; break; end; SS:=SS+1; end; end; end else begin if dns2[i-1]>0 then dns2[i]:=dns2[i-1]+1; end; end; ST:=datacount-BARSSINCE(dns2); x:=SETLBOUND(dns2,ST[datacount]);


由 cgjj 在 2018-08-05 20:53 發表:

加上註解的

原碼:
dns1:sumbars(dn,1) linethick; dns2:dn*0 linethick; //將 dns2 設為零值數列(數列有效範圍同dn) //跑迴圈: i值 自 dn數列起點 跑到 K棒最終根 (遞增) for i=lbound(dn) to datacount do begin //假如 第i根dn值成立 則 if dn[i] then begin SS:=0; //將SS值設為零(或歸零) //跑迴圈: j值 自 i-1 跑到 dn數列起點 (遞減) // 用來尋找前面dn成立之處的dea,有無比當前的dea更大 for j= i-1 downto lbound(dn) do begin //假如 第j根dn值成立 則 if dn[j] then begin //若 SS 等於零(離最近的dn),則將第i根dns2值為i-j。 //註:若往前找都沒有比dea[i]更大的值時,將採用此值 if SS=0 then dns2[i]:=i-j; //假如 第j根DEA>=第i根DEA 則 if dea[j]>=dea[i] then begin //設第i根dns2值為i-j,然後跳離本迴圈 dns2[i]:=i-j; break; end; SS:=SS+1; //將SS值+1 end; end; //假如 第i根dn值不成立 則 end else begin //若第i-1根dns2值大於零,則將第i根dns2值設為:第i-1根的dns2值+1 if dns2[i-1]>0 then dns2[i]:=dns2[i-1]+1; end; end; //以下兩行是尋找dns2數列首根非零值的位置,將它設置為dns2數列起點 ST:=datacount-BARSSINCE(dns2); x:=SETLBOUND(dns2,ST[datacount]);


由 picabu 在 2018-08-05 22:34 發表:

太好了,謝謝版主的幫忙.繼續努力研究.感恩


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


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

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