COCO研究院

 找回密碼
 註冊
搜索
樓主: kilroy

[教學] [分享] 用AB踏入外期程式交易

  [複製鏈接]
 樓主| 發表於 14-5-22 15:18 | 顯示全部樓層
osdak 發表於 14-5-22 15:02
大大, 我想請教一下, CME的商品的資料, 應在那裡找到?
if(Name() == "6A #F")   {TickSize = 0.0001; Margi ...

Hi,

ps 小弟是用來指定幾位數的 (PS 代表 price scale)

ex. currency 期貨的報價都是 0.0000 小數點後四位,所以 PS=10000

用意是方便計算

如果最小跳動是 ex. 0.01, 0.0001 這類的話,還好計算

但如果像是 HG, ES, SI, ZC, ZS, ZW 這些可能最小跳動是 0.25 之類

我用的計算方式就是 pointvalue=0.5*ps;

---
剛看了一下之前貼的範例,發現 ES 的部分貼到以前未修改的範例了

正確計算如下

if(Name() == "ES #F")   {ContractMonth = "ESM4-GLOBEX-FUT";       TickSize = 0.25;   MarginDeposit = 4000;  PS = 100;   PointValue = 0.5*PS;  }



---
合約規格的網站,我習慣會去看這幾個網站

http://www.capitalfutures.com.tw/product/specs-us.asp?xy=1&xt=2
http://www.capitalfutures.com.tw/product/finalday_us.asp?xy=6&xt=2
http://www1.interactivebrokers.ch/contract_info/v3.8/index.php?site=IB&action=Top%20Search&symbol=&description=
https://www.interactivebrokers.com.hk/cn/index.php?f=marginnew&p=fut

參考看看了

評分

參與人數 2金錢 +4 收起 理由
osdak + 2 thanks mate!
skyler + 2

查看全部評分

發表於 14-5-22 16:10 | 顯示全部樓層
kilroy 發表於 14-5-22 15:18
Hi,

ps 小弟是用來指定幾位數的 (PS 代表 price scale)

不過k大
HG好像也有錯原來您是寫
if(Name() == "HG #F=1") {TickSize = 0.0005; MarginDeposit = 4000;  PS = 1000;  PointValue = 12.5*PS; }

是否應該是如下才對呢?!
if ( Name() == "HG #F=1" )
{
    TickSize = 0.0005;
    MarginDeposit = 3300;
    PS = 1000;
    PointValue = 25 * PS;
}





 樓主| 發表於 14-5-22 16:12 | 顯示全部樓層
本帖最後由 kilroy 於 14-5-22 16:14 編輯
skyler 發表於 14-5-22 16:10
不過k大
HG好像也有錯原來您是寫
if(Name() == "HG #F=1") {TickSize = 0.0005; MarginDeposit = 4000;   ...

Hi,

if(Name() == "HG #F=1") {ContractMonth = "HGM4-NYMEX-FUT";        TickSize = 0.0005; MarginDeposit = 4000;  PS = 10000; PointValue = 2.5*PS; }

感謝指正 ^^"






評分

參與人數 1金錢 +2 收起 理由
skyler + 2 按一個讚

查看全部評分

發表於 14-5-22 17:57 | 顯示全部樓層
k大
請問一下
scan商品時是否不會如同
在回測資料按scan時
會將結果顯示在下面的清單中呢?

 樓主| 發表於 14-5-22 18:00 | 顯示全部樓層
skyler 發表於 14-5-22 17:57
k大
請問一下
scan商品時是否不會如同


可是我覺得還是開圖表比較安心

參考看看了
發表於 14-5-22 18:29 | 顯示全部樓層
本帖最後由 skyler 於 14-5-22 18:31 編輯

會問這個問題是我也預期會有資料
但結果空空的
而用我AlertIF 傳MAIL 到我GMAIL 是有資料
表示策略是有在跑的


GAMIL 收到訊息
2014-05-22_182150.png

SCAN 下確沒有顯示資料

2014-05-22_182915.png


我在回測點scan 如下結果
會有資料
2014-05-22_182453.png


不知道有那邊需要特別設定嗎?

感謝您的回覆







 樓主| 發表於 14-5-22 18:39 | 顯示全部樓層
skyler 發表於 14-5-22 18:29
會問這個問題是我也預期會有資料
但結果空空的
而用我AlertIF 傳MAIL 到我GMAIL 是有資料

auto-repeat 打勾好後,要按下 scan 才會開始自動重複掃描唷
發表於 14-5-22 19:27 | 顯示全部樓層
kilroy 發表於 14-5-22 18:39
auto-repeat 打勾好後,要按下 scan 才會開始自動重複掃描唷

我知道~
所以會看到畫面會每隔一秒閃一下
而且如果沒有按scan
那也不會觸發

AlertIf( Buy, "EMAIL", "Buy " + Name() + " at " + BuyPrice, 1 );
AlertIf( Sell, "EMAIL", "Sell " + Name() + " at " + SellPrice, 2 );
AlertIf( Short, "EMAIL", "Short " + Name() + " at " + ShortPrice, 3 );
AlertIf( Cover, "EMAIL", "Cover " + Name() + " at " + CoverPrice, 4 );

寄到我MAIL了~

不知K大的AB版本是多少? 是64bit的嗎?

另外
Symbol 是否要 Add to Realtime Quote window ?
2014-05-22_192610.png




 樓主| 發表於 14-5-22 19:29 | 顯示全部樓層
skyler 發表於 14-5-22 19:27
我知道~
所以會看到畫面會每隔一秒閃一下
而且如果沒有按scan

我是用 64-bit 5.79beta
real time quote 那個用不到
發表於 14-5-23 08:55 | 顯示全部樓層
本帖最後由 skyler 於 14-5-23 09:16 編輯

k大您好
想跟您確認一下我的想法是否正確
以下我的測試CODE

_SECTION_BEGIN( "Product Settings" );
SetPositionSize( 1 , spsShares );
SetOption( "MaxOpenPositions" , 1 );
SetOption( "InitialEquity" , 10000 );
SetOption( "FuturesMode" , 1 );
SetOption( "CommissionMode" , 3 );
SetOption( "CommissionAmount" , 6.5 );
RoundLotSize = 1;
//澳幣
if ( Name () == "6A #F" )
{
    TickSize = 0.0001 ;
    MarginDeposit = 2035 ;
    PS = 10000;
    PointValue = 10 * PS;
}
//加幣
if ( Name () == "6C #F" )
{
    TickSize = 0.0001 ;
    MarginDeposit = 1265 ;
    PS = 10000;
    PointValue = 10 * PS;
}
//歐元
if ( Name () == "6E #F" )
{
    TickSize = 0.0001 ;
    MarginDeposit = 2475 ;
    PS = 10000;
    PointValue = 12.5 * PS;
}
//日幣
if ( Name () == "6J #F" )
{
    TickSize = 0.0001 ;
    MarginDeposit = 3465 ;
    PS = 10000;
    PointValue = 12.5 * PS;
}
//瑞郎
if ( Name () == "6S #F" )
{
    TickSize = 0.0001 ;
    MarginDeposit = 2530 ;
    PS = 10000;
    PointValue = 12.5 * PS;
}
//輕原油
if ( Name () == "CL #F=1" )
{
    TickSize = 0.01 ;
    MarginDeposit = 3190 ;
    PS = 100;
    PointValue = 10 * PS;
}
//emini S&P
if ( Name () == "ES #F" )
{
    TickSize = 0.25 ;
    MarginDeposit = 4758 ;
    PS = 100;
    PointValue = 0.5 * PS;
}
//黃金
if ( Name () == "GC #F=1" )
{
    TickSize = 0.1 ;
    MarginDeposit = 7150 ;
    PS = 10;
    PointValue = 10 * PS;
}
//天然氣
if ( Name () == "NG #F=1" )
{
    TickSize = 0.001 ;
    MarginDeposit = 3135 ;
    PS = 1000;
    PointValue = 10 * PS;
}
//白銀
if ( Name () == "SI #F=1" )
{
    TickSize = 0.005 ;
    MarginDeposit = 9900 ;
    PS = 1000;
    PointValue = 5 * PS;
}
//小道瓊
if ( Name () == "YM #F" )
{
    TickSize = 1 ;
    MarginDeposit = 3575 ;
    PS = 1;
    PointValue = 5 * PS;
}
//玉米
if ( Name () == "ZC #F" )
{
    TickSize = 0.25 ;
    MarginDeposit = 2025 ;
    PS = 100;
    PointValue = 0.5 * PS;
}
//黃豆
if ( Name () == "ZS #F" )
{
    TickSize = 0.25 ;
    MarginDeposit = 4050 ;
    PS = 100;
    PointValue = 0.5 * PS;
}
//小麥
if ( Name () == "ZW #F" )
{
    TickSize = 0.25 ;
    MarginDeposit = 2025 ;
    PS = 100;
    PointValue = 0.5 * PS;
}
_SECTION_END();

MA5_P1 = Ref( MA( C, 5 ), -1 );
MA5_P2 = Ref( MA( C, 5 ), -2 );

Cond_MA5_Buy = MA5_P1 > MA5_P2;
Cond_MA5_Sell = MA5_P1 < MA5_P2;

Cross5_Buy =  Cross ( Ref( C, -1 ), MA5_P1 );
Cross5_Sell = Cross ( MA5_P1, Ref( C, -1 ) );

Buy = Cond_MA5_Buy AND Cross5_Buy ;
Sell = Cross5_Sell;
Short = Cond_MA5_Sell AND Cross5_Sell ;
Cover = Cond_MA5_Buy ;

Buy = ExRem( Buy, Short );
Short = ExRem( Short, Buy );
Cover = ExRem( Cover , Sell );
Sell = ExRem( Sell , Cover );

BuyPrice = CoverPrice = O;
ShortPrice = SellPrice = O;


AlertIf( Buy, "EMAIL", "Buy " + Name() + " at " + BuyPrice, 1 );
AlertIf( Sell, "EMAIL", "Sell " + Name() + " at " + SellPrice, 2 );
AlertIf( Short, "EMAIL", "Short " + Name() + " at " + ShortPrice, 3 );
AlertIf( Cover, "EMAIL", "Cover " + Name() + " at " + CoverPrice, 4 );

1.
在實際做SCAN下單時
從最上面的
_SECTION_BEGIN( "Product Settings" );

_SECTION_END();
裡面的所有內容
是否都應該刪除或是註解掉
不要寫在程式中
因為這些只有在回測時才會用
實際的情況下是沒用的
不知我理解對嗎?!

2.
Buy = ExRem( Buy, Short );
Short = ExRem( Short, Buy );
Cover = ExRem( Cover , Sell );
Sell = ExRem( Sell , Cover );

在實際交易中是有作用的嗎?!

3.
AlertIf 寫在最末端是否會有問題?

感謝您的回覆
 樓主| 發表於 14-5-23 11:21 | 顯示全部樓層
skyler 發表於 14-5-23 08:55
k大您好
想跟您確認一下我的想法是否正確
以下我的測試CODE

Hi,
1.
scan 時,那些回測相關語法都不會用到

只會用到 buy/sell/short/cover 這個部分

不過也不用刪除

2.
有作用

3.
沒問題

參考看看了
發表於 14-5-28 16:32 來自手機 | 顯示全部樓層
大大,想請教一下,我發現6月的白銀(SI)不讓我下單(papertrade account),說違反了physical delivery 規定,我想請教是否正常?6月期貨,現在才5月,於real acount中是否也是不容許?以si為例,那大大一般是什麼時間換下期合約呢?謝謝!
 樓主| 發表於 14-5-28 23:14 | 顯示全部樓層
osdak 發表於 14-5-28 16:32
大大,想請教一下,我發現6月的白銀(SI)不讓我下單(papertrade account),說違反了physical delivery 規定, ...

Hi,

IB 不會讓客戶實物交割

所以會有其下單限制 (無論是真實帳戶或是模擬帳戶)

我通常會在收到通知前平倉,換次月合約,這些都是手動

如果忘了或錯過了,最多就是不給你下

所以策略會平倉,只不過不能建新部位

---
大大可以參考 first notice day 去換倉

我沒有一定的答案


參考看看了
發表於 14-5-29 12:04 來自手機 | 顯示全部樓層
kilroy 發表於 14-5-28 23:14
Hi,

IB 不會讓客戶實物交割

原來如此!謝謝解釋!我怕有什麼問題。
發表於 14-5-31 02:08 | 顯示全部樓層
你好, K 大, 想請教一下~ 我的自動交易(AB+IB)出現的"進出點" 跟我backtesting 時"進出點"大致一樣, 但出現了兩個問題:

1. 還未出現 "Buy" 之前就出現"Sell"
每月第一個Buy signal 出現前, 都有機會在還未出現buy 之前就出現sell 了,
我試過了Sell = exrem (Sell, buy)
還試過了
dn = DateNum();
NewDay = dn != Ref( dn, -1);,
Sell = Sell AND Sum( Buy, BarsSince( newDay) +1) > 0;
但他把我其他的"Sell" 都過濾了
請問大大是用什麼方法避免這種情況的?


2. Max Loss 無法正確send 到IB
我的交易都用 percentage stop, e.g. Max loss = 1%
但我試過幾個方法都無法正確send 到IB, 錯過了止蝕.
包括把止蝕order 跟placeorder 一起send 到IB, 但試了很多次都不成功,
請問大大是如何做自動交易止蝕的?

萬分感激K 大的回覆!

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-5-2 14:06

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 | AI繪圖AI超擬真美女AI beauty AI Stable DiffusionAI正妹AI Lookbook