COCO研究院

 找回密碼
 註冊
搜索
查看: 2629|回復: 14

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

[複製鏈接]
發表於 14-11-25 13:11 | 顯示全部樓層 |閱讀模式
最近,遇到一個難題:

如何用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 );

}
}

 樓主| 發表於 14-11-28 14:59 | 顯示全部樓層
本帖最後由 RLRAVYRNLCQYBCQ 於 14-11-28 15:05 編輯
lwhuang 發表於 14-11-28 06:06
Market System Analyzer (MSA)
這個看起來好高級喔,這跟用AB回測不一樣嗎?

這個只是將交易結果套用各種資金管理模式simulate其結果而已
可任意指定區間&改變口數or交易順序
回復 支持 0 反對 1

使用道具 舉報

發表於 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 [I] )
  {
   BTE=StrFormat("%02.0f/%02.0f/%02.0f,B,%.04f,%g\n",Y,M,D,BuyPrice, _PZ);
   fputs(BTE,BT);
  }

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

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

參考看看了~





 樓主| 發表於 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產生後才停止寫入

實驗完畢
發表於 14-11-25 18:10 | 顯示全部樓層
RLRAVYRNLCQYBCQ 發表於 14-11-25 14:10
用kilroy大的code在real time實盤1分chart 試了一下

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

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

你是用什麼看?




發表於 14-11-26 10:47 | 顯示全部樓層
能不用 for就不要用,會影響效能的
  1. waitKComplete=1;
  2. LastValue(IIf(waitKComplete, Ref(Buy,-1), Buy))
複製代碼

評分

參與人數 1金錢 +2 收起 理由
moneymaker + 2 感謝分享

查看全部評分

 樓主| 發表於 14-11-26 21:39 | 顯示全部樓層
感謝各位高手分享
發表於 14-11-27 09:06 | 顯示全部樓層
lwhuang 發表於 14-11-26 10:47
能不用 for就不要用,會影響效能的

Sorry,應該答不對題

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

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

  6. if( LastValue(Ref(Buy,-1)) and position!=0 )
  7. {
  8.         position = 1;
  9.         fputs(position, EH);
  10.         fputs(",", EH);
  11.         fputs(ES  , EH);
  12.         fclose( EH );
  13. }
複製代碼


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

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

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


 樓主| 發表於 14-11-27 15:28 | 顯示全部樓層
StrExtract(fgets(fh), 1)

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

排列方式1

a,b,c,d,

排列方式2

a,b,
c,d,
發表於 14-11-27 15:53 | 顯示全部樓層
RLRAVYRNLCQYBCQ 發表於 14-11-27 15:28
StrExtract(fgets(fh), 1)

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

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

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


發表於 14-11-27 17:51 | 顯示全部樓層
RLRAVYRNLCQYBCQ 發表於 14-11-27 15:28
StrExtract(fgets(fh), 1)

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

最後面不要有,

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

  4. tickers = "AAPL,MSFT,INTC";

  5. "The last item is " + StrExtract( tickers, -1 );
複製代碼


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

 樓主| 發表於 14-11-28 02:23 | 顯示全部樓層
kilroy 發表於 14-11-27 15:53
請問是要把什麼東西寫出來
寫出來一個文字檔要什麼樣的格式

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

 樓主| 發表於 14-11-28 02:27 | 顯示全部樓層
lwhuang 發表於 14-11-27 17:51
最後面不要有,

收到,原來如此,馬上重試
發表於 14-11-28 06:06 | 顯示全部樓層
RLRAVYRNLCQYBCQ 發表於 14-11-28 02:23
要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式

Market System Analyzer (MSA)
這個看起來好高級喔,這跟用AB回測不一樣嗎?
發表於 14-11-28 11:31 | 顯示全部樓層
本帖最後由 kilroy 於 14-11-28 11:32 編輯
RLRAVYRNLCQYBCQ 發表於 14-11-28 02:23
要將交易紀錄丟給 Market System Analyzer (MSA)
csv格式

那我沒猜錯你的目的

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

---

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

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

本版積分規則

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

GMT+8, 24-12-23 02:21

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |