keymaker 發表於 13-10-23 13:55

AFL 腦力訓練 - 如何只在最後信號執行 fputs

說明:我們可以利用 fopen 打開檔案..再利用 fputs 寫入檔案

問題:假設一個 chart window 有 10000 根 k 棒, 那麼有可能產生 100 個信號
          因此須要一點限制條件, 令 fputs 只輸出最後一個信號.. 避免下單機重複下單..
          但是..這樣的 AFL 要怎麼撰寫呢?{:5_256:}

kilroy 發表於 13-10-23 16:10


請問大大的下單機是什麼來著?

keymaker 發表於 13-10-23 16:34

本帖最後由 keymaker 於 13-10-23 16:45 編輯

kilroy 發表於 13-10-23 16:10 static/image/common/back.gif
本來是要用..王子下單機..無奈似乎已經無法註冊..舊帳號也因為換硬體失效..
(充滿才華的王子大大應該是沒有收入..另外追求謀生方法去了..沒有人給錢沒飯吃)
最後只好用敝人自己幾年前寫好的下單機改一改..加減用..

目前下單文字 = 商品代號, 時間日期, 方向, 口數
例如, 商品代號 = TXFK3; 時間日期 = 2013/10/23 08:59:00; 方向 = Short; 口數 = 1;
那麼, 下單文字 = TXFK3, 2013/10/23 08:59:00, Short, 1

當最後一個信號出現時..
由 AB 輸出下單文字檔 (例如是 C:\Signal\AmiBroker_Signal.txt)
內容是 TXFK3, 2013/10/23 08:59:00, Short, 1
令下單機每秒讀一次 C:\Signal\AmiBroker_Signal.txt





kilroy 發表於 13-10-23 16:54

本帖最後由 kilroy 於 13-10-23 18:34 編輯

keymaker 發表於 13-10-23 16:34 static/image/common/back.gif
本來是要用..王子下單機..無奈似乎已經無法註冊..舊帳號也因為換硬體失效..
最後只好用自己幾年前寫好的程 ...
文字檔的方式就是去抓
e.g.

0 為 空手/平倉
1 為 多
-1 為 空

此為 current position

而下出去的口數為 market position (ex. 2口)

所以當 0 -> 1 時,是下 2口多單出去

1 -> 0 是平倉兩口多單,也就是賣2口平掉

當 1 -> -1 時,是平兩口,空兩口,也就是會送出四口空單(平兩口多單,空兩口)


依此類推

---
currrent position 的數字有跳動時,下單機才會依此去動作

此數值會持續在 last bar 的倉位,比如說一直是多單續抱,持續為 1

下單機持續讀取到的數值還是 1 (這樣只會跟最近一次的訊號有關)

因為當根K持續維持相同倉位方向,除非條件改變 (如符合多單或空單條件時)

current position 的數值才回改變,下單機才會依照數值的改變去做動作

---
在 AB 裡的下單機文字語法範例

Buy = 多單進場條件;
Short = 空單進場條件;

Position = IIf(Buy, 1, IIf(Short, -1, 0));
CurrentPosition = ValueWhen(Position!=0, Position, 1);
IsCPNull = IsNull(CurrentPosition);


PositionSizing = 部位控制模組計算出來要下多少部位:
marketPosition = currentPosition * PositionSizing;

_RD = StrFormat("R:");   //磁碟代號(通常文字檔都會放RAMDisk 去跑)

_SECTION_BEGIN("PlaceOrder");
_NowDate   = Now( 1 );
_NowTime   = StrRight( "00" + floor( Now( 4 ) / 10000 ), 2 )
            + ":" + StrRight( "00" + floor( Now( 4 ) / 100 ), 2 )
            + ":" + StrRight( "00" + floor( Now( 4 ) % 100 ), 2 );

_ORDER_CMD = _RD+"Order.txt";
if ( ( Now( 4 ) % 2 ) == 0 )
{
_fcsv = fopen(_ORDER_CMD, "w" );
_content = _NowDate + " " + _NowTime + StrFormat( ",%g,%g",LastValue(MarketPosition), C);

if (_fcsv)
{
fputs( _content, _fcsv );
fclose( _fcsv );
}
}
_SECTION_END();



上述範例,輸出的檔案會是 R:\Order.txt

格式為 2013/10/23 16:52:24,1,15336

剩下的就依照個人需求去做修改

參考看看了~~



頁: [1]
查看完整版本: AFL 腦力訓練 - 如何只在最後信號執行 fputs