COCO研究院

 找回密碼
 註冊
搜索
查看: 7601|回復: 15

[範例程式碼] 求每日高低波幅出場的語法

[複製鏈接]
發表於 18-2-20 01:16 | 顯示全部樓層 |閱讀模式
想用每日高低波幅超過一定點做數觸發出場訊號條件,例如下跌一定點數就觸發出場訊號.

先用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模式,但不能設定條件只在今天生效,條件成立後第二天仍然生效.

解決方法 : 如何設定條件只在今天生效?












發表於 18-2-22 22:51 | 顯示全部樓層
試試這樣是否符合您的需求(當日振幅超過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 ;
 樓主| 發表於 18-2-23 01:03 | 顯示全部樓層
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立即觸發出場訊號,和我原先的概念不一樣了.


發表於 18-2-23 14:04 來自手機 | 顯示全部樓層
你可以將反像觸發條件放在if 條件式裡面,這樣條件為 true 且振幅超過300就會出場了
發表於 18-2-23 14:31 | 顯示全部樓層
var:LongTrigger(false) ,MP(0);

MP=MarketPosition ;

// 換日或換部位先將 Trigger 設為 false 這樣隔日或部位改變就會重新判斷
if date <> date[1] or MP <> MP[1] then begin
   LongTrigger = false ;
   ShortTrigger = false ;
end ;

//當日高點回落超過300點啟動 LongTrigger
if  Close <= 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 ;

空單作法依樣畫葫蘆即可

參考看看囉

評分

參與人數 1金錢 +1 收起 理由
JimmyHK + 1 感謝分享

查看全部評分

 樓主| 發表於 18-2-25 01:06 | 顯示全部樓層
easytrader788 發表於 18-2-23 14:31
var:LongTrigger(false) ,MP(0);

MP=MarketPosition ;

謝謝 easytrader 兄!會試試看,現在才看到 easytrader 兄有個人網站,會多多進去觀摩學習的!


 樓主| 發表於 18-2-25 01:11 | 顯示全部樓層
順便在這裏請教 easytrader 兄,之前我上來問過在分鍾圖Plot過去幾天Highest High 或 Lowest Low語法,網友提供了好多方法都不成功,請問你能否幫我看看有沒法子做到?謝謝你!

http://www.coco-in.net/thread-91758-1-1.html
發表於 18-2-26 19:46 | 顯示全部樓層
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[1]/Low[1] }
         LowBand = Low ;
     for Value1 = 1 to BarlookBack Begin
           if High[Value1] > HighBand then HighBand = High[Value1] ;
           if Low[Value1] < LowBand then LowBand = Low[Value1] ;
         end;
   end;
        Plot1(HighBand , "NearDayHigh" ) ;
        Plot2(LowBand , "NearDayLow" ) ;

評分

參與人數 1金錢 +1 收起 理由
JimmyHK + 1 感謝分享

查看全部評分

發表於 18-2-26 19:52 | 顯示全部樓層
您可以參考部落格[觀盤篇]標籤的文章 有一些基本的語法
https://easytrader788.blogspot.tw/2013/09/ki.html

評分

參與人數 1金錢 +1 收起 理由
JimmyHK + 1 感謝分享

查看全部評分

 樓主| 發表於 18-2-27 12:37 | 顯示全部樓層
easytrader788 發表於 18-2-26 19:46
input: Barlookback(5) ;   { LookBack }
   
Vars: HighBand(0),LowBand(0);

成了 ! 謝謝easytradder大大分享,但為什麼參數大過50就不能顯示的呢?
發表於 18-2-27 15:34 | 顯示全部樓層
HighD()/LowD() 會呼叫內建 OHLCPeriodsAgo函數做計算 此函數的設計就只允許50

 樓主| 發表於 18-2-28 00:53 | 顯示全部樓層
easytrader788 發表於 18-2-27 15:34
HighD()/LowD() 會呼叫內建 OHLCPeriodsAgo函數做計算 此函數的設計就只允許50

原來如此,Multicharts程式內有可以用超過50天的語法可用嗎?
發表於 18-2-28 08:35 來自手機 | 顯示全部樓層
要自己修改OHLCperiodsAgo函數
 樓主| 發表於 18-2-28 09:26 | 顯示全部樓層
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[1]
    else if PeriodType = 2 then
        Condition1 = DayOfWeek( Date ) < DayOfWeek( Date[1] )
    else if PeriodType = 3 then
        Condition1 = Month( Date ) <> Month( Date[1] )
    else if PeriodType = 4 then
        Condition1 = Year( Date ) <> Year( Date[1] ) ;

    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[1] ;


發表於 18-2-28 17:34 來自手機 | 顯示全部樓層
由于此函數有考慮到一年52週,所以它以50作限制,你可以自己先看懂程式碼,然後再去修改
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-25 11:48

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |