程式碼差異?

  •   366 
  • 最後發表   XQYi  2024 八月 02
XQYi 發文於   2024/05/18

以下兩段程式碼為何執行結果會不一樣?

B程式碼多一筆買進交易

 

A程式碼

if  position=0 and filled=0  and condition90 

then begin 

if   currentTime > TM and  currentTime <=110000  

and condition1  and (value31 > value31[1] or value7 > value7[1] ) 

and value7*1.0045 < getField("High","D") 

then setposition(minList(position+1,1),GetField("收盤價","Tick"),label:="買1");//有庫存時,不進場加買,維持一張 

 

if  condition2 and  GetField("收盤價","Tick") < GetField("收盤價","Tick")[1]  

then setposition(maxlist(position-1,0),GetField("收盤價","Tick"),label:="賣1");//希望沒有庫存時,不進場放空,亦即減碼至空手 

end; 

 

 

B程式碼

// 買賣條件檢查 

if position = 0 and filled = 0 and condition90 then begin 

    if currentTime > TM and currentTime <= 110000 then begin  //多了這一段會有影響?

        if condition1 and (value31 > value31[1] or value7 > value7[1]) and value7 * 1.0045 < getField("High", "D") then 

            setposition(minList(position + 1, 1), GetField("收盤價", "Tick"), label := "買1"); 

         

        if condition2 and GetField("收盤價", "Tick") < GetField("收盤價", "Tick")[1] then 

            setposition(maxlist(position - 1, 0), GetField("收盤價", "Tick"), label := "賣1"); 

    end; 

 

end; 

排序方式: 標準 | 最新
XQ小幫手 發文於   2024/06/17

Hello, xqyi.

 

小幫手誠心建議您,先將程式排版排好,

if 
    position=0 
    and filled=0 
    and condition90 
then begin 

    if 
        currentTime > TM 
        and currentTime <=110000 
        and condition1 
        and (value31 > value31[1] or value7 > value7[1]) 
        and value7*1.0045 < getField("High","D") 
    then 
        setposition(minList(position+1,1),GetField("收盤價","Tick"),label:="買1");//有庫存時,不進場加買,維持一張 

    if 
        condition2 
        and GetField("收盤價","Tick") < GetField("收盤價","Tick")[1] 
    then 
        setposition(maxlist(position-1,0),GetField("收盤價","Tick"),label:="賣1");//希望沒有庫存時,不進場放空,亦即減碼至空手 

end; 
if 
    position = 0 
    and filled = 0 
    and condition90 
then begin 

    if 
        currentTime > TM 
        and currentTime <= 110000 
    then begin  //多了這一段會有影響?
        if 
            condition1 
            and (value31 > value31[1] or value7 > value7[1]) 
            and value7 * 1.0045 < getField("High", "D") 
        then 
            setposition(minList(position + 1, 1), GetField("收盤價", "Tick"), label := "買1"); 

        if 
            condition2 
            and GetField("收盤價", "Tick") < GetField("收盤價", "Tick")[1] 
        then 
            setposition(maxlist(position - 1, 0), GetField("收盤價", "Tick"), label := "賣1"); 
    end; 

end; 

第二個腳本的賣1條件被包在 currentTime > TM and currentTime <= 110000 裡面,所以需要同時符合兩者才會執行。

 

第一個則是賣1條件符合就會執行。

謝謝。

 

XQYi 發文於   2024/06/17

恩恩

按此 第2個應較為嚴格,為何成交反而交易增加?

小幫手誠心建議您,先將程式排版排好。

確實如此,但總是寫著寫著,誰該兩兩成對的就亂了

XS沒有辦法提供,自動協助根據函數排版的功能?

應對我們入門初學者有助提升學習之效!

XQ小幫手 發文於   2024/08/02

Hello, xqyi.

您自動排版的建議,小幫手這邊會轉呈相關人士研議,

另外小幫手有小小的建議,您可以先在流程控制後方不要寫條件,條件寫在下一行,且縮排,同一組流程控制,放在同一排,

 

例如將下列的程式碼,

If Close > Open Then Ret = 1;

改寫成下列,

If 
    Close > Open 
Then 
    Ret = 1;

謝謝。

XQYi 發文於   2024/08/02

恩恩  感謝!

發表回覆
Close