求每日高低波幅出場的語法
想用每日高低波幅超過一定點做數觸發出場訊號條件,例如下跌一定點數就觸發出場訊號.先用1) :
condition1 = LowD(0) <= HighD(0) - 300 ;
但這個語法有bug,試過Day low出現在先,Day high出現在後變成上升了300點不是下跌了300點但仍然符合條件觸發出場訊號.
解決方法 : 如何限定Day high出現在先,Day low出現在後才觸發出場訊號?
再用2) :
condition2 = Close <=HighD(0) - 300 ;
但這個語法有要在Close <= Day high -300點才生效,Close 回升上去其他附帶條件才生效就不能觸發出場訊號.
解決方法 : 如何使Close <= Day high -300點一次就成為觸發出場訊號條件?
再用3) :
用True / False模式,但不能設定條件只在今天生效,條件成立後第二天仍然生效.
解決方法 : 如何設定條件只在今天生效?
試試這樣是否符合您的需求(當日振幅超過300才會生效)
If marketposition > 0 then sell next bar at HighD(0)-300 stop ;
If marketposition < 0 then buytocover next bar at LowD(0)+300 stop ; easytrader788 發表於 18-2-22 22:51
試試這樣是否符合您的需求(當日振幅超過300才會生效)
If marketposition > 0 then sell next bar at HighD ...
謝謝回覆!
我現在暫用 Close <=HighD(0) - 300做其中一個 condition 代替,但原先的概念是 Close <=HighD(0) - 300 只是其中一個 condition,不單止只要當天振幅超過300,還要幾個其他技術指標發出反向訊號才觸發出場訊號的,如果其他技術指標不發出反向訊號就不觸發出場訊號,但振幅超過300又縮回300以內,之後其他技術指標發出反向訊號一樣觸發出場訊號,easytrader大大的方案是振幅超過300立即觸發出場訊號,和我原先的概念不一樣了.
你可以將反像觸發條件放在if 條件式裡面,這樣條件為 true 且振幅超過300就會出場了 var:LongTrigger(false) ,MP(0);
MP=MarketPosition ;
// 換日或換部位先將 Trigger 設為 false 這樣隔日或部位改變就會重新判斷
if date <> date or MP <> MP then begin
LongTrigger = false ;
ShortTrigger = false ;
end ;
//當日高點回落超過300點啟動 LongTrigger
ifClose <= HighD(0)-300 then LongTrigger = true ;
//你的反向指標與振幅都成立觸發出場
if Condition1 and ... and MP > 0 then Sell next bar at HighD(0)-300 stop ;
//先發生振幅條件後回升+你的反向指標成立觸發出場
if Condition1 and ... and LongTrigger and MP > 0 then Sell next bar at Market ;
空單作法依樣畫葫蘆即可
參考看看囉 easytrader788 發表於 18-2-23 14:31
var:LongTrigger(false) ,MP(0);
MP=MarketPosition ;
謝謝 easytrader 兄!會試試看,現在才看到 easytrader 兄有個人網站,會多多進去觀摩學習的! {:4_113:}
順便在這裏請教 easytrader 兄,之前我上來問過在分鍾圖Plot過去幾天Highest High 或 Lowest Low語法,網友提供了好多方法都不成功,請問你能否幫我看看有沒法子做到?謝謝你!
http://www.coco-in.net/thread-91758-1-1.html input: Barlookback(5) ; { LookBack }
Vars: HighBand(0),LowBand(0);
if DataCompression < 2 then Begin //判斷週期是分 K ( < 2 ) 或是 日 K (=2)
HighBand = HighD(0) ; { 以今日高低點為基準,若以昨日為基準改為HighD(1)/LowD(1) }
LowBand = LowD(0) ;
for Value1 = 1 to BarlookBack Begin
if HighD(Value1) > HighBand then HighBand = HighD(Value1) ;
if LowD(Value1) < LowBand then LowBand = LowD(Value1) ;
end;
end else Begin //此段為日K
HighBand = High ; { 以今日高低點為基準,若以昨日為基準改為High/Low }
LowBand = Low ;
for Value1 = 1 to BarlookBack Begin
if High > HighBand then HighBand = High ;
if Low < LowBand then LowBand = Low ;
end;
end;
Plot1(HighBand , "NearDayHigh" ) ;
Plot2(LowBand , "NearDayLow" ) ;
您可以參考部落格[觀盤篇]標籤的文章 有一些基本的語法
https://easytrader788.blogspot.tw/2013/09/ki.html easytrader788 發表於 18-2-26 19:46
input: Barlookback(5) ; { LookBack }
Vars: HighBand(0),LowBand(0);
成了 ! 謝謝easytradder大大分享,但為什麼參數大過50就不能顯示的呢?
HighD()/LowD() 會呼叫內建 OHLCPeriodsAgo函數做計算 此函數的設計就只允許50
easytrader788 發表於 18-2-27 15:34
HighD()/LowD() 會呼叫內建 OHLCPeriodsAgo函數做計算 此函數的設計就只允許50
原來如此,Multicharts程式內有可以用超過50天的語法可用嗎?
要自己修改OHLCperiodsAgo函數 easytrader788 發表於 18-2-28 08:35
要自己修改OHLCperiodsAgo函數
是不是將50改成自己想要的數值就可以了?有沒有限製的?
inputs:
PeriodType( numericsimple ),
PeriodsAgo( numericsimple ),
oPeriodOpen( numericref ),
oPeriodHigh( numericref ),
oPeriodLow( numericref ),
oPeriodClose( numericref ) ;
variables:
var0( 0 ) ;
arrays:
arr0[ 4, 50 ]( -1 ) ;
condition1 = PeriodsAgo > 50 or BarType > PeriodType + 1 or BarType > 4 ;
if condition1 then
begin
oPeriodOpen = -1 ;
oPeriodHigh = -1 ;
oPeriodLow = -1 ;
oPeriodClose = -1 ;
OHLCPeriodsAgo = -1 ;
end
else
begin
if PeriodType = 1 then
Condition1 = Date <> Date
else if PeriodType = 2 then
Condition1 = DayOfWeek( Date ) < DayOfWeek( Date )
else if PeriodType = 3 then
Condition1 = Month( Date ) <> Month( Date )
else if PeriodType = 4 then
Condition1 = Year( Date ) <> Year( Date ) ;
condition1 = CurrentBar = 1 or Condition1 ;
if condition1 then
begin
var0 = var0 - 1 ;
if var0 = -1
then var0 = 50 ;
arr0[ 1, var0 ] = O ;
arr0[ 2, var0 ] = H ;
arr0[ 3, var0 ] = L ;
arr0[ 4, var0 ] = C ;
end
else
begin
condition1 = H > arr0[ 2, var0 ] ;
if condition1 then arr0[ 2, var0 ] = H ;
condition1 = L < arr0[ 3, var0 ] ;
if condition1 then arr0[ 3, var0 ] = L ;
arr0[ 4, var0 ] = C ;
end ;
oPeriodOpen = arr0[ 1, Mod( var0 + PeriodsAgo, 51 ) ] ;
oPeriodHigh = arr0[ 2, Mod( var0 + PeriodsAgo, 51 ) ] ;
oPeriodLow = arr0[ 3, Mod( var0 + PeriodsAgo, 51 ) ] ;
oPeriodClose = arr0[ 4, Mod( var0 + PeriodsAgo, 51 ) ] ;
OHLCPeriodsAgo = 1 ;
end ;
if false then
Value1 = OHLCPeriodsAgo ;
由于此函數有考慮到一年52週,所以它以50作限制,你可以自己先看懂程式碼,然後再去修改
頁:
[1]
2