您現在的位置:程序化交易>> 期貨公式>> 交易開拓者(TB)>> 開拓者知識>>正文內容

強悍的全局變量功能 - TradeBlazer公式 [開拓者 TB]

  • 咨詢內容: 關于特殊變量,大家可學習下“天才期市神話”的這個文章:


    全自動的程序化交易必須解決以下三大難題:

    ⒈既要保證交易信號的及時性,又要做到信號不能反復;

    ⒉記錄每一次系統開、平倉的價格,以及賬戶的持倉變動,以便進行加減頭寸及資金管理的安排;

    ⒊在同一根K線上進行交易控制,實現跨周期數據引用,以便精確實現短線交易時機的把握。

    通過三天的學習,依托交易開拓者軟件全局變量的強大功能,我終于攻克了上述三大難關。

    除了普通變量外,交易開拓者軟件提供了三種特殊變量,它們分別是:

    ⒈序列變量:可以進行數據的回溯,從而實現條件、循環語句的應用;它的運行特點是每一根BAR依次執行,這不同于坊間文華等其它交易軟件平臺的一次性運算。而且,它的全部函數均提供了算法,不同于黑箱的做法,有利于校對和修改。

    ⒉引用型變量:可以通過用戶函數的形式,進行一勞永逸式的編寫,避免程序的冗余。

    ⒊全局變量:用于中間計算過程的記錄和存取,可以實現同一根BAR上的倉位管理與開平倉價格記錄。

    假設我們需要記錄當前BAR的動態倉位狀態,使用普通變量、序列變量都是無法完成這項任務的,必須使用全局變量來實施控制,并配合A_SENDORDER函數來發出買賣指令。比如,我們當條件滿足時,分別記錄買賣倉位的動態變化后,采用SET GLOBALVAR(0,1),記錄當前的倉位為1手多單,然后可以不斷改寫第一個全局變量的值,在需要讀取操作的時候,我們采用cw=getglobvar(0)的方式來實時地取回。使用全局變量時一定要進行初始化的設置,這樣在系統斷線后,只要不關閉相關圖表,重連后的數據依然可以保持正確。切記不可簡單使用BARSTATS的狀態來確認全局變量,以下的這個例子較好地表述了套利系統中全局變量的應用。

    Params
    Bool  bInitStatus(False);  // 初始化標志,修改初始倉位時需設置為True
    Numeric EveryLots(1);    // 每次交易數量手數
    Numeric LongEntryPrice(-100000); // 開多倉的觸發價格
    Numeric LongExitPrice(100000);  // 平多倉的觸發價格
    Numeric ShortEntryPrice(100000); // 開空倉的觸發價格
    Numeric ShortExitPrice(-100000); // 平空倉的觸發價格
    Numeric LongStartLots(0);    // 多倉的初始倉位(手數),必須是EveryLots的倍數
    Numeric LongEndLots(0);     // 多倉的最大倉位(手數),必須是EveryLots的倍數
    Numeric ShortStartLots(0);    // 空倉的初始倉位(手數),必須是EveryLots的倍數
    Numeric ShortEndLots(0);     // 空倉的最大倉位(手數),必須是EveryLots的倍數
    Numeric OffsetPoint(2);   // 委托價格的偏移值(點數)
    Vars  
    Numeric SpreadUpper;
    Numeric SpreadLower;
    Numeric longPosition;
    Numeric shortPosition;
    Bool bLongEntryCon;
    Bool bShortEntryCon;
    Bool bLongExitCon;
    Bool bShortExitCon;
    Bool bTimeCon;
    Numeric Data0Lots(1);
    Numeric Data1Lots(2);
    Begin
    longPosition = GetGlobalVar(0);
    shortPosition = GetGlobalVar(1);
    If (BarStatus == 0)
    {
      If(longPosition == InvalidNumeric || bInitStatus)
      {
       longPosition = LongStartLots;
       SetGlobalVar(0,longPosition);
      }
      If(shortPosition == InvalidNumeric || bInitStatus)
      {
       shortPosition = ShortStartLots;
       SetGlobalVar(1,shortPosition);
      }
    }Else If(BarStatus == 2 && A_AccountID!="")
    {
      If(EveryLots < 1) Return;
      If(Data0.Q_AskPrice <= 0 || Data0.Q_BidPrice <= 0 || Data1.Q_AskPrice <= 0 || Data1.Q_BidPrice <= 0) Return;
      If(Data0.Q_BidPrice == Data0.Q_UpperLimit || Data0.Q_AskPrice == Data0.Q_LowerLimit) Return;
      If(Data1.Q_BidPrice == Data1.Q_UpperLimit || Data1.Q_AskPrice == Data1.Q_LowerLimit) Return;

      SpreadUpper = Data0.Q_AskPrice-Data1.Q_BidPrice;
      SpreadLower = Data0.Q_BidPrice-Data1.Q_AskPrice;

      bTimeCon = true;//Time>0.0903 ;//And (Time<0.1127 Or Time>0.1333) And Time<0.1456;
      bLongEntryCon = (SpreadUpper<=LongEntryPrice) && (Data0.Q_AskVol>=EveryLots && Data1.Q_BidVol>=EveryLots);
      bLongExitCon = (SpreadLower>=LongExitPrice) && (Data1.Q_AskVol>=EveryLots && Data0.Q_BidVol>=EveryLots);  
      bShortEntryCon = (SpreadLower>=ShortEntryPrice) && (Data1.Q_AskVol>=EveryLots && Data0.Q_BidVol>=EveryLots);
      bShortExitCon = (SpreadUpper<=ShortExitPrice) && (Data0.Q_AskVol>=EveryLots && Data1.Q_BidVol>=EveryLots);

      If(((bLongExitCon And bTimeCon And longPosition>0) Or longPosition>LongEndLots ))
      {
       Data0.A_SendOrder(Enum_Sell,Enum_Exit,Data0Lots,Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
       Data1.A_SendOrder(Enum_Buy,Enum_Exit,Data1Lots,Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
       SetGlobalVar(0,longPosition - EveryLots);
      }

      If(((bShortExitCon And bTimeCon And shortPosition>0) Or shortPosition>ShortEndLots ))
      {
       Data0.A_SendOrder(Enum_Buy,Enum_Exit,Data0Lots,Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
       Data1.A_SendOrder(Enum_Sell,Enum_Exit,Data1Lots,Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
       SetGlobalVar(1,shortPosition - EveryLots);
      }

      If((bLongEntryCon And bTimeCon And longPosition<LongEndLots))
      {
       Data0.A_SendOrder(Enum_Buy,Enum_Entry,Data0Lots,Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
       Data1.A_SendOrder(Enum_Sell,Enum_Entry,Data1Lots,Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
       SetGlobalVar(0,longPosition + EveryLots);
      }
      
      If(( bShortEntryCon And bTimeCon And shortPosition<ShortEndLots))
      {
       Data0.A_SendOrder(Enum_Sell,Enum_Entry,Data0Lots,Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
       Data1.A_SendOrder(Enum_Buy,Enum_Entry,Data1Lots,Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
       SetGlobalVar(1,shortPosition + EveryLots);
      }
    }

    Commentary("多頭倉位="+Text(longPosition));
    Commentary("空頭倉位="+Text(shortPosition));
    End

     

  • TB技術人員: 很好的帖子 不要被埋沒啊

     

  • TB客服: 終于有人識貨了

     

  • 網友回復: 很好的帖子,強烈支持

     

  • 網友回復: 看不懂啊

 

如果以上指標公式不適用于您常用的行情軟件

或者您想改編成選股公式,以便快速選出某種形態個股的話,

可以聯系我們相關技術人員 QQ: 262069696  點擊在線交流進行 有償 改編!

 


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
主站蜘蛛池模板: 国产男女猛视频在线观看| 无码精品日韩中文字幕| 亚洲色偷拍区另类无码专区| 色妞www精品视频| 国产成视频在线观看| 88av视频在线观看| 天堂а√中文最新版地址在线| 中文字幕a∨在线乱码免费看| 日本花心黑人hd捆绑| 亚洲av日韩av综合| 欧美日韩一区二区三区四区在线观看 | 亚洲欧美精品在线| 窝窝午夜看片成人精品| 成年午夜性视频| 久草网视频在线| 欧美夫妇交换俱乐部在线观看| 亚洲色偷拍区另类无码专区| 穆天阳吃饭还在顶是哪一章节| 国产69精品久久久久999三级| 黄色大片免费网站| 国产第一页屁屁影院| 2022国产在线视频| 国产麻豆入在线观看| aaaa级少妇高潮大片在线观看| 少妇饥渴XXHD麻豆XXHD骆驼| 中文字幕亚洲区| 日b视频在线观看| 久久天天躁狠狠躁夜夜2020一| 最新国产中文字幕| 亚洲av永久无码精品| 欧美三级在线播放| 亚洲午夜福利在线视频| 欧美日韩中文字幕在线视频| 亚洲第一区视频| 老汉色av影院| 国产午夜手机精彩视频| 丁香六月久久久| 国产日韩欧美不卡在线二区| sss欧美华人整片在线观看| 国产精品推荐天天看天天爽| 69式啪啪动图|