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

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


由 linsjn 在 2006-10-19 19:52 發表:

[問題]請問如何讓訊號一一對應?

南客老師在一篇文章中寫到:
如何過濾連續的買入、賣出信號,使買入後只要沒有發出賣出信號,就不再發出買入信號;同樣,賣出後只要沒有出現買入信號,就不再發出賣出信號。即買入、賣出信號一一對應。
  容易想到的是使用過濾函數filter(),但這個函數是難以實現的,因為未來有多少個連續的買入(或賣出)信號是未知的。
  另一種方法是,從前一次賣出(或買入)信號開始累加買入(或賣出)信號,如果累加次數等於1,則發出真正的買入(或賣出)信號。

  但這裡還有一個問題,如果首次信號是賣出信號的話,也應該過濾,因為沒有買入哪來賣出?應讓首次信號是買入信號才合理。方法是,在第1根K線的位置,虛擬一個賣出信號。
  以下是實現上述想法的常規函數代碼:

input:n(26,5,300),p(2,0.1,10);
close;
mid : ma(close,n);
upper: mid + p*std(close,n);
lower: mid - p*std(close,n);

//以下為常規函數處理代碼//
tjb:=cross(close,lower);//初始買入信號,可換成其它任意買入條件
tjs:=cross(upper,close);//初始賣出信號,可換成其它任意賣出條件

{以下代碼,使買、賣信號一一對應}
tsb:=barssince(tjb);
tss:=barssince(tjs);
if tjs[datacount]<tjb[datacount] then begin
a:=setlbound(tjs,1);
tjs:=tjs or barpos=1;
end;
tjbuy:=count(tjb,barslast(tjs))=1 and tjb; //買入信號
tjsell:=count(tjs,barslast(tjb))=1 and tjs; //賣出信號

drawicon(tjbuy,low,4);
drawicon(tjsell,high,5);
************************************************************
請問板主:如果改成四個條件依序:
AA;多頭買入
BB:多頭賣出
CC:空頭買入
DD:空頭賣出
上式要如何修改才能滿足訊號一一依序對應?


由 cgjj 在 2006-10-19 23:01 發表:

您可用一個變數來記錄處理
該變數:
 初始值為4
 多頭買入=1
 多頭賣出=2
 空頭買入=3
 空頭賣出=4

變數值為4時才能多頭買入
多頭買入後設變數為1
變數值為1時才能多頭賣出
多頭賣出後設變數為2
變數值為2時才能空頭買入
空頭買入後設變數為3
變數值為3時才能空頭賣出
空頭賣出後設變數為4
如此......


由 linsjn 在 2006-10-19 23:10 發表:

感謝版主賜教.因是初學者.可否將語句稍具體話一些.萬分感謝!


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


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

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