JimmyHK 發表於 15-10-19 15:09

Multicharts Singal 語法

Multicharts Singal 中的PercentR LE:

inputs: Length( 14 ), OverSold( 20 ), OverBought( 80 ), Trigger( 62 ) ;
variables: var0( 0 ), var1( 0 ), var2( false ) ;
var0 = PercentR( Length ) ;var1 = Average( Close, Length ) ;
if var0 < OverSold then       var2 = true else if var0 > OverBought then       var2 = false ;
condition1 = var2 and var1 > var1[1] and var0 crosses over Trigger ;if condition1 then                                  begin       Buy ( "PctRLE" ) next bar at market ;       var2 = false ;end ;

請問其中var2( false )的作用是否指var2是false條件之下不執行,var2是true條件之下執行?

是否指PercentR < OverSold條件之下執行?PercentR > OverBought條件之下不執行?

pcking2008 發表於 15-10-19 15:32

var2( false ) 只是定義 var2 一開始是 false, 屬於布林值

JimmyHK 發表於 15-10-19 15:59

本帖最後由 JimmyHK 於 15-10-19 16:00 編輯

pcking2008 發表於 15-10-19 15:32 static/image/common/back.gif
var2( false ) 只是定義 var2 一開始是 false, 屬於布林值
即是和我所說的剛剛相反?

為什麼不直接寫成這樣?

condition1 = var1 > var1[1] and var0 crosses over Trigger ;
condition2 = var0 > OverSold ;
condition3 = var0 < OverBought ;

if condition1 and condition2 and condition3 then                                 
       Buy ( "PctRLE" ) next bar at market ;

TrendRover 發表於 15-10-19 16:25

有進過oversold就記住 var=true 直到 overbougt

曾永政 發表於 15-10-19 16:32

JimmyHK 發表於 15-10-19 15:59 static/image/common/back.gif
即是和我所說的剛剛相反?

為什麼不直接寫成這樣?

variables: var2,()裡的東西,不過就是 var2 這個變數的起始預設值,因為填入了 false,所以把 var2 的分類歸為 布林。

跟後續的 code 怎麼去利用 var2 沒有什麼關係,就這樣。

pcking2008 發表於 15-10-19 16:38

JimmyHK 發表於 15-10-19 15:59 static/image/common/back.gif
即是和我所說的剛剛相反?

為什麼不直接寫成這樣?


就如同曾老師說的
你注意看看 var2 出現的地方是直接引用, 也就是看這個變數是 true 或 false 而已
跟程式其他地方沒有關係
能不能怎麼精簡也沒有關係, 程式本來就是隨人寫 {:5_289:}



googleandy 發表於 15-10-19 16:42




如圖,語法上,
      if var2=true 可以簡略為(或懶惰為)
      if var2
這兩句是完全相同的

TrendRover 發表於 15-10-20 03:56

本帖最後由 TrendRover 於 15-10-20 04:00 編輯

JimmyHK 發表於 15-10-19 15:59 static/image/common/back.gif
即是和我所說的剛剛相反?

為什麼不直接寫成這樣?

"是否指PercentR < OverSold條件之下執行?PercentR > OverBought條件之下不執行?"
你誤會了 if 那裏的一四:
    是< oversold ----var2=true ,
   如果沒爬升到 overbought level前不會把 var2 清為 false ~~
===============================
那如果沒有 touch 到 Oversold以下也別想有var2=true condition ====也就是只等超賣發生後等待均線轉正和ratio 爬上62%(0.618 fibo ratio ) 才開買!!


JimmyHK 發表於 15-10-20 11:54

謝謝大家!沒想到是這麼複雜的,不過正想寫這種條件的策略,竟然給我誤打誤撞碰上了!{:4_661:}

但不明白為什麼條件成立並且執行之後還要有這句:

Buy ( "PctRLE" ) next bar at market ;

       var2 = false ;

是否表示訊號觸發一次之後,沒有再進過oversold之前自動成為var2 = false?

googleandy 發表於 15-10-20 12:12

JimmyHK 發表於 15-10-20 11:54 static/image/common/back.gif
謝謝大家!沒想到是這麼複雜的,不過正想寫這種條件的策略,竟然給我誤打誤撞碰上了!

但不明白為 ...

下單後,一些條件得 "還原",
否則, 一直條件都成立,將不斷下單...

JimmyHK 發表於 15-10-24 12:53

本帖最後由 JimmyHK 於 15-10-24 13:00 編輯

先謝謝大家幫忙!現打算用上述布林值語法寫個比較複雜的策略,舉個例,如果收市價跌破10MA那麼不執行原先的Trigger,到收市價升破10MA才執行,應該寫成:

inputs: Price(Close), Length( 10 ),......................;

variables: var0( 0 ),var1( false ) ,.........................;

var0 = AverageFC( Price,Length ) ;................................................;

if Close < var0 then       var1 = falseelse if Close > var0 then       var1 = true;

condition1 = var1 and................................... ;if condition1 then                                 
       Sellshort ( "MASE" ) next bar at market ;
不過再加上如果收市價跌破20MA那麼那麼不執行原先的Trigger,到收市價升破20MA才執行,是否應該寫成:

inputs: Price(Close), Length1( 10 ),Length2( 20 ),......................;

variables: var0( 0 ) ,var1( 0 ) ,var2( false ) ,.........................;

var0 = AverageFC( Price,Length1 ) ;var1= AverageFC( Price,Length2 ) ;................................................;

if Close < var0 then       var2 = falseelse if Close > var0 then       var2= true ;
End else if Close > var1 then
       var2= false
else if Close > var1 then       var2= true ;

condition1 = var2 and................................... ;if condition1 then                                 
       Sellshort ( "MASE" ) next bar at market ;
還是應該是這樣:
inputs: Price(Close), Length1( 10 ),Length2( 20 ),......................;

variables: var0( 0 ) ,var1( 0 ) ,var2( false ) ,var3( false ) ,.........................;

var0 = AverageFC( Price,Length1 ) ;var1= AverageFC( Price,Length2 ) ;................................................;

if Close < var0 then       var2 = falseelse if Close > var0 then       var2= true ;
End else if Close > var1 then
       var3= false
else if Close > var1 then       var3= true ;

condition1 = var2 and var3................................... ;if condition1 then                                 
       Sellshort ( "MASE" ) next bar at market ;






JimmyHK 發表於 15-10-25 12:45

全都試過了,兩種都不能做到想要的效果!

如果想要第一條件:

if Close < var0 then

       var2 = false

else if Close > var0 then

       var2= true ;

受第二條件限制:

if Close < var1 then
       var3= false

else if Close > var1 then

       var3= true ;

即只要第二條件Close < var1 ,就算第一條件Close > var0達到但仍然是var2 = false

TrendRover 發表於 15-10-26 03:48

JimmyHK 發表於 15-10-25 12:45 static/image/common/back.gif
全都試過了,兩種都不能做到想要的效果!

如果想要第一條件:


建議你先學學logic design 的state machine 圖 ,你好像還沒搞懂隱藏性狀態變化

JimmyHK 發表於 15-10-26 10:49

TrendRover 發表於 15-10-26 03:48 static/image/common/back.gif
建議你先學學logic design 的state machine 圖 ,你好像還沒搞懂隱藏性狀態變化

問題已解決,謝謝關注! {:4_621:}
頁: [1]
查看完整版本: Multicharts Singal 語法