RLRAVYRNLCQYBCQ 發表於 14-11-25 13:11

如何用fputs在this bar只寫入一次?

最近,遇到一個難題:

如何用fputs在this bar有Buy訊號時只寫入一次?

如果是以下寫法會在this bar有Buy訊號時寫入很多次
故徵求高手解答

ES=buyprice;

if( LastValue(Buy)   )
{   


EH = fopen( "C:\\record.txt", "a");

if( EH)
{

fputs(ES, EH);
fclose( EH );

}
}

RLRAVYRNLCQYBCQ 發表於 14-11-28 14:59

本帖最後由 RLRAVYRNLCQYBCQ 於 14-11-28 15:05 編輯

lwhuang 發表於 14-11-28 06:06 static/image/common/back.gif
Market System Analyzer (MSA)
這個看起來好高級喔,這跟用AB回測不一樣嗎?
這個只是將交易結果套用各種資金管理模式simulate其結果而已
可任意指定區間&改變口數or交易順序

kilroy 發表於 14-11-25 13:18

本帖最後由 kilroy 於 14-11-25 13:44 編輯

用 FOR 迴圈來寫

e.g.

_SECTION_BEGIN("BackTest Export");
BT=fopen("C:\\BackTEST.csv","w");
y = Year(); m = Month(); d = Day();
ThisIsLastBar = BarIndex() == LastValue( BarIndex() );

_PZ=1;

for( i = 0; i < BarCount; i++ )
{
if( Buy )
{
   BTE=StrFormat("%02.0f/%02.0f/%02.0f,B,%.04f,%g\n",Y,M,D,BuyPrice, _PZ);
   fputs(BTE,BT);
}

if( Short )
{
   BTE=StrFormat("%02.0f/%02.0f/%02.0f,S,%.04f,%g\n",Y,M,D, ShortPrice, _PZ);
   fputs(BTE,BT);
}

if( ThisIsLastBar )
{
   BTE = StrFormat("%02.0f/%02.0f/%02.0f,Close,%.4f\n",Y,M,D,C);
   fputs(BTE,BT);
}
}
fclose(BT);
_SECTION_END();

參考看看了~





RLRAVYRNLCQYBCQ 發表於 14-11-25 14:10

用kilroy大的code在real time實盤1分chart 試了一下

,2014/08/25 14:03:16,2063,1,   <--------- buy 訊號出現寫入
,2014/08/25 14:03:18,2063,1,
,2014/08/25 14:03:21,2063,1,
,2014/08/25 14:03:23,2063,1,
,2014/08/25 14:03:26,2063,1,
,2014/08/25 14:03:28,2063,1,
,2014/08/25 14:03:30,2063,1,
,2014/08/25 14:03:33,2063,1,
,2014/08/25 14:03:35,2063,1,
,2014/08/25 14:03:38,2063,1,
,2014/08/25 14:03:40,2063,1,
,2014/08/25 14:03:42,2063,1,
,2014/08/25 14:03:45,2063,1,
,2014/08/25 14:03:47,2063,1,
,2014/08/25 14:03:50,2063,1,
,2014/08/25 14:03:52,2063,1,
,2014/08/25 14:03:54,2063,1,
,2014/08/25 14:03:56,2063,1,
,2014/08/25 14:03:59,2063,1,
,2014/08/25 14:04:01,2063,1, <-------- 第二根bar產生後才停止寫入

實驗完畢

kilroy 發表於 14-11-25 18:10

RLRAVYRNLCQYBCQ 發表於 14-11-25 14:10 static/image/common/back.gif
用kilroy大的code在real time實盤1分chart 試了一下

,2014/08/25 14:03:16,2063,1,

那個範例是輸出成 csv 格式給 excel 看的

你是用什麼看?




lwhuang 發表於 14-11-26 10:47

能不用 for就不要用,會影響效能的waitKComplete=1;
LastValue(IIf(waitKComplete, Ref(Buy,-1), Buy))

RLRAVYRNLCQYBCQ 發表於 14-11-26 21:39

感謝各位高手分享

lwhuang 發表於 14-11-27 09:06

lwhuang 發表於 14-11-26 10:47 static/image/common/back.gif
能不用 for就不要用,會影響效能的

Sorry,應該答不對題

你可以在寫檔時寫入一個記錄,表示你已經做過這個訊號了,檢查這個記錄看要不要再做一次
ES=buyprice;

EH = fopen( "C:\\record.txt", "a");
string=StrExtract(fgets(fh), 1);
if (string!="")
position=StrToNum(string);

if( LastValue(Ref(Buy,-1)) and position!=0 )
{
        position = 1;
        fputs(position, EH);
        fputs(",", EH);
        fputs(ES, EH);
        fclose( EH );
}

或是設一個static variable
StaticVarSet( ''varname'', value, persistent = False )

把persistent設為true(相當於寫檔,但是一個特別的AB指定檔)

我是用第一個方法,才可以事後手動改檔


RLRAVYRNLCQYBCQ 發表於 14-11-27 15:28

StrExtract(fgets(fh), 1)

這個跟檔案的文字排列方式好像有關係,要抓最後一個d字很難

排列方式1

a,b,c,d,

排列方式2

a,b,
c,d,

kilroy 發表於 14-11-27 15:53

RLRAVYRNLCQYBCQ 發表於 14-11-27 15:28 static/image/common/back.gif
StrExtract(fgets(fh), 1)

這個跟檔案的文字排列方式好像有關係,要抓最後一個d字很難


請問是要把什麼東西寫出來
寫出來一個文字檔要什麼樣的格式

而寫出來是為了要做什麼用的


lwhuang 發表於 14-11-27 17:51

RLRAVYRNLCQYBCQ 發表於 14-11-27 15:28 static/image/common/back.gif
StrExtract(fgets(fh), 1)

這個跟檔案的文字排列方式好像有關係,要抓最後一個d字很難


最後面不要有,

//
// The example below shows how to use negative item
// references (Version 5.20 AND up only!)

tickers = "AAPL,MSFT,INTC";

"The last item is " + StrExtract( tickers, -1 );


你也可以不要用csv型式的,直接換行也行

RLRAVYRNLCQYBCQ 發表於 14-11-28 02:23

kilroy 發表於 14-11-27 15:53 static/image/common/back.gif
請問是要把什麼東西寫出來
寫出來一個文字檔要什麼樣的格式



要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式

RLRAVYRNLCQYBCQ 發表於 14-11-28 02:27

lwhuang 發表於 14-11-27 17:51 static/image/common/back.gif
最後面不要有,




收到,原來如此,馬上重試

lwhuang 發表於 14-11-28 06:06

RLRAVYRNLCQYBCQ 發表於 14-11-28 02:23 static/image/common/back.gif
要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式

Market System Analyzer (MSA)
這個看起來好高級喔,這跟用AB回測不一樣嗎?

kilroy 發表於 14-11-28 11:31

本帖最後由 kilroy 於 14-11-28 11:32 編輯

RLRAVYRNLCQYBCQ 發表於 14-11-28 02:23 static/image/common/back.gif
要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式
那我沒猜錯你的目的

上次那個範例就可以做到了

---

再不然你用 AmiBroker 把回測結果匯出成 EXCEL 也可以

頁: [1]
查看完整版本: 如何用fputs在this bar只寫入一次?