如何用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 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: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();
參考看看了~
用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產生後才停止寫入
實驗完畢 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 看的
你是用什麼看?
能不用 for就不要用,會影響效能的waitKComplete=1;
LastValue(IIf(waitKComplete, Ref(Buy,-1), Buy)) 感謝各位高手分享 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指定檔)
我是用第一個方法,才可以事後手動改檔
StrExtract(fgets(fh), 1)
這個跟檔案的文字排列方式好像有關係,要抓最後一個d字很難
排列方式1
a,b,c,d,
排列方式2
a,b,
c,d, RLRAVYRNLCQYBCQ 發表於 14-11-27 15:28 static/image/common/back.gif
StrExtract(fgets(fh), 1)
這個跟檔案的文字排列方式好像有關係,要抓最後一個d字很難
請問是要把什麼東西寫出來
寫出來一個文字檔要什麼樣的格式
而寫出來是為了要做什麼用的
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型式的,直接換行也行
kilroy 發表於 14-11-27 15:53 static/image/common/back.gif
請問是要把什麼東西寫出來
寫出來一個文字檔要什麼樣的格式
要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式
lwhuang 發表於 14-11-27 17:51 static/image/common/back.gif
最後面不要有,
收到,原來如此,馬上重試 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:32 編輯
RLRAVYRNLCQYBCQ 發表於 14-11-28 02:23 static/image/common/back.gif
要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式
那我沒猜錯你的目的
上次那個範例就可以做到了
---
再不然你用 AmiBroker 把回測結果匯出成 EXCEL 也可以
頁:
[1]